Поделиться через


Запустите консоль SSMA (Db2ToSQL)

Корпорация Майкрософт предоставляет надежный набор скриптовых команд для выполнения и управления действиями Помощника по миграции 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: указывает тип объекта, указанного в атрибуте имени объекта (если указана категория объекта, то тип объекта ).category

  • conversion-report-overwrite: указывает, следует ли перезаписать папку отчета оценки, если она уже существует.

    Значение по умолчанию: false. (необязательный атрибут)

  • write-summary-report-to: указывает путь, по которому создается сводный отчет.

    Если упоминается только путь к папке, создается файл по имени AssessmentReport<n>.XML . (необязательный атрибут)

    Создание отчета имеет две дополнительные подкатегории:

    • report-errors true или false, с значением по умолчанию false (необязательные атрибуты)
    • verbose true или 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: указывает тип объекта, указанного в атрибуте имени объекта (если указана категория объекта, то тип объекта ).category

  • conversion-report-overwrite: указывает, следует ли перезаписать папку отчета оценки, если она уже существует.

    Значение по умолчанию: false. (необязательный атрибут)

  • write-summary-report-to: указывает путь, по которому создается сводный отчет.

    Если упоминается только путь к папке, создается файл по имени SchemaConversionReport<n>.XML . (необязательный атрибут)

    Создание отчета имеет две дополнительные подкатегории:

    • report-errors true или false, с значением по умолчанию false (необязательные атрибуты)

    • verbose true или 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: указывает тип объекта, указанного в атрибуте имени объекта (если указана категория объекта, то тип объекта ).category

  • conversion-report-overwrite: указывает, следует ли перезаписать папку отчета оценки, если она уже существует.

    Значение по умолчанию: false. (необязательный атрибут)

  • write-summary-report-to: указывает путь, по которому создается сводный отчет.

    Если упоминается только путь к папке, создается файл по имени DataMigrationReport<n>.xml . (необязательный атрибут)

    Создание отчета имеет две дополнительные подкатегории:

    • report-errors true или false, с значением по умолчанию false (необязательные атрибуты)
    • verbose true или 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: указывает тип объекта, указанного в атрибуте имени объекта (если указана категория объекта, то тип объекта ).category

  • on-error: указывает, следует ли указывать ошибки синхронизации в качестве предупреждений или ошибок. Доступные варианты в случае ошибки:

    • report-total-as-warning
    • report-each-as-warning
    • fail-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: указывает тип объекта, указанного в атрибуте имени объекта (если указана категория объекта, то тип объекта ).category

  • on-error: указывает, следует ли указывать ошибки обновления в качестве предупреждений или ошибок. Доступные варианты в случае ошибки:

    • report-total-as-warning
    • report-each-as-warning
    • fail-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: указывает тип объекта, указанного в атрибуте имени объекта (если указана категория объекта, то тип объекта ).category

  • metabase: указывает, является ли это исходной или целевой метабазой.

  • destination: указывает путь или папку, в которой должен быть сохранен скрипт, если имя файла не задано, имя файла в формате (значение атрибута object_name).Out

  • overwrite: если 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"
}