Partilhar via


Executar o console SSMA (Db2ToSQL)

A Microsoft fornece um conjunto robusto de comandos de arquivo de script para executar e controlar atividades do Assistente de Migração do SQL Server (SSMA). As secções seguintes detalham o mesmo. O aplicativo de console usa determinados comandos de arquivo de script padrão, conforme enumerado nesta seção.

Comandos do arquivo de script do projeto

Os comandos Project lidam com a criação de projetos, abertura, salvamento e saída de projetos.

create-new-project comando

Cria um novo projeto SSMA.

Script

  • project-folder. Indica a pasta do projeto que está sendo criado.

  • project-name. Indica o nome do projeto. {string}

  • overwrite-if-exists. Atributo opcional. Indica se um projeto existente deve ser substituído. {Booleano}

project-type comando

Atributo opcional. Indica o tipo de projeto, ou seja, sql-server-2016, , sql-server-2017, sql-server-2019, sql-server-2022, sql-server-2025, ou sql-azure. A predefinição é sql-server-2016.

Exemplo de sintaxe

<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)
/>

O atributo overwrite-if-exists é false por defeito.

O atributo project-type é sql-server-2016 por defeito.

open-project comando

Abre um projeto existente.

Script

  • project-folder indica a pasta do projeto que está sendo criado. O comando falhará se a pasta especificada não existir. {string}

  • project-name indica o nome do projeto. O comando falhará se o projeto especificado não existir. {string}

Exemplo de sintaxe

<open-project
   project-folder="<project-folder>"
   project-name="<project-name>"
/>

SSMA for Db2 Console Application suporta compatibilidade com versões anteriores. Você pode abrir projetos criados pela versão anterior do SSMA.

save-project comando

Salva o projeto de migração.

Exemplo de sintaxe

<save-project/>

close-project comando

Fecha o projeto de migração.

Exemplo de sintaxe

<close-project
   if-modified="<save/error/ignore>"   (optional)
/>

Comandos do arquivo de script de conexão de banco de dados

Os comandos Conexão de Banco de Dados ajudam a se conectar ao banco de dados.

O recurso Procurar da interface não é suportado no console.

Para obter mais informações, consulte Criar arquivos de script.

connect-source-database comando

Executa a conexão com o banco de dados de origem e carrega metadados de alto nível do banco de dados de origem, mas não todos os metadados.

Se a conexão com a origem não puder ser estabelecida, um erro será gerado e o aplicativo de console interromperá a execução adicional

Script

A definição do servidor é recuperada do atributo de nome definido para cada conexão, na seção do servidor no arquivo de conexão do servidor ou no arquivo de script.

Exemplo de sintaxe

<connect-source-database  server="<server-unique-name>"/>

force-load-source-database/force-load-target-database

Carrega os metadados de origem.

Útil para trabalhar no projeto de migração offline.

Se a conexão com a origem/destino não puder ser estabelecida, um erro será gerado e o aplicativo de console interromperá a execução adicional

Script

Requer um ou vários nós da metabase como parâmetro de linha de comando.

Exemplo de sintaxe

<force-load object-name="<object-name>"
  metabase="<source/target>"/>

Ou:

<force-load>
   <metabase-object object-name="<object-name>"/>
</force-load>

reconnect-source-database

Reconecta-se ao banco de dados de origem, mas não carrega nenhum metadado, ao contrário do comando connect-source-database.

Se a (re)conexão com a origem não puder ser estabelecida, um erro será gerado e o aplicativo de console interromperá a execução adicional.

Exemplo de sintaxe

<reconnect-source-database  server="<server-unique-name>"/>

connect-target-database

Conecta-se ao banco de dados SQL Server de destino e carrega metadados de alto nível do banco de dados de destino, mas não totalmente os metadados.

Se a conexão com o destino não puder ser estabelecida, um erro será gerado e o aplicativo de console interromperá a execução.

Script

A definição do servidor é recuperada do atributo de nome definido para cada conexão, na seção do servidor do arquivo de conexão ou no arquivo de script.

Exemplo de sintaxe

<connect-target-database  server="<server-unique-name>"/>

reconnect-target-database

Reconecta-se ao banco de dados de destino, mas não carrega nenhum metadados, ao contrário do comando connect-target-database.

Se a (re)conexão com o destino não puder ser estabelecida, um erro será gerado e o aplicativo de console interromperá a execução adicional.

Exemplo de sintaxe

<reconnect-target-database  server="<server-unique-name>"/>

Comandos do arquivo de script de relatório

Os comandos Report geram relatórios sobre o desempenho de várias atividades do console SSMA.

generate-assessment-report

Gera relatórios de avaliação no banco de dados de origem.

Se a conexão do banco de dados de origem não for executada antes de executar esse comando, um erro será gerado e o aplicativo de console será encerrado.

A falha ao se conectar ao servidor de banco de dados de origem durante a execução do comando também resulta no encerramento do aplicativo de console.

Script

  • conversion-report-folder: Especifica a pasta onde o relatório de avaliação pode ser armazenado. (atributo opcional)

  • object-name: Especifica os objetos considerados para a geração de relatórios de avaliação (pode ter nomes de objetos individuais ou um nome de objeto de grupo).

  • object-type: especifica o tipo do objeto especificado no atributo object-name (se a categoria do objeto for especificada, o tipo de objeto será category).

  • conversion-report-overwrite: Especifica se a pasta do relatório de avaliação deve ser substituída, caso ela já exista.

    Valor padrão: false. (atributo opcional)

  • write-summary-report-to: Especifica o caminho onde o relatório de resumo é gerado.

    Se apenas o caminho da pasta for mencionado, o arquivo por nome AssessmentReport<n>.XML será criado. (atributo opcional)

    A criação de relatórios tem mais duas subcategorias:

    • report-errors true ou false, com padrão como false (atributos opcionais)
    • verbose true ou false, com padrão como false (atributos opcionais)

Exemplo de sintaxe

<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)
/>

Ou:

<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>

Comandos do arquivo de script de migração

Os comandos Migration convertem o esquema do banco de dados de destino para o esquema de origem e migram dados para o servidor de destino. A configuração de saída padrão do console para os comandos de migração é o relatório de saída 'Completo' sem relatório de erros detalhado: apenas resumo no nó raiz da árvore de objetos de origem.

convert-schema

Executa a conversão de esquema do esquema de origem para o esquema de destino.

Se a conexão do banco de dados de origem ou de destino não for executada antes da execução desse comando, ou se a conexão com o servidor de banco de dados de origem ou de destino falhar durante a execução do comando, um erro será gerado e o aplicativo de console será encerrado.

Script

  • conversion-report-folder: Especifica a pasta onde o relatório de avaliação pode ser armazenado. (atributo opcional)

  • object-name: Especifica os objetos de origem considerados para converter esquema (Ele pode ter nomes de objetos individuais ou um nome de objeto de grupo).

  • object-type: especifica o tipo do objeto especificado no atributo object-name (se a categoria do objeto for especificada, o tipo de objeto será category).

  • conversion-report-overwrite: Especifica se a pasta do relatório de avaliação deve ser substituída, caso ela já exista.

    Valor padrão: false. (atributo opcional)

  • write-summary-report-to: Especifica o caminho onde o relatório de resumo é gerado.

    Se apenas o caminho da pasta for mencionado, o arquivo por nome SchemaConversionReport<n>.XML será criado. (atributo opcional)

    A criação de relatórios tem mais duas subcategorias:

    • report-errors true ou false, com padrão como false (atributos opcionais)

    • verbose true ou false, com padrão como false (atributos opcionais)

Exemplo de sintaxe

<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)
/>

Ou:

<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 comando

Migra os dados de origem para o destino.

Script

  • conversion-report-folder: Especifica a pasta onde o relatório de avaliação pode ser armazenado. (atributo opcional)

  • object-name: Especifica os objetos de origem considerados para migrar dados (pode ter nomes de objetos individuais ou um nome de objeto de grupo).

  • object-type: especifica o tipo do objeto especificado no atributo object-name (se a categoria do objeto for especificada, o tipo de objeto será category).

  • conversion-report-overwrite: Especifica se a pasta do relatório de avaliação deve ser substituída, caso ela já exista.

    Valor padrão: false. (atributo opcional)

  • write-summary-report-to: Especifica o caminho onde o relatório de resumo é gerado.

    Se apenas o caminho da pasta for mencionado, o arquivo por nome DataMigrationReport<n>.xml será criado. (atributo opcional)

    A criação de relatórios tem mais duas subcategorias:

    • report-errors true ou false, com padrão como false (atributos opcionais)
    • verbose true ou false, com padrão como false (atributos opcionais)

Exemplo de sintaxe

<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>

Ou:

<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>"/>

Comandos do arquivo de script de preparação da migração

O comando Preparação da Migração inicia o mapeamento de esquema entre os bancos de dados de origem e de destino.

map-schema comando

Mapeamento de esquema do banco de dados de origem para o esquema de destino.

source-schema comando

Especifica o esquema de origem que pretendemos migrar.

sql-server-schema comando

Especifica o esquema de destino para onde queremos que ele seja migrado.

Exemplo de sintaxe

<map-schema
   source-schema="<source-schema>"
   sql-server-schema="<target-schema>"/>

map-schema comando

Mapeamento de esquema do banco de dados de origem para o esquema de destino.

Script

source-schema especifica o esquema de origem que pretendemos migrar.

sql-server-schema especifica o esquema de destino para onde queremos que ele seja migrado.

Exemplo de sintaxe

<map-schema
   source-schema="<source-schema>"
   sql-server-schema="<target-schema>"/>

Comandos de arquivo de script de gerenciabilidade

Os comandos Manageability ajudam a sincronizar os objetos do banco de dados de destino com o banco de dados de origem.

A configuração de saída padrão do console para os comandos de migração é o relatório de saída 'Completo' sem relatório de erros detalhado: apenas resumo no nó raiz da árvore de objetos de origem.

synchronize-target comando

Sincroniza os objetos de destino com o banco de dados de destino.

Se esse comando for executado no banco de dados de origem, um erro será encontrado.

Se a conexão do banco de dados de destino não for executada antes da execução desse comando ou se a conexão com o servidor de banco de dados de destino falhar durante a execução do comando, um erro será gerado e o aplicativo de console será encerrado.

Script

  • object-name: Especifica os objetos de destino considerados para sincronização com o banco de dados de destino (Ele pode ter nomes de objetos individuais ou um nome de objeto de grupo).

  • object-type: especifica o tipo do objeto especificado no atributo object-name (se a categoria do objeto for especificada, o tipo de objeto será category).

  • on-error: Especifica se os erros de sincronização devem ser especificados como avisos ou erro. Opções disponíveis para on-error:

    • report-total-as-warning
    • report-each-as-warning
    • fail-script
  • report-errors-to: Especifica o local do relatório de erros para a operação de sincronização (atributo opcional)

    Se apenas o caminho da pasta for fornecido, o arquivo por nome TargetSynchronizationReport.xml será criado.

Exemplo de sintaxe

<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)
/>

Ou:

<synchronize-target
   object-name="<object-name>"
   object-type="<object-category>"/>

Ou:

<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 comando

Atualiza os objetos de origem do banco de dados.

Se esse comando for executado no banco de dados de destino, um erro será gerado.

Script

Requer um ou vários nós da metabase como parâmetro de linha de comando.

  • object-name: Especifica os objetos de origem considerados para atualização do banco de dados de origem (Ele pode ter nomes de objetos individuais ou um nome de objeto de grupo).

  • object-type: Especifica o tipo do objeto especificado no atributo object-name (se a categoria do objeto for especificada, o tipo de objeto será category).

  • on-error: Especifica se os erros de atualização devem ser especificados como avisos ou erros. Opções disponíveis para on-error:

    • report-total-as-warning
    • report-each-as-warning
    • fail-script
  • report-errors-to: Especifica o local do relatório de erros para a operação de sincronização (atributo opcional)

    Se apenas o caminho da pasta for fornecido, um arquivo com o nome de SourceDBRefreshReport.xml é criado.

Exemplo de sintaxe

<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)
/>

Ou:

<refresh-from-database
   object-name="<object-name>"
   object-type="<object-category>"/>

Ou:

<refresh-from-database>
   <metabase-object object-name="<object-name>"/>
</refresh-from-database>

Comandos de arquivo para geração de scripts

Os comandos de Geração de Scripts executam duas tarefas: ajudam a salvar a saída do console em um arquivo de script; e registre a saída T-SQL no console ou em um arquivo com base no parâmetro especificado.

save-as-script comando

Usado para guardar os scripts dos objetos num ficheiro especificado quando metabase=target. Esta é uma alternativa ao comando de sincronização, no qual obtemos os scripts e executamos os mesmos no banco de dados de destino.

Script

Requer um ou vários nós da metabase como parâmetro de linha de comando.

  • object-name: Especifica os objetos cujos scripts devem ser salvos. (Pode ter nomes de objetos individuais ou um nome de objeto de grupo)

  • object-type: especifica o tipo do objeto especificado no atributo object-name (se a categoria do objeto for especificada, o tipo de objeto será category).

  • metabase: Especifica se é a metabase de origem ou de destino.

  • destination: Especifica o caminho ou a pasta onde o script deve ser salvo, se o nome do arquivo não for fornecido, então um nome de arquivo no formato (object_name valor do atributo).out

  • overwrite: se true então ele substitui se o mesmo nome de arquivo existir. Pode ter os valores (verdadeiro/falso).

Exemplo de sintaxe

<save-as-script
   metabase="<source/target>"
   object-name="<object-name>"
   object-type="<object-category>"
   destination="<file/folder>"
   overwrite="<true/false>"   (optional)
/>

Ou:

<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 comando

  • context especifica o nome do esquema.

  • destination especifica se a saída deve ser armazenada em um arquivo.

    Se esse atributo não for especificado, a instrução T-SQL convertida será exibida no console. (atributo opcional)

  • conversion-report-folder especifica a pasta onde o relatório de avaliação pode ser armazenado. (atributo opcional)

  • conversion-report-overwrite especifica se a pasta do relatório de avaliação deve ser substituída, caso ela já exista.

    Valor padrão: false. (atributo opcional)

  • write-converted-sql-to especifica o caminho do arquivo (ou) pasta onde o T-SQL convertido deve ser armazenado. Quando um caminho de pasta é especificado junto com o atributo sql-files, cada arquivo de origem tem um arquivo T-SQL de destino correspondente criado na pasta especificada. Quando um caminho de pasta é especificado junto com o atributo sql, o T-SQL convertido é gravado em um arquivo chamado Result.out na pasta especificada.

  • sql especifica as instruções SQL do DB2 a serem convertidas, uma ou mais instruções podem ser separadas usando um ";"

  • sql-files especifica o caminho dos arquivos SQL que devem ser convertidos em código T-SQL.

  • write-summary-report-to especifica o caminho onde o relatório é gerado. Se apenas o caminho da pasta for mencionado, o arquivo por nome ConvertSQLReport.xml será criado. (atributo opcional)

    A criação de relatórios tem mais duas subcategorias:

    • report-errors: true ou false, com padrão como false (atributos opcionais)
    • verbose: true ou false, com padrão como false (atributos opcionais)

Script

Requer um ou vários nós da metabase como parâmetro de linha de comando.

Exemplo de sintaxe

<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>

Ou:

<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" />

Ou:

<convert-sql-statement
   context="<schema-name>"
   conversion-report-folder="<folder-name>"
   conversion-report-overwrite="<true/false>"
   sql-files="<folder-name>\*.sql" />

Execute o console SSMA em paralelo

O utilitário de console SSMA pode ser executado em paralelo por meio de scripts, especificando o nome do banco de dados e o caminho da pasta correspondente como parâmetros de entrada. No exemplo a seguir, os bancos de dados SAMPLE1, SAMPLE2e SAMPLE3, com seus respetivos caminhos de pasta, são fornecidos como entrada para o script.

SAMPLE1,C:\folder path\SSMA Project1
SAMPLE2,C:\folder path\SSMA Project2
SAMPLE3,C:\folder path\SSMA Project3

O script PowerShell de exemplo a seguir permite a execução paralela do console 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"
}