Este artículo para DBA's de Oracle explica como configurar los servicios de conexión heterogeneous de Oracle para poder visualizar bases de datos SQL Server desde un esquema Oracle, como si fueran objetos propios de Oracle.
En versiones antiguas de Oracle, esta conectividad se podía realizar a través de “Gateways” que se licenciaban de manera independiente del servidor Oracle, pero la posibilidad de realizar lo mismo en sentido contrario a través de SQL Server, posibilitó la aparición de los “Heterogeneous Services” de manera gratuita en Oracle.
Para poder realizar la configuración es necesario contar con los objetos necesarios del catálogo. Por defecto están instalados, pero en determinadas instalaciones puede ser necesario realizarlo manualmente. Para ello, ejecutar como SYS el fichero caths.sql del directorio %ORACLE_HOME%/rdbms/admin. Después, el DBA de Oracle sólo ha de seguir los siguientes pasos:
- Crear un conector ODBC de SQL Server (System DSN) en el administrador de ODBC de Microsoft (por ejemplo, “sqlcon”)
- Ajuste del fichero de inicialización de Heterogeneous Services
Este fichero reside en ORACLE_HOME/HS/ADMIN, y su nombre depende del SID que se asigne al servicio. El nombre usado tipicamente es: hsodbc, de manera que el fichero se llamaría: inithsodbc.ora. Este fichero debe contener como mínimo los siguientes parámetros:
# Nombre de la conexión ODBC
HS_FDS_CONNECT_INFO = sqlmis
HS_FDS_TRACE_LEVEL = 0
HS_OPEN_CURSORS = 300
- Configuración del fichero TNSNAMES.ORA
Se debe añadir la siguiente entrada:
hsodbc =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = <IP_SERVIDOR> ) (PORT = 1521))
)
(CONNECT_DATA = (SID = hsodbc))
(HS=OK)
)
- Configuración del fichero del Listener
LISTENER.ORA: Se debe añadir a la SID_List el siguiente descriptor:
(SID_DESC =
(SID_NAME = hsodbc)
(ORACLE_HOME = C:\oracle\ora92) # el ORACLE_HOME correspondiente
(PROGRAM = hsodbc )
)
- Reinicio del listener
En los servicios del servidor reiniciar el servicio del listener.
- Conectarse con un SQL*Plus a la instancia ORACLE, y crear un database link contra el SQL Server a través de HS:
SQL> create database link hsodbc connect to "usuario" identified by "password" using 'hsodbc'
El usuario y el password deben ser los usuarios de conexión a la BBDD de SQL Server.
Por ejemplo, si el usuario es el “sa” los objetos a los que se llegará serán los objetos de la BBDD de sistema “master”.
Una vez configurado se puede acceder desde un esquema ORACLE a las tablas (objetos en general) de una BBDD SQL Server.
A modo de ejemplo, la sintaxis necesaria para realizar una simple join entre 2 tablas una Oracle y la otra SQL Server sería:
SELECT e.name, d.dept
FROM emp e, dept@hsodbc d
where e.id_dept=d.id_dept;
Oscar Paredes
IT Manager
Oracle DBA
Attachment | Mida |
---|---|
XDAT012006.pdf | 162 bytes |
Conexión desde Oracle a MySQL
Submitted by Antonio (not verified) on 16 January, 2008 - 18:15
Este método sirve para cualquier base de datos? Se puede utilizar también con MySQL?
Si que se puede...
Submitted by oscapt (not verified) on 25 January, 2008 - 13:44
In reply to Conexión desde Oracle a MySQL by Antonio (not verified)
Se puede conectar con el mismo sistema un Mysql a una base de datos Oracle.
Como ves el procedimiento sólo utiliza una conexión ODBC, que podría ser hacia SQL Server o hacia MySQL.
Un saludo,
Como conectar a distintis ODBC
Submitted by Daniel Patiño (not verified) on 19 July, 2008 - 15:53
In reply to Si que se puede... by oscapt (not verified)
Realizando la conexión a MaxDB fu exitosa, se realizó siguiendo uno manuales publicados que encontre partiendo de este foro, lo que no he podido es conectarme a varias bases de datos, es decir, se configuran los archivos, pero como hace uno para habilitar un ODBC diferente. Me quiero conectar a una base de datos MaxDB y a otra SQLserver de manera simultánea. Gracias
Alguien sabe como enlazar
Submitted by ricardo (not verified) on 21 February, 2008 - 23:19
Alguien sabe como enlazar una base de datos en SQL SERVER con una de ORACLE.
Conectar SQL Server contra Oracle
Submitted by josimac on 27 May, 2008 - 00:50
In reply to Alguien sabe como enlazar by ricardo (not verified)
Entiendo que quieres leer o escribir datos desde un SQL Server hacia un oracle.
En primer lugar debes tener el cliente de oracle en la maquina que va ha realizar el enlace. Puede que te sirva el conector OLEDB de SQL Server aunque no puedo asegurarlo puesto que en mi caso tengo las 2 bbdd en la misma máquina.
El nombre de servidor oracle debe ser: nombre_servidor_oracle/SID_oracle (no sirve nombre_servidor_oracle@sid)
usuario y password del schema a usar.
Con esto la conexión desde SQL Server a Oracle funciona perfectamente.
Saludos,
Versiones
Submitted by Anonimo (not verified) on 13 March, 2008 - 12:26
Sirve este sistema también para SQL Server 2005??
SQL Server 2005
Submitted by Carlos on 14 March, 2008 - 00:37
In reply to Versiones by Anonimo (not verified)
El hecho de utilizar un ODBC para el enlace con la base de datos destino hace que el sistema sirva para prácticamente cualquier base de datos.
Si en el servidor de la base de datos Oracle puedes configurar un ODBC que se conecte correctamente a otra base de datos, tienes que poder utilizar Heterogeneous Services para definir un enlace de Oracle a esta base de datos.
Con MySQL funciona, lo he podido comprobar personalmente, con SQLServer 2005 aún lo tendrás más fácil para definir el ODBC.
Carlos Fernández
Analista de sistemas
HOLA sobre............"eje
Submitted by Percy (not verified) on 30 May, 2008 - 17:40
In reply to SQL Server 2005 by Carlos
HOLA
sobre............"ejecutar como SYS el fichero caths.sql del directorio %ORACLE_HOME%/rdbms/admin." debo decir que uso el pl/sql ejecute el archivo como usuario sys y funciona mas o menos hasta la mitad del archivo y luego me sale error de sintaxis que no reconoce el comando SQL. como lo soluciono. SE QUE HA PASADO MUCHO TIEMPO DESDE QUE SALIO ESTE TUTORIAL PERO SI ALGUIEN VE ESTO POR FAVOR AYUDAAAAAA!!!!
Ejecutar un script como sys
Submitted by Carlos on 30 May, 2008 - 22:29
In reply to HOLA sobre............"eje by Percy (not verified)
PL/SQL? Lo haces desde una herramienta gráfica? Puede que ese sea el problema. Deberías ejecutarlo con SQLPlus, y dentro de una sesión del servidor donde está instalada la base de datos.
Si estás en linea de comandos con el usuario con el que se ha instalado la base de datos puedes hacer:
>sqlplus "/as sysdba"
Una vez dentro de SQLPLUS ejecutas el script con @ más el camino completo:
SQL>@oracle_home/rdbms/admin/caths
Si lo haces así no te debería fallar.
Conexion Oracle_Access
Submitted by Anonim. (not verified) on 18 June, 2010 - 17:18
Hola muy buena la respuesta de conexion conSqlServer...
tengo un problema con la conexion Oracle_Access tengo mi base Oracle en Linux y una Base Acces en Windows con una aplicacion.... entonces quisiera saber como hacer la conxion de mi base oracle en Linux hacia la base Access en Windows
Gracias
Attm
Roger Reyes
Error en TNSNAMES.ORA
Submitted by luigi (not verified) on 27 October, 2010 - 12:55
Buen post, aunque me llevó tiempo resolver un pequeño error.
se trata de la linea del TNSNAMES.ORA siguiente
(CONNECT_DATA = (SID = hsodbc))
que debería ser
(CONNECT_DATA = (SERVICE_NAME = hsodbc))
Creo que no es un error. El
Submitted by Carlos on 27 October, 2010 - 19:51
In reply to Error en TNSNAMES.ORA by luigi (not verified)
Creo que no es un error. El post se escribió hace tiempo, cuando se trabajaba normalmente con la versión 9i, y hasta esta versión todo funciona correctamente.
Si no me equivoco debes tener una 10g u 11g, y entonces la cadena sí que ha de ser la que indicas.
Resumiendo:
Para versiones <= 9i:
(CONNECT_DATA = (SID = hsodbc))
Para versiones posteriores a 9i:
(CONNECT_DATA = (SERVICE_NAME = hsodbc))
Gracias por la observación, luigi
conexion a MySql
Submitted by Anonim. (not verified) on 6 November, 2010 - 22:08
Saludos
queria preguntar por un problema que me surge, se trata que ya me conecto a MySQL 4.1,
pero el problema es que no me despliega las columnas varchar de MySQL y solo me muestra el primer registro y las dos primeras columnas que son numéricas, la tabla tiene 4 columnas
Id tipo int
sucursal tipo double
nombre tipo text
cedula tipo text
, hago select * from facturas@mysql pero solo muestra Id y sucursal del primer registro,
incluso si hago select "nombre" from facturas@mysql me dice que no se conoce la columna
esta con minusculas igual que el MySQL, talvez saben que me falta configurar?
he hecho agregando la clausula WHERE funciona pero siempre me muestra un registro y no reconoce las columnas text, si por ahi tienen alguna pista les agradezco mucho de antemano
Me imagino que esto ya se
Submitted by Siyulena (not verified) on 28 April, 2016 - 16:43
In reply to conexion a MySql by Anonim. (not verified)
Me imagino que esto ya se resolvio esto hace mucho tiempo, pero para los que lleguen a leer, a mi me paso lo mismo y era la version del Odbc, utilice el 3.51.27 y listo.
El problema era de hace
Submitted by Carlos on 28 April, 2016 - 23:52
In reply to Me imagino que esto ya se by Siyulena (not verified)
El problema era de hace tiempo, pero seguro aún sigue pasando, así que gracias por compartir tu solución, seguro que va a ser de ayuda :)
Hola. En mi caso, requiero
Submitted by Anonimo (not verified) on 10 March, 2014 - 22:26
Hola. En mi caso, requiero pasar los datos desde una base de datos MySQL ubicados en un servidor a una base de datos Oracle ubicados en otro servidor diferente o que por el contrario la base de datos Oracle vaya y consulte los datos de MySQL y los inserte en oracle. Qué necesitaría en este caso? es posible? Gracias de antemano.
Con MySQL también debería
Submitted by Carlos on 11 March, 2014 - 23:43
In reply to Hola. En mi caso, requiero by Anonimo (not verified)
Con MySQL también debería funcionarte. La única diferencia es que tendrás que definir el conector ODBC en el servidor de Oracle apuntando hacia MySQL en lugar de hacia SQL Server.
Saludos, Estoy realizando una
Submitted by Anonimo (not verified) on 29 October, 2014 - 23:16
Saludos,
Estoy realizando una consulta desde oracle a una tabla que esta en sql server, pero mi problema es que me dice en oracle que el tamaño de logitud del nombre de la tabla es muy largo, hay manera de solucionar este problema sin que tenga que tener que cambiar el nombre de la tabla que se encuentra en sql server?
Ejemplo:
SELECT e.name, d.dept
FROM emp e, a1235456789012345678901234567899@hsodbc d
where e.id_dept=d.id_dept;
ORA-00972: identifier is too long
Has probado a crear una vista
Submitted by Carlos on 1 November, 2014 - 09:39
In reply to Saludos, Estoy realizando una by Anonimo (not verified)
Has probado a crear una vista en SQL Server con el nombre de tabla 'corto' y llamarla desde HS?
create view v_a12354567890 as select * from a1235456789012345678901234567899
Puede que también te dé el error, pero la prueba es muy rápida.
Si esto no te sirve, una opción desde Oracle es utilizar el package de PL/SQL DBMS_HS_PASSTHROUGH, que te permite ejecutar sentencias en otras bases de datos y recibir los resultados sin que Oracle interprete nada.
No me preguntes cómo funciona porque no lo he utilizado aún, pero te enlazo la documentación del paquete por si te sirve de ayuda.
Quisiera saber si con solo
Submitted by Inquietud (not verified) on 28 January, 2015 - 00:39
Quisiera saber si con solo poner el ORACLE_HOME funciona o si debo tener alguna libreria en especial. mi BD es ORACLE 11g y la necesito establecer la conexion con un windows server 2008 R2...
gracias
En principio no hace falta
Submitted by Carlos on 30 January, 2015 - 17:22
In reply to Quisiera saber si con solo by Inquietud (not verified)
En principio no hace falta ninguna librería especial para utilizar Oracle heterogeneous services, sólo que existan los objetos del catálogo que dice el post, y seguir todos los pasos de configuración para que puedas utilizar un ODBC para conectar con SQL Server.
Buenas Tardes hay alguna
Submitted by chenaoa on 7 February, 2017 - 22:34
Buenas Tardes hay alguna forma de realizar una conexión desde Oracle a sqlserver sin licenciamiento de Oracle Gateway, o los diferentes driver ODBC licenciados que existen? mi caso es entre una bd Oracle 11.2.0.4 en AIX y una bd sqlserver 2008 r2, los 2 sistemas a 64bits
Puedes conectar desde Oracle
Submitted by Carlos on 10 February, 2017 - 19:29
In reply to Buenas Tardes hay alguna by chenaoa
Puedes conectar desde Oracle con SQL Server utilizando drivers ODBC, que son de libre descarga y utilización, no sé si por licenciados quieres decir de pago o es que te suponen algún otro tipo de problema..
Hola Buenas Tardes Tengo una
Submitted by Anonimo (not verified) on 23 March, 2017 - 20:28
Hola Buenas Tardes Tengo una conexión de oracle a firebird ,pero al realizar un select * from all_tables@DBLINK, no reconoce algunas tablas de firebird ,las cuales las necesito para hacer algunos cruces. Estoy utilizando oracle 10,centos 6. Utilizando oracle 11 en windows funciona correctamente. Gracias