Conexão Oracle com MS SQL Server (Heterogeneous Services)

Recentemente, afim de atender uma demanda de um cliente que tinha como necessidade estabelecer uma conexão de uma base Oracle 11.2.0.4 para uma base microsoft SQL Server 2005.

Para atender esta demanda, poderia usar um "Oracle Database Gateway for MS SQL Server", que utiliza da tecnologia Oracle Transparente Gateway. Com esta tecnologia é possível acessar diversas bases sem a necessidade de preocupação com as diferenças de SQL, diferenças entre os tipos de dados e diferenças entre o dicionário de dados.

Porém, para utilizar um "Oracle Database Gateway" específico é necessária a aquisição de uma licença específica, conforme pode ser constatado no Doc ID 232482.1

Afim de evitar eventuais custos com licenciamento, usei o Oracle Database Gateway for ODBC (DG4ODBC) para atender a esta demanda, que está incluso na licença do produto Oracle. Com este é possível realizar conexões entre bases de dados utilizando drivers ODBC ou OLEDB.

O primeiro passo deste processo é a instalação do pacote UnixODBC 2.3.0 ou superior. Para isso basta baixar e instalar a última versão disponível em ftp://ftp.unixodbc.org/pub/unixODBC. No meu caso usei a versão 2.3.4.

Descompactar o pacote baixado
[root@teste tmp]# gunzip unixODBC-2.3.4.tar.gz
[root@teste tmp]# tar -xvf unixODBC-2.3.4.tar
--Após a descompactação deve ser realizada a instalação do pacote.</span>
[root@lamim]# cd unixODBC-2.3.4
[root@lamim unixODBC-2.3.4]# ./configure   --sysconfdir=/etc  --prefix=/usr/local/unixODBC --libdir=/usr/lib64 --sysconfdir=/etc --enable-gui=no --enable-drivers=no  --enable-iconv  --with-iconv-char-enc=UTF8  --with-iconv-ucodeenc=UTF16LE
[root@lamim unixODBC-2.3.4]# make
[root@lamimunixODBC-2.3.4]# make install
Afim de confirmar se a instalação do UnixODBC foi concluída com sucesso, basta executar o comando abaixo e validar a saída.
[root@lamim unixODBC-2.3.4]# odbcinst -j
unixODBC 2.3.0
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
Feito a instalação do UnixODBC, o passo seguinte é a instalação do driver ODBC 11 para SQL Server. O mesmo pode ser baixado no endereço: http://www.microsoft.com/en-us/download/confirmation.aspx?id=36437&cffa64c5-a636-96fc-e97a-0e907fcc4c04=True&6B49FDFB-8E5B-4B07-BC31-15695C5A2143=1

Descompactar o driver da Microsoft baixado
[root@lamim]# tar -xvf msodbcsql-11.0.2270.0.tar.gz
Após a descompactação, vamos proceder com a instalação do mesmo. Basta executar o comando abaixo.
[root@lamim]# sh install.sh install --force --accept-license

Microsoft ODBC Driver 11 for SQL Server Installation Script
Copyright Microsoft Corp.

Starting install for Microsoft ODBC Driver 11 for SQL Server

Checking for 64 bit Linux compatible OS ..................................... OK
Checking required libs are installed ........................................ OK
unixODBC utilities (odbc_config and odbcinst) installed ..................... OK
unixODBC Driver Manager version 2.3.0 installed ............................. OK
unixODBC Driver Manager configuration correct .............................. OK*
Microsoft ODBC Driver 11 for SQL Server already installed ............ INSTALLED
Microsoft ODBC Driver 11 for SQL Server files copied ........................ OK
Symbolic links for bcp and sqlcmd created ................................... OK
Microsoft ODBC Driver 11 for SQL Server registered ................... INSTALLED

Install log created at /tmp/msodbcsql.783.3296.4111/install.log.

One or more steps may have an *. See README for more information regarding
these steps.
Concluídas as instalações, a próxima etapa consiste na configuração da conexão ODBC. Vamos adicionar a entrada abaixo no arquivo /etc/odbc.ini, alterando de acordo com a necessidade o Server, port e database.
[root@lamim]# cat /etc/odbc.ini
 
[MSSQL]
Driver=ODBC Driver 11 for SQL Server
Description=My Sample ODBC Database Connection
Trace=Yes
Server=tstsqlserver
Port=1433
Database=teste
Feita a configuração acima, já podemos testar a conexão com o SQL Server através do isql. Abaixo mostro um exemplo de conexão de teste

[root@lamim]# isql -v MSSQL usuario senha
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select @@version
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                                                                                                                                                                                                                                                             |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Microsoft SQL Server 2005 - 9.00.5000.00 (X64)
        Dec 10 2010 10:38:40
        Copyright (c) 1988-2005 Microsoft Corporation
        Standard Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)
                                                                                                            |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
SQLRowCount returns 0
1 rows fetched
SQL>
Feito o teste acima podemos prosseguir para a próxima etapa que é a configuração do Database Gateway for ODBC. No diretório $ORACLE_HOME/hs/admin/ criaremos um arquivo chamado initMSSQL.ora com as configurações abaixo.
cat initDBLK_MSSQL.ora
HS_FDS_CONNECT_INFO = DBLK_MSSQL
HS_FDS_TRACE_LEVEL = off
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
set ODBCINI= /etc/odbc.ini
Para esta conexão, será necessário a criação de um novo listener ou a alteração do atual. Afim de evitar qualquer impacto, eu optei pela criação de um novo listener chamado LISTENER_MSSQL, conforma abaixo.
LISTENER_MSSQL =
 (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=lamim)(PORT=1522))
     (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))
)
SID_LIST_LISTENER_MSSQL=
  (SID_LIST=
      (SID_DESC=
         (SID_NAME=MSSQL)
         (ORACLE_HOME = /oracle/product/11.2.0/db)
         (PROGRAM=dg4odbc)
      )
  )
Após a criação do listener, precisamos configurar a entrada no TNS que chamaremos de MSSQL, conforme exemplo a seguir.
MSSQL =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=lamim)(PORT=1522))
      (CONNECT_DATA=(SID=MSSQL))
      (HS=OK)
    )
Feita a configuração do listener e do TNS, precisamos criar um dblink que usará o TNS criado para conectar-se ao SQL Server.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create public database link MSSQL connect to "usuario" identified by "senha" using 'MSSQL';

Database link created.

SQL>  desc tabela@MSSQL;

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NUM                                       NOT NULL NUMBER(10)
 NUM_VERSAO_PROC                           NOT NULL NUMBER(10)
 COD_MARCA                                          NUMBER(10)
 COD_MODELO                                         NUMBER(10)
 ANO_MODELO                                         NUMBER(10)
 DIMENSAO                                           VARCHAR2(30)
Após realizadas as configurações acima é será possível acessar as tabelas do SQL Server usando o dblink MSSQL.

Fonte:
http://www.devmedia.com.br/acessando-outros-bancos-atraves-do-oracle-servicos-heterogeneos-hs-parte-01/13335
http://stackoverflow.com/questions/18531010/how-to-configure-microsoft-odbc-driver-11-for-sql-server-on-redhat-linux-with
http://www.databasejournal.com/features/oracle/article.php/3442661/Making-a-Connection-from-Oracle-to-SQL-Server.htm
Note.252364.1 Functional Differences Between Generic Connectivity and Database Gateways 
Note.232482.1 Gateway and Generic Connectivity Licensing Considerations

DOC DE APOIO: https://docs.microsoft.com/pt-br/sql/connect/odbc/linux-mac/installing-the-driver-manager
SHARE

Jhonata Lamim

  • Image
  • Image
  • Image
  • Image
  • Image