Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Корпорация Майкрософт предоставляет надежный набор скриптовых команд для выполнения и управления действиями Помощника по миграции SQL Server (SSMA). В последующих разделах подробно описано то же самое. Консольное приложение использует определенные стандартные команды файла скриптов, перечисленные в этом разделе.
Команды файла скрипта проекта
Команды Project обрабатывают создание проектов, открытие, сохранение и выход из проектов.
Команда create-new-project
Создает новый проект SSMA.
Сценарий
project-folder. Указывает папку создаваемого проекта.project-name. Указывает имя проекта. {строка}overwrite-if-exists. Необязательный атрибут. Указывает, следует ли перезаписывать существующий проект. {boolean}
Команда project-type
Необязательный атрибут. Указывает тип проекта, то есть , sql-server-2016, sql-server-2017, sql-server-2019, sql-server-2022, sql-server-2025или sql-azure. Значение по умолчанию — sql-server-2016.
Пример синтаксиса
<create-new-project
project-folder="<project-folder>"
project-name="<project-name>"
overwrite-if-exists="<true/false>" (optional)
project-type="<sql-server-2016 | sql-server-2017 | sql-server-2019 | sql-server-2022 | sql-azure>" (optional)
/>
Атрибут overwrite-if-exists по умолчанию является false.
Атрибут project-type по умолчанию является sql-server-2016.
Команда open-project
Открывает существующий проект.
Сценарий
project-folderуказывает папку создаваемого проекта. Команда завершается ошибкой, если указанная папка не существует. {строка}project-nameуказывает имя проекта. Команда завершается ошибкой, если указанный проект не существует. {строка}
Пример синтаксиса
<open-project
project-folder="<project-folder>"
project-name="<project-name>"
/>
Консольное приложение SSMA для Db2 поддерживает обратную совместимость. Вы можете открывать проекты, созданные предыдущей версией SSMA.
Команда save-project
Сохраняет проект миграции.
Пример синтаксиса
<save-project/>
Команда close-project
Закрывает проект миграции.
Пример синтаксиса
<close-project
if-modified="<save/error/ignore>" (optional)
/>
Команды файла скрипта подключения к базе данных
Команды подключения к базе данных помогают подключиться к базе данных.
Функция обзора пользовательского интерфейса не поддерживается в консоли.
Дополнительные сведения см. в разделе "Создание файлов скриптов".
Команда connect-source-database
Выполняет подключение к исходной базе данных и загружает метаданные высокого уровня исходной базы данных, но не все метаданные.
Если подключение к источнику не удается установить, создается ошибка, и консольное приложение останавливает дальнейшее выполнение.
Сценарий
Определение сервера извлекается из атрибута имени, определенного для каждого подключения, в разделе сервера файла подключения сервера или файла скрипта.
Пример синтаксиса
<connect-source-database server="<server-unique-name>"/>
force-load-source-database/force-load-target-database
Загружает исходные метаданные.
Полезно для работы с проектом миграции в автономном режиме.
Если не удается установить подключение к источнику или целевому объекту, создается ошибка, и консольное приложение останавливает дальнейшее выполнение.
Сценарий
Требуется один или несколько узлов метабазы в качестве параметра командной строки.
Пример синтаксиса
<force-load object-name="<object-name>"
metabase="<source/target>"/>
Или:
<force-load>
<metabase-object object-name="<object-name>"/>
</force-load>
reconnect-source-database
Повторно подключается к базе данных-источнику, но не загружает метаданные в отличие от команды connect-source-database.
Если не удается установить подключение к источнику (повторно), выдается ошибка, и консольное приложение останавливает дальнейшее выполнение программы.
Пример синтаксиса
<reconnect-source-database server="<server-unique-name>"/>
connect-target-database
Подключается к целевой базе данных SQL Server и загружает метаданные высокого уровня целевой базы данных, но не метаданные полностью.
Если подключение к целевому объекту не удается установить, создается ошибка, и консольное приложение останавливает дальнейшее выполнение.
Сценарий
Определение сервера извлекается из атрибута имени, указанного для каждого подключения, в разделе серверов файла подключения или файла скрипта.
Пример синтаксиса
<connect-target-database server="<server-unique-name>"/>
reconnect-target-database
Повторно подключается к целевой базе данных, но не загружает метаданные, в отличие от команды connect-target-database.
Если не удается установить (повторное) подключение к целевой системе, возникает ошибка, и консольное приложение останавливает дальнейшее выполнение.
Пример синтаксиса
<reconnect-target-database server="<server-unique-name>"/>
Команды файла скрипта отчета
Команды для создания отчета генерируют отчеты о производительности различных операций консоли SSMA.
generate-assessment-report
Создает отчеты об оценке в исходной базе данных.
Если подключение к базе данных-источнику не выполняется перед выполнением этой команды, создается ошибка и консольное приложение завершает работу.
Сбой подключения к исходному серверу базы данных во время выполнения команды также приводит к прекращению консольного приложения.
Сценарий
conversion-report-folder: указывает папку, в которой можно хранить отчет об оценке. (необязательный атрибут)object-name: указывает объекты, которые рассматриваются для создания отчета об оценке (оно может иметь отдельные имена объектов или имя объекта группы).object-type: указывает тип объекта, указанного в атрибуте имени объекта (если указана категория объекта, то тип объекта ).categoryconversion-report-overwrite: указывает, следует ли перезаписать папку отчета оценки, если она уже существует.Значение по умолчанию: false. (необязательный атрибут)
write-summary-report-to: указывает путь, по которому создается сводный отчет.Если упоминается только путь к папке, создается файл по имени AssessmentReport<n>.XML . (необязательный атрибут)
Создание отчета имеет две дополнительные подкатегории:
-
report-errorstrueилиfalse, с значением по умолчаниюfalse(необязательные атрибуты) -
verbosetrueилиfalse, с значением по умолчаниюfalse(необязательные атрибуты)
-
Пример синтаксиса
<generate-assessment-report
object-name="<object-name>"
object-type="<object-category>"
write-summary-report-to="<file>" (optional)
verbose="<true/false>" (optional)
report-errors="<true/false>" (optional)
assessment-report-folder="<folder-name>" (optional)
conversion-report-overwrite="<true/false>" (optional)
/>
Или:
<generate-assessment-report
conversion-report-folder="<folder-name>" (optional)
conversion-report-overwrite="<true/false>" (optional)
>
<metabase-object object-name="<object-name>"
object-type="<object-category>"/>
</generate-assessment-report>
Команды файла скрипта миграции
Команды миграции преобразуют схему целевой базы данных в исходную схему и переносятся данные на целевой сервер. Параметр выходных данных консоли по умолчанию для команд миграции — "Полный" выходной отчет без подробных отчетов об ошибках: только сводка по корневому узлу дерева исходного объекта.
convert-schema
Выполняет преобразование схемы из источника в целевую схему.
Если подключение к исходной или целевой базе данных не выполняется перед выполнением этой команды, либо подключение к исходному или целевому серверу базы данных завершается сбоем во время выполнения команды, создается ошибка, и консольное приложение завершает работу.
Сценарий
conversion-report-folder: указывает папку, в которой можно хранить отчет об оценке. (необязательный атрибут)object-name: указывает исходные объекты, которые рассматриваются для преобразования схемы (она может иметь отдельные имена объектов или имя объекта группы).object-type: указывает тип объекта, указанного в атрибуте имени объекта (если указана категория объекта, то тип объекта ).categoryconversion-report-overwrite: указывает, следует ли перезаписать папку отчета оценки, если она уже существует.Значение по умолчанию: false. (необязательный атрибут)
write-summary-report-to: указывает путь, по которому создается сводный отчет.Если упоминается только путь к папке, создается файл по имени SchemaConversionReport<n>.XML . (необязательный атрибут)
Создание отчета имеет две дополнительные подкатегории:
report-errorstrueилиfalse, с значением по умолчаниюfalse(необязательные атрибуты)verbosetrueилиfalse, с значением по умолчаниюfalse(необязательные атрибуты)
Пример синтаксиса
<convert-schema
object-name="<object-name>"
object-type="<object-category>"
write-summary-report-to="<file-name/folder-name>" (optional)
verbose="<true/false>" (optional)
report-errors="<true/false>" (optional)
conversion-report-folder="<folder-name>" (optional)
conversion-report-overwrite="<true/false>" (optional)
/>
Или:
<convert-schema
conversion-report-folder="<folder-name>" (optional)
conversion-report-overwrite="<true/false>" (optional)
<metabase-object object-name="<object-name>"
object-type="<object-category>"/>
</convert-schema>
Команда migrate-data
Переносит исходные данные в целевой объект.
Сценарий
conversion-report-folder: указывает папку, в которой можно хранить отчет об оценке. (необязательный атрибут)object-name: указывает исходные объекты, которые рассматриваются для переноса данных (они могут иметь отдельные имена объектов или имя объекта группы).object-type: указывает тип объекта, указанного в атрибуте имени объекта (если указана категория объекта, то тип объекта ).categoryconversion-report-overwrite: указывает, следует ли перезаписать папку отчета оценки, если она уже существует.Значение по умолчанию: false. (необязательный атрибут)
write-summary-report-to: указывает путь, по которому создается сводный отчет.Если упоминается только путь к папке, создается файл по имени
DataMigrationReport<n>.xml. (необязательный атрибут)Создание отчета имеет две дополнительные подкатегории:
-
report-errorstrueилиfalse, с значением по умолчаниюfalse(необязательные атрибуты) -
verbosetrueилиfalse, с значением по умолчаниюfalse(необязательные атрибуты)
-
Пример синтаксиса
<migrate-data
write-summary-report-to="<file-name/folder-name>"
report-errors="<true/false>"
verbose="<true/false>">
<metabase-object object-name="<object-name>"/>
<metabase-object object-name="<object-name>"/>
<metabase-object object-name="<object-name>"/>
<data-migration-connection
source-use-last-used="true"/source-server="<server-unique-name>"
target-use-last-used="true"/target-server="<server-unique-name>"/>
</migrate-data>
Или:
<migrate-data
object-name="<object-name>"
object-type="<object-category>"
write-summary-report-to="<file-name/folder-name>"
report-errors="<true/false>"
verbose="<true/false>"/>
Команды файла скрипта подготовки миграции
Команда подготовки миграции инициирует сопоставление схем между исходными и целевыми базами данных.
Команда map-schema
Сопоставление схемы исходной базы данных с целевой схемой.
Команда source-schema
Указывает исходную схему, которую планируется перенести.
Команда sql-server-schema
Указывает целевую схему, в которой мы хотим перенести ее.
Пример синтаксиса
<map-schema
source-schema="<source-schema>"
sql-server-schema="<target-schema>"/>
Команда map-schema
Сопоставление схемы исходной базы данных с целевой схемой.
Сценарий
source-schema указывает исходную схему, которую планируется перенести.
sql-server-schema указывает целевую схему, в которой мы хотим перенести ее.
Пример синтаксиса
<map-schema
source-schema="<source-schema>"
sql-server-schema="<target-schema>"/>
Команды файла скрипта управляемости
Команды управляемости помогают синхронизировать целевые объекты базы данных с исходной базой данных.
Параметр выходных данных консоли по умолчанию для команд миграции — "Полный" выходной отчет без подробных отчетов об ошибках: только сводка по корневому узлу дерева исходного объекта.
Команда synchronize-target
Синхронизирует целевые объекты с целевой базой данных.
Если эта команда выполняется в исходной базе данных, возникает ошибка.
Если подключение к целевой базе данных не выполняется перед выполнением этой команды, или подключение к целевому серверу базы данных завершается сбоем во время выполнения команды, создается ошибка и консольное приложение завершает работу.
Сценарий
object-name: указывает целевые объекты, которые рассматриваются для синхронизации с целевой базой данных (это может иметь отдельные имена объектов или имя объекта группы).object-type: указывает тип объекта, указанного в атрибуте имени объекта (если указана категория объекта, то тип объекта ).categoryon-error: указывает, следует ли указывать ошибки синхронизации в качестве предупреждений или ошибок. Доступные варианты в случае ошибки:report-total-as-warningreport-each-as-warningfail-script
report-errors-to: указывает расположение отчета об ошибке для операции синхронизации (необязательный атрибут)Если задан только путь к папке, создается файл по имени
TargetSynchronizationReport.xml.
Пример синтаксиса
<synchronize-target
object-name="<object-name>"
on-error="<report-total-as-warning/
report-each-as-warning/
fail-script>" (optional)
report-errors-to="<file-name/folder-name>" (optional)
/>
Или:
<synchronize-target
object-name="<object-name>"
object-type="<object-category>"/>
Или:
<synchronize-target>
<metabase-object object-name="<object-name>"/>
<metabase-object object-name="<object-name>"/>
<metabase-object object-name="<object-name>"/>
</synchronize-target>
Команда refresh-from-database
Обновляет исходные объекты из базы данных.
Если эта команда выполняется в целевой базе данных, создается ошибка.
Сценарий
Требуется один или несколько узлов метабазы в качестве параметра командной строки.
object-name: указывает исходные объекты, которые рассматриваются для обновления из исходной базы данных (это может иметь отдельные имена объектов или имя объекта группы).object-type: указывает тип объекта, указанного в атрибуте имени объекта (если указана категория объекта, то тип объекта ).categoryon-error: указывает, следует ли указывать ошибки обновления в качестве предупреждений или ошибок. Доступные варианты в случае ошибки:report-total-as-warningreport-each-as-warningfail-script
report-errors-to: указывает расположение отчета об ошибке для операции синхронизации (необязательный атрибут)Если задан только путь к папке, создается файл по имени
SourceDBRefreshReport.xml.
Пример синтаксиса
<refresh-from-database
object-name="<object-name>"
on-error="<report-total-as-warning/
report-each-as-warning/
fail-script>" (optional)
report-errors-to="<file-name/folder-name>" (optional)
/>
Или:
<refresh-from-database
object-name="<object-name>"
object-type="<object-category>"/>
Или:
<refresh-from-database>
<metabase-object object-name="<object-name>"/>
</refresh-from-database>
Команды файла генерации скриптов
Команды генерации скриптов выполняют две задачи: они помогают сохранять выходные данные консоли в файле скрипта и записывать выходные данные T-SQL в консоль или файл на основе указанного параметра.
Команда save-as-script
Используется для сохранения скриптов объектов в файл, указанный через metabase=target. Это альтернатива команде синхронизации, в которой мы получаем скрипты и выполняем то же самое в целевой базе данных.
Сценарий
Требуется один или несколько узлов метабазы в качестве параметра командной строки.
object-name: указывает объекты, скрипты которых необходимо сохранить. (У него могут быть отдельные имена объектов или имя объекта группы)object-type: указывает тип объекта, указанного в атрибуте имени объекта (если указана категория объекта, то тип объекта ).categorymetabase: указывает, является ли это исходной или целевой метабазой.destination: указывает путь или папку, в которой должен быть сохранен скрипт, если имя файла не задано, имя файла в формате (значение атрибута object_name).Outoverwrite: еслиtrueсуществует, то он перезапишется с тем же именем файла. Он может принимать значения (true/false).
Пример синтаксиса
<save-as-script
metabase="<source/target>"
object-name="<object-name>"
object-type="<object-category>"
destination="<file/folder>"
overwrite="<true/false>" (optional)
/>
Или:
<save-as-script
metabase="<source/target>"
destination="<file/folder>"
<metabase-object object-name="<object-name>"
object-type="<object-category>"/>
</save-as-script>
Команда convert-sql-statement
contextуказывает имя схемы.destinationУказывает, следует ли хранить выходные данные в файле.Если этот атрибут не указан, на консоли отображается преобразованная инструкция T-SQL. (необязательный атрибут)
conversion-report-folderуказывает папку, в которой можно хранить отчет об оценке. (необязательный атрибут)conversion-report-overwriteуказывает, следует ли перезаписать папку отчета оценки, если она уже существует.Значение по умолчанию: false. (необязательный атрибут)
write-converted-sql-toуказывает путь к папке файла (или), в котором должен храниться преобразованный T-SQL. Если путь к папке указан вместе сsql-filesатрибутом, каждый исходный файл имеет соответствующий целевой файл T-SQL, созданный в указанной папке. Если путь к папке указан вместе сsqlатрибутом, преобразованный T-SQL записывается в файл с именемResult.outв указанной папке.sqlуказывает инструкции DB2 SQL, которые необходимо преобразовать, одну или несколько инструкций можно разделить с помощью оператора ";".sql-filesуказывает путь к файлам SQL, которые необходимо преобразовать в код T-SQL.write-summary-report-toуказывает путь, по которому создается отчет. Если упоминается только путь к папке, создается файл по имениConvertSQLReport.xml. (необязательный атрибут)Создание отчета имеет две дополнительные подкатегории:
-
report-errors:trueилиfalse, с значением по умолчаниюfalse(необязательные атрибуты) -
verbose:trueилиfalse, с значением по умолчаниюfalse(необязательные атрибуты)
-
Сценарий
Требуется один или несколько узлов метабазы в качестве параметра командной строки.
Пример синтаксиса
<convert-sql-statement
context="<schema-name>"
conversion-report-folder="<folder-name>"
conversion-report-overwrite="<true/false>"
write-summary-report-to="<file-name/folder-name>" (optional)
verbose="<true/false>" (optional)
report-errors="<true/false>" (optional)
destination="<stdout/file>" (optional)
file-name="<file-name>"
sql="SELECT 1 FROM DUAL;">
<output-window suppress-messages="<true/false>" />
</convert-sql-statement>
Или:
<convert-sql-statement
context="<schema-name>"
conversion-report-folder="<folder-name>"
conversion-report-overwrite="<true/false>"
write-summary-report-to="<file-name/folder-name>" (optional)
verbose="<true/false>" (optional)
report-errors="<true/false>"
destination="<stdout/file>" (optional)
write-converted-sql-to="<file-name/folder-name>"
sql-files="<folder-name>\*.sql" />
Или:
<convert-sql-statement
context="<schema-name>"
conversion-report-folder="<folder-name>"
conversion-report-overwrite="<true/false>"
sql-files="<folder-name>\*.sql" />
Запустить консоль SSMA параллельно
Служебная программа консоли SSMA может выполняться параллельно с помощью скриптов, указав имя базы данных и соответствующий путь к папке в качестве входных параметров. В следующем примере базы данных SAMPLE1SAMPLE2и SAMPLE3, с соответствующими путями к папке, предоставляются в качестве входных данных для скрипта.
SAMPLE1,C:\folder path\SSMA Project1
SAMPLE2,C:\folder path\SSMA Project2
SAMPLE3,C:\folder path\SSMA Project3
Следующий пример скрипта PowerShell позволяет параллельно выполнять консоль SSMA.
$baseFolder = "C:\folder path\folder1"
$ssmaExe = "C:\folder path\SSMAforDb2Console.exe"
$databaselistPath = Join-Path $baseFolder "Databaselist.txt"
$conversionXmlTemplate = Join-Path $baseFolder "ConversionAndDataMigrationSample.xml"
$variableXmlTemplate = Join-Path $baseFolder "VariableValueFileSample.xml"
# Read all entries
$entries = Get-Content $databaselistPath | Where-Object { $_.Trim() -ne "" }
# Prepare the entries
$preparedEntries = foreach ($entry in $entries) {
$parts = $entry -split ","
$dbName = $parts[0].Trim()
$workingFolder = $parts[1].Trim()
if ($dbNameCounts.ContainsKey($dbName)) {
$dbNameCounts[$dbName]++
$suffix = "_{0:D2}" -f $dbNameCounts[$dbName]
$fileDbName = "$dbName$suffix"
}
else {
$dbNameCounts[$dbName] = 0
$fileDbName = $dbName
}
[PSCustomObject]@{
DbName = $dbName
WorkingFolder = $workingFolder
FileDbName = $fileDbName
}
}
# Run in parallel
$preparedEntries | ForEach-Object -Parallel {
$dbName = $_.DbName
$workingFolder = $_.WorkingFolder
$fileDbName = $_.FileDbName
# Update ConversionAndDataMigrationSample.xml
$convTree = [xml](Get-Content $using:conversionXmlTemplate)
$convTree.SelectNodes("//initial-catalog") | ForEach-Object { $_.SetAttribute("value", $dbName) }
$conversionXmlPath = Join-Path $using:baseFolder "ConversionAndDataMigrationSample_$fileDbName.xml"
$convTree.Save($conversionXmlPath)
# Update VariableValueFileSample.xml
$varTree = [xml](Get-Content $using:variableXmlTemplate)
$nodes = $varTree.SelectNodes('//variable[@name="$WorkingFolder$"]')
if ($nodes.Count -eq 0) {
Write-Host "No variable node found for `$WorkingFolder$"
}
else {
$nodes | ForEach-Object { $_.value = $workingFolder }
}
$nodes2 = $varTree.SelectNodes('//variable[@name="$Db2InitialCatalog$"]')
if ($nodes2.Count -eq 0) {
Write-Host "No variable node found for `$Db2InitialCatalog$"
}
else {
$nodes2 | ForEach-Object { $_.value = $dbName }
}
$variableXmlPath = Join-Path $using:baseFolder "VariableValueFileSample_$fileDbName.xml"
$varTree.Save($variableXmlPath)
# Prepare output/error file paths
$outputFile = Join-Path $using:baseFolder "ssma_output_$fileDbName.txt"
$errorFile = Join-Path $using:baseFolder "ssma_error_$fileDbName.txt"
# Prepare argument list
$arguments = "-s `"$conversionXmlPath`" -v `"$variableXmlPath`""
# Run SSMA console
Start-Process -FilePath $using:ssmaExe -ArgumentList $arguments -RedirectStandardOutput $outputFile -RedirectStandardError $errorFile -Wait
Write-Host "Executed command: `"$using:ssmaExe`" $arguments"
}