Acessando banco de dados MSSQL 2000 utilizando ODBC e FREETDS por plataformas Não-Microsoft

Vamos começar, pois se entrou aqui é para achar soluções!!!

PROBLEMA:

PRECISEI acessar o banco legado da Microsoft SQL 2000 por aplicativos e bancos de dados Não-Microsoft.

PARA SOLUCIONAR:

Quando consegui e funcionou em produção… POSTEI!!

Para isso precisaremos de dois principais pacotes(abaixo seguem a explicações da necessidade de cada um) que devem ser instalados nessa ordem:

1.unixODBC;

2.FREETDS;


Explicando e instalando…..

1.unixODBC

Ao falarmos de interoperabilidade entre plataforma Microsoft e plataformas             Não-Microsoft, principalmente tratando-se de Banco de Dados, o ODBC(Open DataBase Connectivity) é fundamental para possibilitar essa integração. De acordo com o Knowledge Base 110093 da Microsoft (https://support.microsoft.com/pt-br/kb/110093), o ODBC é uma interface estratégica para acessar dados em ambientes heterogêneos(entende-se Não Microsoft) de SGBD relacionais ou não.

Resumindo o ODBC irá proporcionar uma interface para acessarmos um banco de    dados Microsoft SQL 2000.

Para nossa plataforma iremos utilizar o unixODBC que é  um padrão definitivo para ODBC em plataformas Não-Microsoft. ref: http://www.unixodbc.org/

Mãos a obra!!! Seguem os Passos:

a) Baixar o pacote unixodbc mais atual do repositório oficial (http://www.unixodbc.org/):

comando wget_unix_odbc

# wget -qO- http://www.unixodbc.org/unixODBC-2.3.4.tar.gz| tar xvz

b) Entrar no diretório extraído:

comando cd unixodbc

# cd unixODBC-2.3.4

c) compilar o pacote unixODBC:

compilando_unixodbc

# ./configure –prefix=/usr/

#make

#make install

Assim, concluímos a explicação e a instalação do primeiro pacote.


2.FREETDS

Para que possamos interagir com a conexão ODBC , provida pelo pacote unixodbc, é necessário conhecermos o FREETDS.

Conforme sua página oficial (http://www.freetds.org/ ) o FREETDS é um conjunto de bibliotecas que possibilitam programas “conversar” nativamente com banco de dados da Microsoft e Sybase. Para isso, ele usa uma versão free do protocolo TDS(Tabular Data Stream) que é utilizado por bancos de dados desses fabricantes.
O FREETDS utiliza um total de três bibliotecas que formam seu conjunto de bibliotecas: DB-Library, CT-Library, and ODBC.

Trocando em miúdos, o FREETDS é quem vai fornecer a API necessária  para que possamos interagir com a conexão fornecida pelo unixODBC e através dessa nos comunicarmos com o banco MSSQL2000.

Após as devidas explicações, mãos a obra!!! Seguem os Passos:

a) Baixar o pacote freetds mais atual do repositório oficial (ftp://ftp.freetds.org):

comando wget

# wget -qO- ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.00.9.tar.gz | tar xvz

b) Entrar no diretório extraido

comando cd

# cd freetds-1.00.9

c) compilar o pacote FREETDS utilizando a versão de acordo com a matriz de compatibilidade

Essa parte da instalação requer uma atenção especial, pois dependendo do Banco de dados, seja Sybase ou Microsoft, será utilizada uma versão do protocolo TDS diferente.

Para isso, segue um screenshot da matriz de compatibilidade com o banco MSSQL2000 destacado.

matrix_compatibilidade_TDSREF:http://www.freetds.org/userguide/choosingtdsprotocol.htm

De acordo com a matriz,a versão que devemos  usar do protocolo TDS para o MSSQL2000, será a 7.1

Para compilarmos, devemos especificar a versão do protocolo TDS a ser utilizado através do argumento “–with-tdsver=numeroversao” e especificar com o argumento      “–with-unixodbc=caminho”     o driver a ser utilizado(no nosso caso unixodbc) seguido de seu caminho base que ele foi instalado.

compilando_freetds

#./configure –prefix=/usr –with-tdsver=7.1 –with-unixodbc=/usr/

Caso a compilação seja concluída com sucesso, devemos executar:

make_freetds

#make

#make install

Observação

Conforme nota na página oficial do FREETDS  nos primórdios, a Microsoft não lançava especificações oficiais para o protocolo TDS. Quando o MSSQL 2000 foi lançado, a comunidade oficial da Microsoft lançou uma versão semi-oficial do protocolo TDS sendo essa igual a 8.0, assim sendo os desenvolvedores do FREETDS da época adotaram essa versão. Quando a MS passou a oficializar as versões do TDS ficou claro que a versão do TDS 8.0 era na verdade a 7.1.

A versão 8.0 ainda é mantida por conta de compatibilidades.

“…..In the earlier days of FreeTDS, Microsoft did not release official specs for the TDS protocol. When MSSQL 2000 (product 8.0) was released, there was semi-official indications from the Microsoft community that the TDS protocol would be version 8.0. So the FreeTDS developers adopted that version for FreeTDS. Years later, when Microsoft started releasing official specs of the protocol, it became obvious that the TDS versions that FreeTDS had labeled 8.0 and 9.0 were actually versions 7.1 and 7.2 respectively….”(ref: http://www.freetds.org/userguide/choosingtdsprotocol.htm)

Concluindo a instalação dos dois pacotes, realize o comando:

comando ldconfig

# ldconfig

Dessa forma concluímos a explicação e a instalação do segundo pacote


TESTES

Terminada a instalação e a atualização dos links dinamicos(ldconfig) vamos aos testes de conexão:

Para realização de testes usaremos o comando que vêm com o pacote unixODBC, que é o “odbcinst”. Com ele iremos informar qual driver ODBC iremos usar. Lembrando que Drivers, nesse contexto, são componentes que processam requisições ODBC e retornam para a aplicação(https://msdn.microsoft.com/en-us/library/ms710285(v=vs.85).aspx).

A aplicação que receberá o retorno do processo das requisições será o FreeTDS e por isso ele deve ser cadastrado.

Para isso precisamos criar um arquivo  e chama-lo de tds.driver.odbc e prenche-lo com informações sobre o driver utilizado:

[FreeTDS]
Description = v1.00 with protocol v7.1
Driver = /usr/lib/libtdsodbc.so

arquivo: tds.driver.odbc

O Arquivo acima conterá:

  1. O Nome da Aplicaçao: [NOME]
  2. Uma descrição da versão do pacote freetds mais a versão do protocolo                       TDS utilizado: Description
  3. O caminho da biblioteca do driver: Driver

 

Depois iremos instalar o driver de acordo com o arquivo criado executando o comando:

odbcinst_driver

# odbcinst -i -d -f tds.driver.odbc

Concluindo a instalação do driver odbc, iremos criar o Data Source Name(DSN)

Os Data Sources são as bases de dados ou arquivos que serão acessados pelo driver e serão identificado por um nome(Data source Name). ref:  https://msdn.microsoft.com/en-us/library/ms710285(v=vs.85).aspx

Vamos então criar o arquivo chamando-o de tds.datasource.name e prenche-lo com as informações do banco a ser acessado;

[MSSQL2000Teste]
Driver = FreeTDS
Description = Teste SQL2000 usando TDS
Trace = No
Server = 192.168.23.32
Port = 1433
Database = teste

                 arquivo: tds.datasource.name

Nosso arquivo de datasource conterá:

  1. Nome do datasource(Data Source Name):[NOME]
  2. Nome do Driver(aplicação que receberá retorno das requisições) já instalado:Driver
  3. Irá gerar log (sim ou não):Trace
  4. Endereço Servidor Remoto onde está rodando o SGBD:Server
  5. Porta do serviço do SGBD: Port
  6. Nome do Banco de Dados: Database

Caso queria mais opções ou detalhamento sobre esse arquivo, acesse: http://www.freetds.org/userguide/odbcconnattr.htm

Com o arquivo salvo, precisamos instala-lo utilizando o mesmo comando que foi usado para instalar o driver porém ao invés do parametro -d( driver) utilizaremos o parâmetro -s(source):

odbcinst_dsn

#odbcinst -i -s -f tds.datasource.name

Teste final conectar-se ao Banco. Para isso vamos utilizar o isql que é  uma ferramenta de linha de comando para executar sql interativamente ou não.

Executando o comando isql -v NOME_DO_DSN nome_usuario senha, iremos nos conectar ao banco utlizando o unixodbc.Como exemplo vamos usar as informação do arquivo DSN criado anteriormente.

comando isql

  #isql -v MSSQL2000Teste sa senh@f$rte123

Se ao executarmos esse comando tivermos como resposta:

resposta_isql

Então a conexão foi concluida com êxito e sua plataforma Não-Microsoft está habilitada a interagir com banco MSSQL2000.

Valeu e espero ter ajudado!

Segue Um Diagrama Para Facilitar O Entendimento Sobre A Utilizaçâo Dos Pacotes Necessàrios Para Comunicaçâo Com O Mssql2000 Utilizando Uma Plataforma Não Microsoft.

Diagrama_Conexao_Freetds


Configuração do sistema utilizado:

Sistema: Linux

Distribuição: Oracle Linux 6.4

Banco de Dados: Postgresql 9.5

REFERENCIAS:

http://www.freetds.org/faq.html#What.is.FreeTDS

http://www.freetds.org/userguide/odbcconnattr.htm

http://www.freetds.org/userguide/choosingtdsprotocol.html

http://www.unixodbc.org/

https://msdn.microsoft.com/en-us/library/ms710285(v=vs.85).aspx

 

Ajude a outros..Compartilhe!!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *