Экспорт DDL объектов из базы данных (в один файл или в несколько файлов)
ЭКСПОРТ DDL ДЛЯ ВСЕХ ОБЪЕКТОВ В ОДИН СКРИПТ
Если вам нужно экспортировать ddl объектов из исходной базы данных Sybase ASE в один скрипт, вы можете воспользоваться утилитой ddlgen.
Эта утилита входит в состав инсталляции Sybase ASE и позволяет генерировать DDL-скрипты для различных объектов базы данных, таких как таблицы, представления, процедуры, триггеры и другие. Выполните следующие действия:
- Откройте командную строку (cmd) и перейдите в каталог, где установлен Sybase ASE.
- Выполните следующую команду, чтобы экспортировать 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, создав отдельные файлы для каждого объекта. На скриншоте приведен пример такой разбивки:
После разделения DDL-скриптов на отдельные файлы их можно использовать для дальнейшей обработки или импорта в другие системы.
Если у вас есть вопросы, пожалуйста, обращайтесь в нашу службу поддержки: support@convertum.ru
