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

oscar.paredes@dataprix.com

 

 

AdjuntoTamaño
XDAT012006.pdf63.75 KB
 

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.

Contenido relacionado

  • Buen dia..
    Estoy tratando de conectar una BD Oracle con SQLSvr2005.
    Encontre el manual
    http://www.dataprix.com/heterogeneous-services-conexi%C3%B3n-desde-oracl...

    Segui todos los pasos hasta el TnsPing y todos estaban Ok.
    Cree un DBLink llamado SQLtes7 a traves de SQlPlus pero al lanzar una consulta
    para probar el DBLink me envia el siguiente Error:

    SQL> select * from test.Tb_Usuario@sqltest7;
    select * from test.Tb_Usuario@sqltest7

    ERROR en línea 1:
    ORA-28545: error diagnosticado por Net8 al conectar a un agente
    Unable to retrieve text of NETWORK/NCR message 65535
    ORA-02063: 2 lines precediendo a SQLTest7

    El ODBC me envia OK el Test de Conexion.
    Esta es mi configuracion de los archivos.
    Les agradezco su ayuda de antemano

    TNSNAMES.ora

    sqltest7 =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)
    (HOST = Ip_Local_Host )
    (PORT = 1521)
    )
    (CONNECT_DATA = (SID =test7) (Service_name = test7))
    (HS=OK)
    )

    ----------------------------------------------------------------------
    LISTENER.ora

    SID_LIST_LISTENER =
    (SID_LIST =
    ( SID_DESC = (SID_NAME = PLSExtProc)(ORACLE_HOME = D:\OracleBD) (PROGRAM = extproc) )
    ( SID_DESC = (SID_NAME = test7 ) (ORACLE_HOME = D:\OracleBD) (PROGRAM = hsodbc) )
    )

    LISTENER =
    ( DESCRIPTION_LIST =

  • Debido a la gratuidad de esta versión de Oracle suele ser común su uso para instalaciones masivas en múltiples PC's, TPV's...

    Este artículo orientado a DBA's de Oracle y desarrolladores resume brevemente como realizar una instalación desatendida de Oracle XE.

    Esta instalación es tan sencilla como ejecutar el instalador de Oracle XE con los siguientes parámetros:

    > oraclexe /s /f1"fichero_respuesta.iss" /f2"fichero_de_log"

    El primer fichero indica los parámetros básicos de la instalación, y el segundo será el log resultante de la instalación...
     

     

  • Este error de la consola de Oracle 10gR2 con Suse Enterprise (confirmado versión 10) hace que durante la navegación por la consola vayan apareciendo errores en la parte superior con el mensaje:

    java.lang.Exception: Failed to get Number of users 

    La solución que puede aplicar el DBA de Oracle pasa por realizar los siguientes pasos:

    1) Parar la consola de Oracle:

        ....

  • El error ORA-1031 - Insuficient Privileges es uno de los errores más comunes que se puede en contrar un DBA de Oracle durante la conexión como SYSDBA a entornos Windows no administrados de manera cotidiana.

    Además tiene la característica de que siempre aparece cuando más puede molestar ;-)...

     

  • 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. Para ello es necesario, con un usuario que posea el privilegio CREATE DATABASE LINK, crear el DBLINK en la base de datos origen (A) mediante una sencilla sentencia..

 

 

 

Gestion del Conocimiento    |    Business Intelligence y Analítica    |     Bases de Datos    |      ERP     |      CRM      |     Tendencias tecnológicas