Olá pessoal!
Recentemente realizei uma atividade e vou
compartilhar com vocês. Surgiu uma demanda para mim para estabelecer conexão
entre uma base de dados Microsoft SQL Server 2000 e um Oracle 10G. Para atender
à demanda foi utilizada a tecnologia “Oracle Database Gateway for MS SQL Server”.
Existem algumas formas de se configurar o link
entre bases heterogêneas (bancos de dados distintos), e o que utilizei foi via
ODBC (Open Database Connectivity), conforme figura 1.
![]() |
Figura 1 Oracle Gateway via ODBC. (Fonte: DATADIRECT) |
Vou descrever o passo a passo que realizei
para configurar.
1 – Configuração de um Data Source ODBC
(fonte de dados)
Primeiramente foi necessário criar um OBDC
para o banco SQL Server. Esse passo envolveu outra instituição, que teve que
dar permissão ao IP do servidor Oracle para acessar o servidor MS SQL Server.
Além da liberação do IP, a empresa me passou um usuário e senha do banco remoto
para acesso e configuração.
2 – Configuração do INIT.ORA
Após o estabelecimento de conectividade entre
os bancos via ODBC, foi realizada uma configuração no servidor Oracle.
No diretório “<ORACLE_HOME>\hs\admin\
“ (vale lembrar que esse banco Oracle estava instalado em um servidor Windows Server
2003), provavelmente existe um arquivo chamado inithsodbc.ora, que poderia ter sido utilizado, mas como precisava
acessar duas bases SQL Server distintas, criei outros init.ora e não alterei o
inithsodbc.ora.
Criação dos arquivos .ORA:
init<SID1>.ora
# This is a
sample agent init file that contains the HS parameters that are
# needed for an
ODBC Agent.
# HS init
parameters
HS_FDS_CONNECT_INFO
= DS_ODBC_SQLSERVER1
HS_FDS_TRACE_LEVEL
= off
# Environment
variables required for the non-Oracle system
#set <envvar>=<value>
init<SID2>.ora
# This is a
sample agent init file that contains the HS parameters that are
# needed for an
ODBC Agent.
# HS init
parameters
HS_FDS_CONNECT_INFO
= DS_ODBC_SQLSERVER2
HS_FDS_TRACE_LEVEL
= off
# Environment
variables required for the non-Oracle system
#set <envvar>=<value>
Existem outros parâmetros que podem ser
configurados nesse arquivo, a alteração de apenas esses atende a minha
necessidade. O parâmetro HS_FDS_CONNECT_INFO está setado para o data source
ODBC que criamos anteriormente no passo 1.
É importante saber que o nome do arquivo deve
ser iniciado com “init”, e que o SID1 e SID2
serão “interpretados” pela configuração do TNSNAMES.ORA e LISTENER.ORA.,
então merecem um cuidado especial.
3 – Criação/alteração de LISTENER.ORA
No diretório “<ORACLE_HOME
>\network\admin\” foi necessária uma alteração no arquivo LISTENER.ORA.
No meu caso, criei um listener dedicado para esse serviço, para não impactar
nos demais.
As alterações foram as listadas abaixo:
(...)
SID_LIST_LISTENERHS
=
(SID_LIST =
(SID_DESC =
(SID_NAME = SID1)
(ORACLE_HOME = <ORACLE_HOME> )
(PROGRAM = hsodbc)
)
(SID_DESC =
(SID_NAME = SID2)
(ORACLE_HOME = <ORACLE_HOME> )
(PROGRAM = hsodbc)
)
)
(...)
LISTENERHS =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <xxxxxx
IP_HOST_ORACLE xxxxx>)(PORT = 1522))
)
)
(...)
Foi criado um listener chamado “LISTENERHS” em
outra porta: 1522. Atentar para a lista de serviços que o listener vai atender
(SID_LIST_LISTENERHS),
lá consta o SID1 e SID2, ambos referenciando o programa HSODBC.
Para startar o lisntener novo, utilize o
comando:
lsnrctl start LISTENERHS
Se houver necessidade, seguem os comandos para
verificar o status e parar o listener.
lsnrctl
status LISTENERHS
lsnrctl
stop LISTENERHS
4 – Alteração no
TNSNAMES.ORA
No diretório “<ORACLE_HOME
>\network\admin\”, deve ser alterado o arquivo TNSNAMES.ORA, para
acresentar os novos acessos aos bancos SQL Server.
HS_ODBC
_SID1
=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = <xxxxxx
IP_HOST_ORACLE xxxxx>)(PORT = 1522))
)
(CONNECT_DATA =
(SID = SID1)
)
(HS=OK)
)
HS_ODBC_SID2 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = <xxxxxx
IP_HOST_ORACLE xxxxx>)(PORT = 1522))
)
(CONNECT_DATA =
(SID = SID2)
)
(HS=OK)
)
5 – Criação do DBLINK no Oracle Database
Foram criados dois dblinks privados em um
schema do Oracle que irá gerenciar (receber e tratar) as informações do MS SQL
Server.
CREATE DATABASE
LINK "BDLINK_SID1"
CONNECT TO "<user_bd_sqlserver_1>"
IDENTIFIED BY "<pass_bd_sqlserver_1>"
USING ’ HS_ODBC_SID2';
CREATE DATABASE
LINK " BDLINK_SID2"
CONNECT TO "<user_bd_sqlserver_2>"
IDENTIFIED BY "<pass_bd_sqlserver_2>"
USING ‘HS_ODBC_SID2’;
Lembrando que para os dblinks no Oracle,
foram criados com os mesmos usuário/senha que foi configurado na fonte de dados
ODBC, e o tns usado (USING) o que foi configurado no arquivo TNSNAMES.ORA.
Pronto!
Agora é só testar:
select * from
tabela_sqlserverSID1@DBLINK_SID1;
e
select * from
tabela_sqlserverSID2@DBLINK_SID2;
Bom, pessoal...
É isso!
Espero ter ajudado no entendimento da
configuração usada por mim para resolver uma demanda de “comunicação” entre
bancos heterogêneos: Oracle 10g e MS SQL Server 2000.
Até a próxima!
Referências:
ORACLE -
Configuring Oracle Database Gateway for ODBC. Disponível em:
http://docs.oracle.com/cd/B28359_01/gateways.111/b31043/configodbc.htm.
Acessado em: 21/08/2013.
ORACLE - Oracle
Database Gateway. Installation and Configuration Guide. 11g
Release 1 (11.1) for Microsoft Windows. Disponível em:
http://docs.oracle.com/cd/B28359_01/gateways.111/b31043.pdf. Acessado em:
20/08/2013.
BURLESON
CONSULTING - Creating Multiple Listeners Tips. Disponível em http://www.dba-oracle.com/t_configure_multiple_listeners.htm.
Acessado em:21/08/2013.
DATADIRECT
- Connect for ODBC with Oracle database. Gateway for ODBC (DG4ODBC). Disponível
em: http://www.datadirect.com/resources/odbc/oracle-database-gateway/index.html.
Acessado: 21/08/2013.
Cara,como faço para aprender isso?
ResponderExcluirOlá!
ExcluirAprender o que exatamente?