Configurando o DTC no SQL Server

Olá Pessoal!

Nessa última semana participei de uma migração de infraestrutura de um sistema de gerenciamento de serviço, basicamente o host de banco de dados (SQL Server 2016) seria alterado para um novo em outra localidade.

O que parecia ser um procedimento padrão, demandou um trabalho adicionado devido ao MSDTC (Microsoft Distributed Transaction Coordinator) que estava configurado no antigo ambiente e era necessário para o funcionamento de um dos módulos da aplicação. Como o antigo ambiente foi absorvido sem documentação, a necessidade de configuração do DTC só foi percebida depois que a aplicação retornou o seguinte erro ao tentar iniciar:

A mensagem informa que a base especificada não suporta transações XA. Ao pesquisar por essa mensagem foi possível fazer a relação com o DTC, afinal existe uma opção para habilitar as transacoes XA dentro das propriedades do DTC.

Reproduzi as mesmas configurações do DTC que existiam no antigo ambiente para novo, mas mesmo assim a aplicação ainda apresentava erro e nenhuma estatística de transação era gerada. As configurações do DTC podem ser vistas acessando o menu de Component Services dentro do Windows Server:

Navegando nos demais sites relacionados a consulta inicial, foi possível ver alguns procedimentos adicionais que deveriam ser executados no SQL Server, além da configuração já feita no DTC no SO. No site da IBM abaixo, por exemplo, é apresentado um passo a passo do que deve ser feito bem simples, pois o suporte das transações XA é feito pelo driver JDBC para SQL Server, permitindo dessa forma o inicio das operações com transações distribuídas necessário para o funcionamento da aplicação.

https://www.ibm.com/support/knowledgecenter/en/SSFTN5_8.5.5/com.ibm.wbpm.imuc.ebpm.doc/topics/db_xa_nd_aix.html

Em determinado ponto do passo a passo apresentado no site da IBM, é feito referencia aos arquivos sqljdbc_xa.dll e xa_install.sql. Esses arquivos podem ser obtidos através do driver JDBC para SQL Server, segue o link abaixo para download:

https://www.microsoft.com/en-us/download/details.aspx?id=55539

Dentro dos arquivos extraídos terá um diretório com o nome “XA”, com uma breve navegação sera possível encontrar os arquivos sqljdbc_xa.dll e xa_install.sql. Os passos a seguir devem feitos conforme informado no site da IBM, são eles:

  • Copy the sqljdbc_xa.dll file from the JDBC unarchived directory to the Binn directory (for a default SQL Server install, the location is C:/Program Files/Microsoft SQL Server/MSSQL10_50.MSSQLSERVER/MSSQL/Binn) of SQL Server computer. If you are using XA transactions with a 32-bit SQL Server, use the sqljdbc_xa.dll file in the x86 folder, even if the SQL Server is installed on a x64 processor. If you are using XA transactions with a 64-bit SQL Server on the x64 processor, use the sqljdbc_xa.dll file in the x64 folder.
  • Run the xa_install.sql database script on SQL Server. For example; from the command prompt, run sqlcmd -i xa_install.sql. This script installs the extended stored procedures that are called by sqljdbc_xa.dll. These extended stored procedures implement distributed transaction and XA support for the Microsoft SQL Server JDBC Driver. You will need to run this script as an administrator of the SQL Server instance. You can ignore errors about unable to drop procedures that don’t exist.
  • Open the SQL Server Management Studio to locate the security folder under the master database. To grant permissions to a specific user to participate in distributed transactions with the JDBC driver, add the user to the SqlJDBCXAUser role in the master database (for example, for a Lombardi user add master database in User mappings and check SqlJDBCXAUser role).

Após concluir os passos acima a aplicação subiu sem problemas e imediatamente as estatísticas de transações começaram a ser carregadas:

Até a próxima!

Anúncios

INSTALAÇÃO DO ORACLE DRIVER NO WINDOWS SERVER

Olá Pessoal!

Semana passada passei um sufoco com a instalação do driver do Oracle para Windows Server. Estava finalizando a entrega de um ambiente SQL Server, mas ainda precisava configurar um novo Linked Server nesse host.

Estava acostumado a instalar Drivers do PostgreSQL e normalmente não ocorrem problemas, mas no caso do Oracle exigiu alguns passos a mais que no meu caso foram necessários para obter sucesso.

Como mais algum de vocês pode acabar passando pela mesma situação, optei por compartilhar esse caso.

Bom, inicialmente procurei no site oficial da Oracle os drivers ODBC disponíveis para o SO Windows. O link abaixo leva diretamente para página que lista os Oracle Data Access Components para Windows 64-bit:

http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html

Basta selecionar a versão que deseja fazer download, no meu caso eu escolhi o abaixo que já conta com todos os componentes:

driver-oracle-print

Uma vez que o download tenha sido feito, basta executar o setup e seguir o wizard de instalação que é bem autoexplicativo, se atentando para o diretório no qual irão ficar os arquivos de instalação. No meu caso optei por manter os arquivos no disco `C:\`.

Após a instalação sabia que precisaria configurar o tnsnames.ora, afinal eu tinha que mapear as conexões e seus endereços para poder criar corretamente o Linked Server. Até ai tudo bem, só precisei copiar e colar as conexões de um arquivo já existente. O arquivo por padrão fica no seguinte diretório `\product\11.2.0\client_1\Network\Admin`.

Com todos esses passos completados eu acreditei que não seria necessário mais nenhum ajuste, mas ao tentar criar um novo ODBC para testar a fonte de dados do Oracle, o TNS Service Name não é listado:

odbc-oracle-driver-print

Procurei em diversos blogs e achei algumas dicas que não cheguei a testar, como por exemplo, fazer modificações nos registros do Windows. A que considerei a mais fácil foi a que resolveu o problema, a configuração das variáveis de ambiente.

variaveis-de-ambiente-print

A seguinte variável de sistema teve que ser inserida manualmente:

Variable name: TNS_ADMIN
Variable value: C:\app\product\11.2.0\client_1\Network\Admin

Uma vez que essa inclusão tenha sido feita, o TNS Service Name será listado corretamente.

odbc-oracle-driver-print-2

Agora finalmente o Linked Server com o Oracle pode ser configurado sem problemas, espero que essa dica possa ajudar.

Até a próxima!

SQL Server