Экспорт DDL объектов из базы данных (в один файл или в несколько файлов)

ЭКСПОРТ DDL ДЛЯ ВСЕХ ОБЪЕКТОВ В ОДИН СКРИПТ

Если вам нужно экспортировать ddl объектов из исходной базы данных Sybase ASE в один скрипт, вы можете воспользоваться утилитой ddlgen.

Эта утилита входит в состав инсталляции Sybase ASE и позволяет генерировать DDL-скрипты для различных объектов базы данных, таких как таблицы, представления, процедуры, триггеры и другие. Выполните следующие действия:

  1. Откройте командную строку (cmd) и перейдите в каталог, где установлен Sybase ASE.
  2. Выполните следующую команду, чтобы экспортировать DDL всех объектов:
    ddlgen -U[username] -P[password] -S[server]:[port] -N[dbname] > all_ddl.sql

где:

  • -U[username] указывает имя пользователя для входа в базу данных.
  • -P[password] указывает пароль вашей базы данных.
  • -S[server]:[port] указывает сервер и порт Sybase ASE (замените [server]:[port] на ваши фактические данные сервера и порта).
  • -N[dbname] указывает имя базы данных, из которой вы хотите генерировать DDL-скрипты.
  • > all_ddl.sql направляет вывод в файл с именем all_ddl.sql. Эта команда создаст один файл сценария, all_ddl.sql, содержащий сценарии DDL для всех объектов в указанной базе данных.

Вы можете найти более подробную документацию по команде ddlgen здесь.

РАЗБИЕНИЕ DDL ОБЪЕКТОВ НА ОТДЕЛЬНЫЕ ФАЙЛЫ

Если вы хотите разбить экспортированные DDL-скрипты на отдельные файлы для каждого объекта, то после создания файла all_ddl.sql можно выполнить следующие действия:

С помощью PowerShell разберите файл all_ddl.sql и разделите DDL-скрипты на отдельные файлы (перед этим убедитесь, что вы находитесь в директории, где создан файл all_ddl.sql, если нет, используйте команду cd C:\file_path). Для вашего удобства мы привели ниже сценарий PowerShell, который создаст отдельные файлы для каждого типа объектов (например, таблиц, процедур, функций, триггеров, представлений, типов, определяемых пользователем):

# Чтение содержимого файла
$content = Get-Content all_ddl.sql
$filename = $null
$objectType = $null

# Создание каталогов для хранения файлов
$baseDir = "DDL_Objects"
$categories = @("Tables", "Procedures", "Functions", "Triggers", "Views", "UserDefinedDatatype")
foreach ($category in $categories) {
    New-Item -ItemType Directory -Path "$baseDir\$category" -ErrorAction SilentlyContinue
}

foreach ($line in $content) {
    # Define object type
    if ($line -match "^CREATE\s+(TABLE|PROCEDURE|FUNCTION|TRIGGER|VIEW|TYPE)\s+(\w+)") {
        $objectType = $matches[1]   
        $name = $matches[2] -replace "[^a-zA-Z0-9_]", ""
        $subdir = switch ($objectType) {
            "TABLE"     { "Tables" }
            "PROCEDURE" { "Procedures" }
            "FUNCTION"  { "Functions" }
            "TRIGGER"   { "Triggers" }
            "VIEW"      { "Views" }
            "TYPE"      { "UserDefinedDatatype" }
            default     { "Other" }
        }
        $filename = "$baseDir\$subdir\$name.sql"
    }

    # Обнаружение sp_addtype (UDT)
    if ($line -match "exec\s+sp_addtype\s+'(\w+)'\s*,") {
        $name = $matches[1] -replace "[^a-zA-Z0-9_]", ""  
        $filename = "$baseDir\UserDefinedDatatype\$name.sql"
    }

    if ($filename) {
        Add-Content -Path $filename -Value $line
    }
}

Этот сценарий разделит содержимое DDL на такие папки, как Tables, Procedures, Functions, Triggers, Views и UserDefinedDatatypes, создав отдельные файлы для каждого объекта. На скриншоте приведен пример такой разбивки:

ASE_export_ddl_to_files

После разделения DDL-скриптов на отдельные файлы их можно использовать для дальнейшей обработки или импорта в другие системы.

Если у вас есть вопросы, пожалуйста, обращайтесь в нашу службу поддержки: support@convertum.ru