Suporte para o Microsoft Distributed Transaction Coordinator no RDS for SQL Server - Amazon Relational Database Service

Suporte para o Microsoft Distributed Transaction Coordinator no RDS for SQL Server

Uma transação distribuída é uma transação de banco de dados na qual dois ou mais hosts de rede estão envolvidos. O Amazon RDS for SQL Server oferece suporte a transações distribuídas entre hosts. Um host único pode ser o seguinte:

  • Instância de banco de dados do RDS for SQL Server

  • Host do SQL Server no local

  • O host do Amazon EC2 com o SQL Server instalado

  • Qualquer outro host do EC2 ou instância de banco de dados do RDS com um mecanismo de banco de dados que ofereça suporte a transações distribuídas

No RDS, a começar pelo SQL Server 2012 (versão 11.00.5058.0.v1 e posterior), todas as edições do RDS for SQL Server oferecem suporte a transações distribuídas. O suporte é fornecido usando o MSDTC (Microsoft Distributed Transaction Coordinator). Para obter informações detalhadas sobre o MSDTC, consulte Distributed Transaction Coordinator na documentação da Microsoft.

Limitations

As seguintes limitações se aplicam ao uso do MSDTC no RDS for SQL Server:

  • Não há suporte para o MSDTC em instâncias que usam o SQL Server Database Mirroring. Para obter mais informações, consulte Transações – grupos de disponibilidade e espelhamento de banco de dados.

  • O parâmetro in-doubt xact resolution deve ser definido como 1 ou 2. Para obter mais informações, consulte Modificar o parâmetro para o MSDTC.

  • O MSDTC requer que todos os nomes de host participantes em transações distribuídas sejam resolvidos usando os nomes de computador. O RDS mantém automaticamente essa funcionalidade para instâncias associadas ao domínio. No entanto, para instâncias autônomas, configure o servidor DNS manualmente.

  • As transações XA do Java Database Connectivity (JDBC) são compatíveis com a versão 14.00.3223.3 e superior do SQL Server 2017 e o SQL Server 2019.

  • Não há suporte para transações distribuídas que dependem de bibliotecas de links dinâmicos (DLLs) do cliente em instâncias do RDS.

  • Não há suporte para o uso de bibliotecas de links dinâmicos XA personalizadas.

Habilitar o MSDTC

Use o seguinte processo para habilitar o MSDTC para a instância de banco de dados:

  1. Crie um grupo de opções ou selecione um existente.

  2. Adicione a opção MSDTC ao grupo de opções.

  3. Crie um novo grupo de parâmetros ou escolha um existente.

  4. Modifique o grupo de parâmetros para definir o parâmetro in-doubt xact resolution como 1 ou 2.

  5. Associe o grupo de opções e o grupo de parâmetros à instância de banco de dados.

Criar o grupo de opções para o MSDTC

Use o AWS Management Console ou a AWS CLI para criar um grupo de opções que corresponda à versão e ao mecanismo do SQL Server da instância de banco de dados.

nota

Também é possível usar um grupo de opções existente se ele for para a versão e o mecanismo e corretos do SQL Server.

O procedimento a seguir cria um grupo de opções para o SQL Server Standard Edition 2016.

Como criar o grupo de opções

  1. Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  2. No painel de navegação, escolha Option groups (Grupos de opções).

  3. Escolha Create group (Criar grupo).

  4. No painel Create option group (Criar grupo de opções), faça o seguinte:

    1. Em Name (Nome), insira um nome para o grupo de opções que seja exclusivo na sua conta da AWS, como msdtc-se-2016. O nome pode conter somente letras, números e hifens.

    2. Em Descrição, insira uma breve descrição do grupo de opções, como MSDTC option group for SQL Server SE 2016. A descrição é usada para fins de exibição.

    3. Em Engine (Mecanismo), selecione sqlserver-se.

    4. Em Versão do mecanismo principal, selecione 13.00.

  5. Escolha Criar.

O exemplo a seguir cria um grupo de opções para o SQL Server Standard Edition 2016.

Como criar o grupo de opções

  • Use um dos seguintes comandos.

    Para Linux, macOS ou Unix:

    aws rds create-option-group \ --option-group-name msdtc-se-2016 \ --engine-name sqlserver-se \ --major-engine-version 13.00 \ --option-group-description "MSDTC option group for SQL Server SE 2016"

    Para Windows:

    aws rds create-option-group ^ --option-group-name msdtc-se-2016 ^ --engine-name sqlserver-se ^ --major-engine-version 13.00 ^ --option-group-description "MSDTC option group for SQL Server SE 2016"

Adicionar a opção do MSDTC ao grupo de opções

Depois, use o AWS Management Console ou a AWS CLI para adicionar a opção MSDTC ao grupo de opções.

São necessárias as seguintes configurações de opção:

  • Porta – a porta que você usa para acessar o MSDTC. Os valores permitidos são 1150–49151, exceto 1234, 1434, 3260, 3343, 3389 e 47001. O valor padrão é 5000.

    Verifique se a porta que pretende usar está habilitada nas regras de firewall. Além disso, conforme necessário, verifique se essa porta está habilitada nas regras de entrada e saída para o grupo de segurança associado à instância de banco de dados. Para obter mais informações, consulte Não é possível conectar-se à instância de banco de dados do Amazon RDS.

  • Grupos de segurança – as associações de grupo de segurança da VPC ou de banco de dados para a instância de banco de dados do RDS.

  • Tipo de autenticação – o modo de autenticação entre hosts. Os seguintes tipos de autenticação são compatíveis:

    • Mútuo – as instâncias do RDS são autenticadas mutuamente entre si usando autenticação integrada. Se esta opção estiver selecionada, todas as instâncias associadas a este grupo de opções deverão estar associadas ao domínio.

    • Nenhum – nenhuma autenticação é realizada entre hosts. Não recomendamos usar esse modo em ambientes de produção.

  • Tamanho do log de transações – o tamanho do log de transações do MSDTC. Os valores permitidos são de 4 a 1024 MB. O tamanho padrão é 4 MB.

As seguintes configurações de opção são opcionais:

  • Habilitar conexões de entrada – se deseja permitir conexões de entrada do MSDTC para instâncias associadas a este grupo de opções.

  • Habilitar conexões de saída – se deseja permitir conexões de saída do MSDTC em instâncias associadas a este grupo de opções.

  • Habilitar XA – se deseja permitir transações XA. Para obter mais informações sobre o protocolo XA, consulte XA Specification.

  • Habilitar SNA LU – se deseja permitir que o protocolo SNA LU seja usado para transações distribuídas. Para obter mais informações sobre o suporte ao protocolo SNA LU, consulte Managing IBM CICS LU 6.2 Transactions na documentação da Microsoft.

Como adicionar a opção do MSDTC

  1. Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  2. No painel de navegação, escolha Option groups (Grupos de opções).

  3. Selecione o grupo de opções que você acabou de criar.

  4. Escolha Add option (Adicionar opção).

  5. Em Detalhes da opção, selecione MSDTC em Nome da opção.

  6. Em Configurações de opção:

    1. Em Porta, insira o número da porta para acessar o MSDTC. O padrão é 5000.

    2. Em Grupos de segurança, selecione o grupo de segurança da VPC ou de banco de dados a ser associado à opção.

    3. Em Tipo de autenticação, escolha Mútuo ou Nenhum.

    4. Em Tamanho do log de transações, insira um valor de 4 a 1024. O padrão é 4.

  7. Em Configuração adicional, faça o seguinte:

    1. Em Conexões, conforme necessário, escolha Habilitar conexões de entrada e Habilitar conexões de saída.

    2. Em Protocolos permitidos, conforme necessário, escolha Habilitar XA e Habilitar SNA LU.

  8. Em Scheduling (Programação), escolha se deseja adicionar a opção imediatamente ou na próxima janela de manutenção.

  9. Escolha Add option (Adicionar opção).

    Nenhuma reinicialização é necessária para adicionar essa opção.

Como adicionar a opção do MSDTC

  1. Crie um arquivo JSON, por exemplo msdtc-option.json, com os seguintes parâmetros necessários:

    { "OptionGroupName":"msdtc-se-2016", "OptionsToInclude": [ { "OptionName":"MSDTC", "Port":5000, "VpcSecurityGroupMemberships":["sg-0abcdef123"], "OptionSettings":[{"Name":"AUTHENTICATION","Value":"MUTUAL"},{"Name":"TRANSACTION_LOG_SIZE","Value":"4"}] }], "ApplyImmediately": true }
  2. Adicione a opção MSDTC ao grupo de opções.

    Para Linux, macOS ou Unix:

    aws rds add-option-to-option-group \ --cli-input-json file://msdtc-option.json \ --apply-immediately

    Para Windows:

    aws rds add-option-to-option-group ^ --cli-input-json file://msdtc-option.json ^ --apply-immediately

    Nenhuma reinicialização é necessária.

Criar o grupo de parâmetros para o MSDTC

Crie ou modifique um grupo de parâmetros para o parâmetro in-doubt xact resolution que corresponde à edição e à versão do SQL Server da instância de banco de dados.

O exemplo a seguir cria um grupo de parâmetros para o SQL Server Standard Edition 2016.

Como criar o grupo de parâmetros

  1. Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  2. No painel de navegação, selecione Parameter groups.

  3. Escolha Create parameter group (Criar parameter group).

  4. No painelCreate parameter group (Criar parameter group), faça o seguinte:

    1. Em Família de grupos de parâmetros, escolha sqlserver-se-13.0.

    2. Em Nome do grupo, insira um identificador para o grupo de parâmetros, como msdtc-sqlserver-se-13.

    3. Em Descrição, insira in-doubt xact resolution.

  5. Escolha Criar.

O exemplo a seguir cria um grupo de parâmetros para o SQL Server Standard Edition 2016.

Como criar o grupo de parâmetros

  • Use um dos seguintes comandos.

    Para Linux, macOS ou Unix:

    aws rds create-db-parameter-group \ --db-parameter-group-name msdtc-sqlserver-se-13 \ --db-parameter-group-family "sqlserver-se-13.0" \ --description "in-doubt xact resolution"

    Para Windows:

    aws rds create-db-parameter-group ^ --db-parameter-group-name msdtc-sqlserver-se-13 ^ --db-parameter-group-family "sqlserver-se-13.0" ^ --description "in-doubt xact resolution"

Modificar o parâmetro para o MSDTC

Modifique o parâmetro in-doubt xact resolution no grupo de parâmetros que corresponde à edição e à versão do SQL Server da instância de banco de dados.

Para o MSDTC, defina o parâmetro in-doubt xact resolution como um dos seguintes procedimentos:

  • 1: Presume commit. Presume-se que as transações em dúvida do MSDTC foram confirmadas.

  • 2: Presume abort. Presume-se que as transações em dúvida do MSDTC foram interrompidas.

Para obter mais informações, consulte in-doubt xact resolution server configuration option na documentação da Microsoft.

O exemplo a seguir modifica o grupo de parâmetros que você criou para o SQL Server Standard Edition 2016.

Como modificar o grupo de parâmetros

  1. Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  2. No painel de navegação, selecione Parameter groups.

  3. Escolha o grupo de parâmetros, como msdtc-sqlserver-se-13.

  4. Em Parâmetros, filtre a lista de parâmetros para xact.

  5. Escolha resolução xact em dúvida.

  6. Escolha Edit parameters.

  7. Insira 1 ou 2.

  8. Selecione Save changes.

O exemplo a seguir modifica o grupo de parâmetros que você criou para o SQL Server Standard Edition 2016.

Como modificar o grupo de parâmetros

  • Use um dos seguintes comandos.

    Para Linux, macOS ou Unix:

    aws rds modify-db-parameter-group \ --db-parameter-group-name msdtc-sqlserver-se-13 \ --parameters "ParameterName='in-doubt xact resolution',ParameterValue=1,ApplyMethod=immediate"

    Para Windows:

    aws rds modify-db-parameter-group ^ --db-parameter-group-name msdtc-sqlserver-se-13 ^ --parameters "ParameterName='in-doubt xact resolution',ParameterValue=1,ApplyMethod=immediate"

Associar o grupo de opções e o grupo de parâmetros à instância de banco de dados.

É possível usar o AWS Management Console ou a AWS CLI para associar o grupo de opções e o grupo de parâmetros do MSDTC à instância de banco de dados.

É possível associar o grupo de opções e o grupo de parâmetros do MSDTC a uma instância de banco de dados nova ou existente.

É possível associar o grupo de opções e o grupo de parâmetros do MSDTC a uma instância de banco de dados nova ou existente.

nota

Se você usar uma instância de banco de dados existente associada ao domínio, ela já deverá ter um domínio do Active Directory e uma função do IAM associados a ela. Se você criar uma nova instância associada ao domínio, especifique um domínio do Active Directory e uma função do IAM existentes. Para obter mais informações, consulte Uso da autenticação do Windows com uma instância de banco de dados do Amazon RDS for SQL Server.

Como criar uma instância de banco de dados com o grupo de opções e o grupo de parâmetros do MSDTC

  • Especifique o mesmo tipo de mecanismo de banco de dados e a versão principal que você usou ao criar o grupo de opções.

    Para Linux, macOS ou Unix:

    aws rds create-db-instance \ --db-instance-identifier mydbinstance \ --db-instance-class db.m5.2xlarge \ --engine sqlserver-se \ --engine-version 13.00.5426.0.v1 \ --allocated-storage 100 \ --master-user-password secret123 \ --master-username admin \ --storage-type gp2 \ --license-model li \ --domain-iam-role-name my-directory-iam-role \ --domain my-domain-id \ --option-group-name msdtc-se-2016 \ --db-parameter-group-name msdtc-sqlserver-se-13

    Para Windows:

    aws rds create-db-instance ^ --db-instance-identifier mydbinstance ^ --db-instance-class db.m5.2xlarge ^ --engine sqlserver-se ^ --engine-version 13.00.5426.0.v1 ^ --allocated-storage 100 ^ --master-user-password secret123 ^ --master-username admin ^ --storage-type gp2 ^ --license-model li ^ --domain-iam-role-name my-directory-iam-role ^ --domain my-domain-id ^ --option-group-name msdtc-se-2016 ^ --db-parameter-group-name msdtc-sqlserver-se-13

Como modificar uma instância de banco de dados e associar o grupo de opções e o grupo de parâmetros do MSDTC

  • Use um dos seguintes comandos.

    Para Linux, macOS ou Unix:

    aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --option-group-name msdtc-se-2016 \ --db-parameter-group-name msdtc-sqlserver-se-13 \ --apply-immediately

    Para Windows:

    aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --option-group-name msdtc-se-2016 ^ --db-parameter-group-name msdtc-sqlserver-se-13 ^ --apply-immediately

Usar transações distribuídas

No Amazon RDS for SQL Server, você executa transações distribuídas da mesma maneira que transações distribuídas em execução no local:

  • Usando transações promovíveis System.Transactions do .NET framework, que otimiza transações distribuídas ao adiar as criações até que sejam necessárias.

    Neste caso, a promoção é automática e não requer que você faça qualquer intervenção. Se houver apenas um gerenciador de recursos dentro da transação, nenhuma promoção será executada. Para obter mais informações sobre escopos de transação implícita, consulte Implementing an implicit transaction using transaction scope na documentação da Microsoft.

    As transações promovíveis são compatíveis com estas implementações .NET:

    • Começando com o ADO.NET 2.0, System.Data.SqlClient oferece suporte a transações promovíveis com o SQL Server. Para obter mais informações, consulte System.Transactions integration with SQL Server na documentação da Microsoft.

    • O ODP.NET oferece suporte a System.Transactions. Uma transação local é criada para a primeira conexão aberta no escopo TransactionsScope para o Oracle Database 11g release 1 (versão 11.1) e posterior. Quando uma segunda conexão é aberta, essa transação é automaticamente promovida para uma transação distribuída. Para obter mais informações sobre suporte de transações distribuídas no ODP.NET, consulte Microsoft Distributed Transaction Coordinator integration na documentação da Microsoft.

  • Usando a instrução BEGIN DISTRIBUTED TRANSACTION. Para obter mais informações, consulte BEGIN DISTRIBUTED TRANSACTION (Transact-SQL) na documentação da Microsoft.

Como usar transações XA

A partir da versão 14.00.3223.3 do RDS para SQL Server 2017, você pode controlar transações distribuídas usando o JDBC. Quando você define a opção Enable XA para true na opção MSDTC, o RDS habilita automaticamente as transações do JDBC e concede a função SqlJDBCXAUser ao usuário guest. Isso permite a execução de transações distribuídas por meio do JDBC. Para obter mais informações, incluindo um exemplo de código, consulte Noções básicas sobre transações XA na documentação da Microsoft.

Usar rastreamento de transações

O RDS oferece suporte ao controle de rastreamentos de transação do MSDTC e ao download deles na instância de banco de dados do RDS para solução de problemas. É possível controlar sessões de rastreamento de transação executando o procedimento armazenado do RDS a seguir.

exec msdb.dbo.rds_msdtc_transaction_tracing 'trace_action', [@traceall='0|1'], [@traceaborted='0|1'], [@tracelong='0|1'];

O parâmetro a seguir é obrigatório.

  • trace_action – A ação de rastreamento. Ela pode ser: START, STOP ou STATUS.

Os seguintes parâmetros são opcionais:

  • @traceall – Defina como 1 para rastrear todas as transações distribuídas. O padrão é 0.

  • @traceaborted – Defina como 1 para rastrear transações distribuídas canceladas. O padrão é 0.

  • @tracelong – Defina como 1 para rastrear transações distribuídas de execução longa. O padrão é 0.

exemplo de ação de rastreamento START

Para iniciar uma nova sessão de rastreamento de transação, execute o exemplo de instrução a seguir.

exec msdb.dbo.rds_msdtc_transaction_tracing 'START', @traceall='0', @traceaborted='1', @tracelong='1';
nota

Apenas uma sessão de rastreamento de transação pode estar ativa ao mesmo tempo. Se um novo comando de sessão de rastreamento START for emitido enquanto uma sessão de rastreamento estiver ativa, um erro será retornado e a sessão de rastreamento ativa permanecerá inalterada.

exemplo de ação de rastreamento STOP

Para interromper uma sessão de rastreamento de transação, execute a instrução a seguir.

exec msdb.dbo.rds_msdtc_transaction_tracing 'STOP'

Esta instrução interrompe a sessão de rastreamento de transação ativa e salva os dados de rastreamento de transação no diretório de log na instância de banco de dados do RDS. A primeira linha da saída contém o resultado geral e as linhas a seguir indicam os detalhes da operação.

Veja a seguir um exemplo de uma interrupção de sessão de rastreamento bem-sucedida.

OK: Trace session has been successfully stopped. Setting log file to: D:\rdsdbdata\MSDTC\Trace\dtctrace.log Examining D:\rdsdbdata\MSDTC\Trace\msdtctr.mof for message formats, 8 found. Searching for TMF files on path: (null) Logfile D:\rdsdbdata\MSDTC\Trace\dtctrace.log: OS version 10.0.14393 (Currently running on 6.2.9200) Start Time <timestamp> End Time <timestamp> Timezone is @tzres.dll,-932 (Bias is 0mins) BufferSize 16384 B Maximum File Size 10 MB Buffers Written Not set (Logger may not have been stopped). Logger Mode Settings (11000002) ( circular paged ProcessorCount 1 Processing completed Buffers: 1, Events: 3, EventsLost: 0 :: Format Errors: 0, Unknowns: 3 Event traces dumped to d:\rdsdbdata\Log\msdtc_<timestamp>.log

É possível usar as informações detalhadas para consultar o nome do arquivo de log gerado. Para obter mais informações sobre como fazer download de arquivos de log na instância de banco de dados do RDS, consulte Trabalhar com arquivos Amazon RDS de log de banco de dados.

Os logs de sessão de rastreamento permanecem na instância por 35 dias. Todos os logs de sessão de rastreamento mais antigos são excluídos automaticamente.

exemplo de ação de rastreamento STATUS

Para rastrear o status de uma sessão de rastreamento de transação, execute a instrução a seguir.

exec msdb.dbo.rds_msdtc_transaction_tracing 'STATUS'

Esta instrução gera o seguinte como linhas separadas do conjunto de resultados.

OK SessionStatus: <Started|Stopped> TraceAll: <True|False> TraceAborted: <True|False> TraceLongLived: <True|False>

A primeira linha indica o resultado geral da operação: OK ou ERROR com detalhes, se aplicável. As linhas subsequentes indicam detalhes sobre o status da sessão de rastreamento:

  • SessionStatus pode ser um dos seguintes:

    • Started se uma sessão de rastreamento estiver sendo executada.

    • Stopped se nenhuma sessão de rastreamento estiver sendo executada.

  • Os sinalizadores de sessão de rastreamento podem ser True ou False dependendo de como foram definidos no comando START.

Modificar a opção do MSDTC

Depois de habilitar a opção MSDTC, é possível modificar as configurações. Para obter informações sobre como modificar as configurações da opção, consulte Modificar uma configuração de opção.

nota

Algumas alterações às configurações de opção do MSDTC exigem que o serviço MSDTC seja reiniciado. Esse requisito pode afetar a execução de transações distribuídas.

Desabilitar o MSDTC

Para desabilitar o MSDTC, remova a opção MSDTC do grupo de opções.

Como remover a opção do MSDTC do grupo de opções

  1. Faça login no AWS Management Console e abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  2. No painel de navegação, escolha Option groups (Grupos de opções).

  3. Selecione o grupo de opções com a opção MSDTC (msdtc-se-2016 nos exemplos anteriores).

  4. Selecione Delete option (Excluir opção).

  5. Em Opções de exclusão, selecione MSDTC em Opções a serem excluídas.

  6. Em Apply immediately (Aplicar imediatamente), selecione Yes (Sim) para excluir a opção imediatamente ou No (Não) para excluí-la na próxima janela de manutenção.

  7. Escolha Delete (Excluir).

Como remover a opção do MSDTC do grupo de opções

  • Use um dos seguintes comandos.

    Para Linux, macOS ou Unix:

    aws rds remove-option-from-option-group \ --option-group-name msdtc-se-2016 \ --options MSDTC \ --apply-immediately

    Para Windows:

    aws rds remove-option-from-option-group ^ --option-group-name msdtc-se-2016 ^ --options MSDTC ^ --apply-immediately

Solução de problemas do MSDTC para o RDS for SQL Server

Em alguns casos, talvez você tenha problemas para estabelecer uma conexão entre o MSDTC em execução em um computador cliente e o serviço do MSDTC em execução em uma instância de banco de dados do RDS for SQL Server. Em caso afirmativo, verifique o seguinte:

Como configurar o computador cliente

  1. Abra os Serviços de componentes.

    Ou, no Gerenciador de servidores, escolha Ferramentas e Serviços de componentes.

  2. Expanda Serviços de componentes, Computadores, Meu computador e Distributed Transaction Coordinator.

  3. Abra o menu de contexto (clique com o botão direito do mouse) do DTC local e escolha Propriedades.

  4. Escolha a guia Segurança.

  5. Escolha todas as opções a seguir:

    • Acesso ao DTC de rede

    • Permitir entrada

    • Permitir Saída

  6. Certifique-se de que o modo de autenticação correto seja escolhido:

    • Autenticação mútua necessária – a máquina cliente é associada ao mesmo domínio que outros nós que participam da transação distribuída ou existe uma relação de confiança configurada entre domínios.

    • Nenhuma autenticação necessária – todos os outros casos.

  7. Escolha OK para salvar as alterações.

  8. Se solicitado a reiniciar o serviço, escolha Sim.

Como habilitar regras de firewall do MSDTC

  1. Abra o Firewall do Windows e escolha Configurações avançadas.

    Ou, no Gerenciador de servidores, escolha Ferramentas e selecione Firewall do Windows com segurança avançada.

    nota

    Dependendo do sistema operacional, o Firewall do Windows pode ser chamado de Firewall do Windows Defender.

  2. Escolha Regras de entrada no painel esquerdo.

  3. Habilite as seguintes regras de firewall, se elas ainda não estiverem habilitadas:

    • Distributed Transaction Coordinator (RPC)

    • Distributed Transaction Coordinator (RPC)-EPMAP

    • Distributed Transaction Coordinator (TCP-In)

  4. Feche o Firewall do Windows.