Heterogeneous Services: Conexión desde Oracle a SQLServer - DBA Oracle
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
| Adjunto | Tamaño |
|---|---|
| XDAT012006.pdf | 63.75 KB |
- Oscar_Paredes's blog
- Versión para impresión
- Inicie sesión o regístrese para enviar comentarios
- 44322 lecturas
-

Contenido relacionado
-
Per accedir des d'una base de dades Oracle a objectes d'una altra base de dades Oracle la manera més senzilla és utilitzar un DBLINK (que sigui la més senzilla no significa que sempre sigui la més aconsellable, l'ab...
-
Para acceder desde una base de datos Oracle a objetos de otra base de datos Oracle la manera más sencilla es utilizar un DBLink (que sea la más sencilla no significa que siempre sea la más aconsejable, el abuso de los dblinks puede...
-
The easiest way to access from an Oracle database objects from another Oracle database is using a DBLINK (being the easiest does not mean that it is always the most desirable, the abuse of DBLINKS can create many problems, both of performance and safety) To...

Conexión desde Oracle a MySQL
Este método sirve para cualquier base de datos? Se puede utilizar también con MySQL?
Si que se puede...
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,
Alguien sabe como enlazar
Alguien sabe como enlazar una base de datos en SQL SERVER con una de ORACLE.
Versiones
Sirve este sistema también para SQL Server 2005??
SQL Server 2005
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
Conectar SQL Server contra Oracle
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,
HOLA sobre............"eje
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
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.
Como conectar a distintis ODBC
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
Conexion Oracle_Access
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
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
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
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
fichero TNSNAMES.ORA
Hola.
Tengo el servidor sqlserver 2008 en windows 7 y el servidor oracle XE 10gen ubuntu linux 10.10
Mi pregunta es:Si quiero obtener datos de sqlserver desde oracle,A la hora de configurar el fichero tnsnames.ora.
en el apartado (HOST=SERVER_IP) debo copiar la direccion ip del servidor oracle o la del sql server ya que los tengo en distintas maquinas, siendo el uno o el otro tambien influye en el (PORT:)por que el oracle escucha en el 1521, y el
sql server en el 1433.
Gracias
Saludos.