Para melhor visualização, recomendo resolução de no mínimo 1280 x 800 e navegador Mozilla Firefox


terça-feira, 7 de setembro de 2010

Oracle 10g x64 + Windows x64 + MS SQL Server = DG4ODBC

Por Eduardo Legatti

Olá,

No artigo de julho/2009, eu demonstrei através de um exemplo prático como realizar uma conexão entre o Oracle 11g e PostgreSQL através do DG4ODBC no Linux. Neste artigo irei apenas relatar minha experiência na realização de configuração de uma conexão heterogênea entre um Oracle 10g x64 instalado em um Windows Server 2003 x64 e um MS SQL SERVER 2000. Bom, após finalizada as configurações e do teste de conectividade via ODBC, o último passo foi a criação do Database Link. Após várias tentativas de realizar a conexão, sempre o erro abaixo era emitido:
 

ORA-28545: error diagnosed by Net8 when connecting to an agentUnable to retrieve text of NETWORK/NCR message 65535
ORA-02063: preceding 2 lines from MSSQLSERVER



De acordo com erro acima, verifiquei várias vezes os arquivos de configuração LISTENER.ora, TNSNAMES.ora entre outros, para checar se havia algum erro de sintaxe. Enfim, após várias tentativas sem sucesso, liguei para um colega de trabalho e pedi para ele testar os arquivos de configuração em um Oracle XE que eu tinha instalado na minha máquina. Conclusão: O teste foi bem sucedido entre o Oracle XE e o SQL Server. Então chegamos a conclusão de que o problema poderia ser por causa da versão 64 bits, tanto do Oracle, quanto do Windows. Enfim, meu colega sugeriu verificar a existência do executável HSODBC no diretório %ORACLE_HOME/bin e aí veio a surpresa. O arquivo não existia. Após verificarmos a documentação, vimos que o Oracle 10g x64 não disponibilizava o executável HSODBC e que uma conexão heterogênea somente poderia ser feita através do DG4ODBC.

Foi aí então que instalei separadamente o Oracle Database Gateway for ODBC 11.2.0.1.0, refiz as configurações necessárias e alterei a linha [PROGRAM = HSODBC] para [PROGRAM = DG4ODBC] no arquivo LISTENER.ora criado no diretório NETWORK/ADMIN do ORACLE_HOME do software Oracle Database Gateway. Sucesso! A conexão foi realizada sem qualquer problema utilizando as configurações abaixo:




================================================
Caminho: C:\DG4ODBC\product\11.2.0\tg_1\hs\admin
Arquivo: initsqlserver.ora
================================================
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC

#
# HS init parameters
#
HS_FDS_CONNECT_INFO = sqlserverdsn
HS_FDS_TRACE_LEVEL = OFF

#
# Environment variables required for the non-Oracle system
#
#set =

=====================================================
Caminho: C:\DG4ODBC\product\11.2.0\tg_1\NETWORK\ADMIN
Arquivo: listener.ora
=====================================================
SID_LIST_LISTENER_DG4ODBC =
  (SID_LIST =
    (SID_DESC = 
      (SID_NAME = SQLSERVER)
      (ORACLE_HOME = C:\DG4ODBC\product\11.2.0\tg_1) 
      (PROGRAM = DG4ODBC)
    )
  )

LISTENER_DG4ODBC =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))
    )
  )

ADR_BASE_LISTENER_DG4ODBC = C:\DG4ODBC\product\11.2.0\tg_1

====================================================
Caminho: C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN
Arquivo: tnsnames.ora
====================================================
MSQLSERVER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))
    (CONNECT_DATA =
      (SID=SQLSERVER)
    )
    (HS=OK)
  )


No mais, para quem for utilizar o serviço heterogêneo de conectividade "heterogeneous services" (hsodbc) para a realização de conexão entre um banco de dados Oracle e um banco de dados não-oracle, perceberá que não só no Oracle 11g o programa hsodbc foi substituído pelo dg4odbc (Database Gateway for ODBC), mas também nas versões 64 bits do Oracle 10g.



13 comentários:

eloia disse...

Eduardo,boa tarde.

Onde posso efetuar o download somente do database gateway 11g para instalar o DG4ODBC ?Estou utilizando um servidor solaris 64bits + oracle 10.2.0.5 64 bits. O agente HSODBC não funciona de maneira alguma.Quando testo o DBLINK apresenta o mesmo erro seu... Obrigado.

Eduardo Legatti disse...

Olá Eloia,

Você terá que efetuar o download da versão 11g conforme demonstrado no artigo abaixo:

http://eduardolegatti.blogspot.com.br/2010/11/novidades-na-instalacao-do-oracle.html

Oracle Gateways p10098816_112020_platform_5of7.zip

Abraços

Legatti

eloia disse...

Eduardo, boa tarde.

O Gateway do linux 64 bits funciona no solaris 64 bits? No site do delivery não aparece gateway para solaris 64bits. Aparece somente para o SPARC.

Att,

Alisson Eloia

Eduardo Legatti disse...

Olá Eloia,

Agora que eu percebi que você está utilizando o Solaris x86-64. ;-)

O comentário anterior foi referente ao Linux e realmente eu acredito que não irá funcionar no Solaris. Bom, não sei porque a Oracle não lançou o DG4ODBC para o Solaris x86(64bits). Acredito que você vai ter que tentar utilizar o HSODBC mesmo.

Caso você não consiga de maneira nenhuma, uma outra forma é utilizar uma outra máquina e assim instalar o Gateway (Windows ou Linux).

Abraços e boa sorte

Legatti

Everton disse...

Boa tarde Eduardo, estou utilizando a versão 11g XE do oracle e a mesma versão do Oracle Gateway. Fiz a configuração exemplificada no artigo, entretando, me é retornado um ERRO: ORA-12154: TNS:não foi possível resolver o identificador de conexão especificado.
Consegue imaginar algo que eu possa estar fazendo de errado, não possuo tanta familiaridade com o Oracle e preciso de link entre estes SGBD's.
Sei que o artigo é antigo, no entanto se puder me auxiliar ficarei muito grato.
Obrigado, forte abraço.

Eduardo Legatti disse...

Olá Everton,

Porque você teve que instalar o Oracle Database Gateway? Se o Gateway vai ficar na mesma máquina que o Oracle XE (32 bits), então você precisa configurar os arquivos em %ORACLE_HOME%/hs/admin. Bom, minha intenção com este artigo não foi lá o de criar um tutorial ;-) O ideal seria você dar uma olhada no artigo de Julho/2009. No mais, vamos lá.

Já que você não informou, estou supondo que os bancos de dados estão em servidores separados e que a plataforma do Oracle é Windows.

1- Certifique-se de que a conexão ODBC esteja funcionando no servidor Oracle, ou seja, à partir do servidor Oracle a conexão com SQL Server tem que ser bem sucedida
2- Certifique de que o arquivos de configuração estejam corretos (initsqlserver.ora, listener.ora, tnsnames.ora)
3- Certifique-se de que o arquivo TNSNAMES.ORA localizado no ORACLE HOME do Gateway esteja acessível (É do Oracle XE?). Se possível, crie uma variável de ambiente no Windows chamada de TNS_ADMIN setando o caminho para onde está localizado o TNSNAMES.ORA
4- Certifique-se de que o listener do Gateway esteja ativo (lsnrctl start nome_do_seu_listener) (É do Oracle XE?)
5- Certifique-se de ter criado corretamente o Database Link (create database link ...)

Basicamente é isso que você tem que verificar.

Abraços

Legatti

Everton disse...

Bom dia Eduardo, como eu não havia informado. Eu estou tentando realizar esse link no mesmo servidor, ou seja, Oracle 11g XE e MSSQLServer 2008r2 na mesma maquina (localhost).

Respondendo aos questionamentos,
1- O teste de conexão que fiz foi por meio de 'tnsping'. Ao executar o comando com o serviço XE porta(1521), obtive sucesso. Mas ao realizar o mesmo com o serviço dg4msql(1522) me é retornado um Erro TNS-12521 (Não há listener). Entretando, se troco a porta para 1521, funciona normalmente.

A partir de então, crio o DBLink, quando realizo um teste de sua funcionalidade me informado que: Não serão lidos mais dados do que o soquete.

Não tenho a minima ideia do que isso possa ser, fiz uma rápida pesquisa, mas os resultados são bem distintos.

Eduardo Legatti disse...

Olá Everton,

A conexão ODBC está funcionando? Em relação ao erro TNS-12521 (Não há listener) você tem que certificar que o listener criado pelo DG4ODBC está ativo. Deve ser um outro Listener. Verifique em Windows -> Services. No mais, acredito que você possa ter ser complicado na configuração, pelo fato de ter instalado o Oracle Database Gateway sem necessidade. Tente desinstalá-lo e comece tudo de novo apenas tendo o Oracle XE como ORACLE HOME.

Abraços

Legatti

Everton disse...

Boa tarde Eduardo, depois de 'N' tentativas sem sucesso, resolvi realizar uma compilação passo - a - passo do que estou fazendo. Se possível, gostaria que por gentileza desse uma olhada e veja se consegue identificar algo que eu não esteja assimilando.

Segue o link do arquivo .doc:

http://uploaded.net/file/p5l0auln

Abraços.

Eduardo Legatti disse...

Olá Everton,

Existe uma diferença gritante do conteúdo do meu artigo com o que você está usando. Eu instalei e configurei o Oracle Database Gateway for ODBC e você instalou o Oracle Database Gateway for Microsoft SQL Server. São coisas diferentes. Para ficar claro, eu tive que instalar o Gateway, porque o banco de dados era Oracle 10g 64 bits na qual não suportava o Heterogeneous Services. Não é o seu caso.

Bom, na sua configuração não estou vendo nada de anormal. No entanto, me parece que você está tendo algum tipo de problema de conectividade, pois a mensagem "Não serão lidos mais dados do soquete" é bem estranha. Seria interessante você testar a conexão usando o SQL*Plus. Bom, recomendo que você altere alguma coisas. Na criação do Database Link, você utilizou a palavra chave CURRENT_USER. Altere-o de forma que você passe um usuário e uma senha para acessar o banco de dados do SQL Server. Portanto, crie um usuário no SQL Server específico para esse propósito. Outra coisa, é que você utilizou a palavra "dg4msql" para praticamente tudo.

Para não ficar confuso, nomeie adequadamente cada objeto de forma a ficar mais claro o que é cada um. Faça essas correções e teste novamente. No mais, com certeza existem vários artigos que mostram a configuração utilizando o Oracle Database Gateway for Microsoft SQL Server. Sugiro que você digite no Google a expressão "How to setup Oracle Database Gateway for SQL Server", assim mesmo entre aspas duplas. Com certeza aparecerão alguns links que irão lhe ajudar.

Abraços

Legatti

Anônimo disse...

Amigos,

- Apanhei até conseguir conectar meu Oracle 11g (11.2) ao meu Sql Server 2008 R2, ambos numa mesma máquina com Windows 7 64 bits.

- Lí muita coisa até conseguir e certamente teria conseguido com uma facilidade muito maior não fosse uma pegadinha boba na criação da ODBC do Windows para o Sql Server, segue dica:

Quando criar a ODBC, pela ferramenta Fontes de Dados (ODBC)do próprio windows, criem esta abaixo (na aba) Fonte de Dados do Sistema. Cuidado, pois quando vocês entra no programa, cai na opção (aba/tab) de criar fonte de dados do usuário e tudo passa muito bem, você achará que essa etapa esta vencida, mas na verdade, niguém vai enxergar essa ODBC.

- Se tivesse me atentado antes, conseguiria conectar em 1/3 do tempo que levei.

Até
Aureliano

Raphael Fernandes disse...

Olá, Eduardo!

Acompanho seu blog há algum tempo e por acaso estou passando pelo mesmo problema descrito nesse post (imagine que estou falando isso quase 4 anos após sua postagem).

Tenho um ambiente Oracle 10g (10.2.0.4) rodando em Windows Server 2003 x64 acessando MS-SQL SERVER 2000. Não conseguia configurar de forma alguma e resolvi procurar na internet, foi aí que cheguei ao seu artigo. Na verdade, esse mesmo ambiente está rodando usando HSODBC em um outro ambiente Oracle 10g (10.2.0.3) rodando em Windows Server 2003 x32, mas estou precisando configurar na 64-bits.
Entendo que precisamos instalar o DG4ODBC para substituir a funcionalidade não continuada do HSODBC, mas você sabe dizer se não tem problemas quanto à versão? Meu banco é 10g e a versão do gateway é 11g (Oracle Database Gateways 11g Release 2 (11.2.0.1.0) for Microsoft Windows (x64) [http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461.html] ).

Estou receoso em instalar em ambiente de produção, com medo de afetar algo no banco já estável. O pior é que não temos um ambiente para testar antes, mas estou providenciando esse ambiente.

Tem algum conselho para me dar?

A questão do DB ser 10g e o DG ser 11g é um problema, ou seu cenário era o mesmo?

Posso ter algum tipo de problema com meu banco instalando o gateway no mesmo servidor?

Agradeço se puder me ajudar!

Valeu!!

Eduardo Legatti disse...

Olá Raphael,

Me parece que você está com um ambiente idêntico ao que eu estava naquela época, ou seja, Oracle 10g/SQL Server 2000. Você pode perceber que eu instalei o Oracle Database Gateway for ODBC 11.2.0.1.0. Acredito que você não terá problemas. É só lembrar de ao criar o listener do Gateway, colocar outra porta diferente da que está sendo usado pelo LISTENER atual (1521). Acho que configurei na época a porta 1524.

Boa sorte e até mais...

Legatti

Postagens populares