Technological recipes that I've held to prepare some solutions DBA environment. (by Felipe Donoso Bastias)

18 Feb 2015

Cómo configurar DBLink de Oracle Hacia SQLServer y evitar típicos errores tal como: ORA-28545: error diagnosed by Net8 when connecting to an agent

Cómo configurar DBLink de Oracle Hacia SQLServer y evitar típicos errores tal como: ORA-28545: error diagnosed by Net8 when connecting to an agent
Quizás a muchos les ha sucedido que les aparece el error  ORA-28545: error diagnosed by Net8 when connecting to an agent, cuando consultan una tabla desde Oracle hacia un dblink en sqlserver, luego de haberlo configurado después de muchas batallas.
Ese error se produce por tres cosas:
1.- Mal configuración del DNS u ODBC. Es decir se definió mal el nombre, servidor o ip del servidor sql de destino.
2.- Se está ocupando un driver ODBC DNS de 32 Bits para conectarse desde un servidor Oracle 64 bits hacia el dblink sqlserver. Lamentablemente no tengo el link Oracle en este minuto en donde comentan que para conectarse desde un motor oracle 64 bits se necesitan los drivers ODBC para sqlserver de 64 Bits, yo en lo personal he probado con uno de 32 Bits y me dio problemas.
3.- La configuración de los archivos init[ODBC_NAME].ora, tnsnames o listener.ora tienen problemas de configuración
Para evitar tales problemas revisemos cómo se realiza correctamente la configuración de un dblink desde oracle hacia sqlserver. En este ejemplo he utilizado Oracle 11gR2 sobre windows 2008 R2 y como destino SQL Server 2012.
Como  primer paso debemos configurar el ODBC hacia el ambiente sqlserver que deseamos, no detallare esto pues muchos han realizado este paso y para no retrasar más esto, les pongo el ejemplo del ODBC que he creado, le puse por nombre hsodbc, el cual se conecta a una base de datos sqlserver en un servidor llamado TEST, la base de datos sqlserver a la cual nos conectaremos lleva por nombre también hsodbc:


Esto es importante: este alias en la fotografía anterior llamado hsodbc debe ser del tipo System DNS, no User DNS. Además es importante utilizar un driver ODBC adecuado para los ambientes. Como me estoy conectando desde un ambiente Oracle de 64 bits hacia un ambiente sql también de 64 Bits deben instalar los drivers de 64 Bits del ODBC para sqlserver. Estos pueden ser descargados desde la siguiente página:: https://www.microsoft.com/en-us/download/confirmation.aspx?id=36434
(recordar solo bajar los de 64 Bits) luego de instalarlo podrán ver que aparecerá un nuevo registro en la pestaña drivers. Al crear el alias deben usar este driver instalado:


Bueno luego que ya han configurado el driver ODBC es necesario que ingresen a la carpeta %ORACLE_HOME%\hs\admin (Oracle_home) en dicha carpeta deberian ver los siguientes archivos:
De estos archivos copiaran el primero de ellos el archivo initdg4odbc.ora y le pondrán por nombre: inithsodbc.ora. Este archivo con extensión *.ora  es el archivo de configuración para conectarse al ODBC creado anteriormente y debe llevar por nombre init[NOMBRE_ODBC_CREADO].ora es decir inithsodbc.ora
Este archivo debería contener las siguientes líneas (puede contener muchas más pero para este ejemplo sólo bastará lo siguiente):
HS_FDS_CONNECT_INFO = hsodbc
HS_FDS_TRACE_LEVEL = 0


El parámetro HS_FDS_CONNECT_INFO llevará como valor el ODBC creado anteriormente: Ejemplo;




Como se podrán dar cuenta hasta aquí con esta configuración estaremos usando una excelente tecnología de Oracle llamada Heterogeneous Agent  el cual es parte del software Oracle Database Gateway for ODBC (en realidad ese era el nombre que tenia antes esta herramienta Heterogeneus Agent ahora llamada asi a secas Database Gateway). De hecho si ejecutan el binario dg4odbc podrán ver la versión del gateway instalada en vuestro servidor:


Bueno realizado esto sobre el archivo init nuestro, nos queda configurar el listener.ora y tnsnames.ora. Para esto bueno nos vamos a la carpeta ORACLE_HOME/network/admin y antes de editar esos archivos sugiero respaldarlos. Ojo que dentro de la carpeta ORACLE_HOME\hs\admin existen ya unos archivos ejemplo para tnsnames y listener que pueden utilizar. Eso se los doy como un tips.


Partamos por la configuración del listener.ora Para ese archivo debemos agregar las siguientes líneas al registro SID_LIST_LISTENER nuestro configurado (si desean incluso pueden generar un nuevo listener como ustedes deseen):
  (SID_DESC=
        (SID_NAME=hsodbc)
        (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
        (PROGRAM=dg4odbc)
      )
Es muy importante utilizar el PROGRAM=dg4odbc siempre debe estar con ese valor independiente del nombre ODBC que ocupemos, si en este ejemplo usamos un valor tal como: PROGRAM=hsodbc al momento de invocar el dblink desde el ambiente Oracle aparecerá el error: ORA-28545: error diagnosed by Net8 when connecting to an agent. Así que no olvidar aquello.  Esto es porque en las versiones 10g o más antiguas se ocupaba el hsodbc, pero para este caso que es un oracle 11g debemos usar dg4odbc.
Para que no queden dudas Heteregoneous Services es un producto que fue reemplazado en 11g por Database Gateway, en este caso la versión de DG que estamos ocupando no requiere pago de licencia adicional, ver la nota Oracle Support ID 232482.1 en dónde explican y detallan esto.
Bueno aclarando lo anterior y siguiendo con nuestra configuración lo anterior es la única configuración que he hecho pues ese nuevo nombre de servicio lo sacaré por el mismo  listener con el cual contaba anteriormente.


Ahora es necesario configurar el tnsnames.ora agregando un nuevo registro como el siguiente:
hsodbc =
 (DESCRIPTION=
   (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1532))
   (CONNECT_DATA=(SID=hsodbc))
   (HS=OK)
 )


En el PORT usamos bueno el puerto del listener actual. El SID debemos usar el nombre del init creado o del ODBC creado en un comienzo. Lo que no debe olvidarse es usar el (HS=OK) Si no esto no nos funcionará. De ahi el nombre de dicha keyword HS -> Heterogeneous Services.


Bueno a continuación les dejo como ejemplo mis dos archivos listener.ora y tnsnames.ora configurados:
# listener.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.


listener.ora
SID_LIST_LISTENER =
 (SID_LIST =
   (SID_DESC =
     (GLOBAL_DBNAME = test1)
     (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
     (SID_NAME = test1)
   )
   (SID_DESC =
     (PROGRAM = extproc)
     (SID_NAME = CLRExtProc)
     (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
   )
   (SID_DESC=
        (SID_NAME=hsodbc)
        (ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
        (PROGRAM=dg4odbc)
      )
 )


LISTENER =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST =localhost)(PORT = 1532))
 )


ADR_BASE_LISTENER = D:\oracle


TNSNAMES.ORA
hsodbc =
 (DESCRIPTION=
   (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1532))
   (CONNECT_DATA=(SID=hsodbc))
   (HS=OK)
 )


Luego de configurado estos dos archivos deben recargar la configuración del listener con el comando lsnrctl reload y si gustan pueden hacer alguna prueba con el comando tnsping hsodbc 3 el cual no debería darles problemas:


Y bueno ya hecho eso sólo nos queda configurar el dblink desde el ambiente SQLSERVER:


SQL> create database link "TEST" connect to "USUARIO" identified by "PASSWORD" using 'hsodbc';


Database link created.


De lo anterior TEST es el nombre del dblink, USUARIO y PASSWORD son los datos de conexión hacia el ambiente sqlserver. No olividar que el usuario y password DEBEN ir en comillas dobles sino tendrán el error ORA-28545. Por último dentro del comando using debemos poner el nombre de nuestro ODBC configurado.


Luego de esto deberíamos estar en condiciones de probar nuestro dblink el cual no debería dar problemas: En este ejemplo consultaré una tabla que tengo en mi servidor sqlserver llamada tabla_test:


SQL> select * from tabla_test@TEST;


CAMPO_XXXX  CAMPO_YYYY
---------- --------------------------------------------------
1111111111 Oracle
2222222222 SQL Server


SQL>


y sería absolutamente todo. Eso es todo lo que deben configurar nada más. Por lo menos para lo básico. Espero que haya sido algo de utilidad este tutorial cualquier consulta me la pueden enviar a felipe@felipedonoso.cl o dba@felipedonoso.cl


PD:  Este tutorial nación de un problema que tuve al crear un dblink en un cliente. A pesar que había configurado bastantes veces este dblink me estaba topando con un problema que no podía resolver, obtenía el error: ORA-28545: error diagnosed by Net8 when connecting to an agent y no podía arreglarlo. Finalmente la causa de todo este problema radicaba en que en el registro del listener.ora estaba usando (PROGRAM=hsodbc) en vez de usar el correcto (PROGRAM=dg4odbc). Recuerden que estamos haciendo la prueba para un Oracle11g si fuese 10g o más antiguo se debe ocupar (PROGRAM=hsodbc). Es lo que les comentaba anteriormente, por simples detalles pueden perder bastante tiempo, cuando lo arreglé me sentí asi de glorioso y victorioso:



Saludos :p que estén bien.
Share:

7 Comments:

Brayan Armando Yaquian Gonzalez said...

Sos grande hermano!!!

Felipe Rodrigo Donoso Bastias said...

No hay de que Bro.

xumeiqing said...

coach factory outlet
nmd adidas
ray ban sunglass,ray ban sunglasses,ray ban outlet,cheap ray bans,cheap ray ban sunglasses,cheap ray bans,ray bans
stan smith adidas
cartier
polo ralph lauren
yeezy boost 350
fitflops
instyler max
white converse
ray bans
michael kors outlet
sac longchamp pliage
calvin klein dresses
ralph lauren
michael kors outlet online
fitflops shoes
burberry outlet canada
reebok classic
pandora jewelry
adidas gazelle
supra store
omega speedmaster
nike roshe run
burberry outlet
air jordan shoes
under armour
fitflops sale clearance
coach outlet store online clearance
mlb jerseys wholesale
michael kors handbgas
nike shoes for cheap
oakley sunglasses outlet
michael kors outlet
fitflops sale clearance
reebok outlet store
adidas pure boost black
dior sunglasses 2016
michael kors outlet online
bottega veneta shoes
chenzhen20160511

dada24 Xu said...

canada goose parka
uggs outlet
michael kors outlet online
polo ralph lauren outlet
michael kors
michael kors purse
longchamp sale
air jordans
ugg australia outlet
nike outlet
zhi20161219

caiyan said...

cheap oakley sunglasses
vans outlet store
rolex replica watches
michael kors handbags
christian louboutin outlet
nike air max 90
ralph lauren outlet
polo outlet
adidas nmd
louis vuitton outlet
0424shizhong

ninest123 said...

adidas outlet
adidas yeezy boost
pandora store
uggs canada
salvatore ferragamo
ralph lauren outlet
ugg boots
pandora charms sale clearance
timberland boots outlet
kate spade handbags
mt0209

Yaro Gabriel said...

www0816
hugo boss sale
salomon
canada goose outlet
valentino shoes
ugg boots clearance
basket nike
nike air max 90
michael kors outlet
nike requin
ray ban sunglasses

Copyright © DBA TIPS | Powered by Blogger
Design by SimpleWpThemes | Blogger Theme by NewBloggerThemes.com | Free Blogger Templates