Jefferson Elias

Enlazar un SQL Server a una base de datos Oracle

June 2, 2017 by

Hay algunos casos donde queremos obtener datos de vuelta desde una base de datos externa sin codificación adicional en una aplicación y sólo escribir una consulta T-SQL que hará todo el trabajo por nosotros. Es por eso que Microsoft provee la característica « linked server » (servidor enlazado).

Pero los servidores enlazados, por defecto, no pueden conectarse a una Base de Datos Oracle. Este es el tema que será tratado aquí.

Veremos cómo instalar las librerías mandatorias y herramientas, luego configuraremos la capa de red de la base de datos Oracle (la cual es llamada Oracle Net) para finalmente poder crear el servidor enlazado y consultar la instancia objetivo de la base de datos.

¡Comencemos!

Instalación del Cliente de la Base de Datos Oracle

Primero que todo, pare las instancias de SQL Server corriendo en la computadora en la cual usted instalará. La instalación no fallará si las instancias están corriendo, pero a la primera llamada del Proveedor de Servidor Enlazado, ¡la instancia se colgará y no responderá!

En mi caso, deseo conectarme a una instancia de Base de Datos Oracle 11g. Así que instalaré un cliente de Base de Datos Oracle 11g, pero usted también puede intentar instalar la última versión.

Los archivos fuente pueden ser descargados en el sitio web de Oracle. Están en la forma de un archivo ZIP. Descárguelo, extráigalo y ábralo en la carpeta extractada.

Una vez terminado, sólo haga clic en « setup.exe ».

Esto abrirá el siguiente diálogo. Elija « Custom ».

Elija los idiomas apropiados que su cliente use.

Luego elija la carpeta destino para su instalación. Personalmente, prefiero separarla de la partición del sistema operativo, y sigo la ruta convencional en Oracle como se indica en la página de documentación acerca de Oracle Flexible Architecture (OFA).

Ahora seleccionemos los componentes apropiados.

  • Database Utilities, SQL*Plus and Oracle Call Interface son seleccionados en casos donde uno añadiría un desarrollo externo por cualquier razón. Puede que no sean útiles.

  • Oracle Net es la capa de red de la Base de Datos Oracle. Esto nos permitirá configurar « routes » en un archivo llamado tnsnames.ora.

  • Oracle ODBC Driver, Oracle Provider for OLE DB and Oracle Provider for .NET son seleccionados para permitir el contacto de SQL Server con la Base de Datos Oracle por diferentes medios.

Haciendo clic en el botón « Next », usted tendrá que esperar un poco por verificaciones. Una vez que son exitosas, usted verá la siguiente recapitulación:

Haga clic en « End » y la instalación comienza…

Y está hecho.

Simplemente conectémonos a la nueva instancia de SQL Server y verifiquemos que ve el proveedor recientemente instalado:

Configurar Oracle Net (añadir referencia a una instancia Oracle objetivo)

Localización de los archivos de configuración

Como instalamos el software de Oracle en I:\app\oracle, los archivos de configuración de red estarán localizados en I:\app\oracle\product\11.2.0\client_1\network\admin.

Editar la configuración de Oracle Net (sqlnet.ora)

El archivo sqlnet.ora es el archivo de configuración de perfil. Lo usaremos para priorizar el método de resolución de nombre, para definir el dominio por defecto y un intervalo de tiempo para verificar que la conexión aún está activa.

Dele un vistazo a la siguiente página más información.

Para hacerlo, añada las siguientes líneas en el archivo sqlnet.ora.

Nota importante

Cuando NAMES.DEFAULT_DOMAIN es definido, usted siempre tendrá que usar el nombre TNS. Usted puede removerlo si no está interesado en usarlo.

Un archivo que es muy importante en la configuración es el archivo tnsnames.ora. La definición provista por Oracle para este archivo es la siguiente:

Este archivo tnsnames.ora es un archivo de configuración que contiene nombres de servicios de red mapeados para conectar descriptores para el método de nombramientos local, o nombres de servicios de red mapeados para escuchar direcciones de protocolo.

Aquí está un ejemplo de contenido que será usado para crear el servidor enlazado.

Probar la resolución de nombre

Abra cmd.exe y corra el siguiente comando:

Usted obtendrá un texto similar al siguiente:

Crear un servidor enlazado a una instancia de Base de Datos Oracle

Usando SSMS

La manera más accesible de crear un servidor enlazado es definitivamente vía SQL Server Management Studio. Para hacerlo, conéctese a la instancia SQL Server y encuentre « Server Objects », una vez hecho el clic, usted encontrará « Linked Servers ». Si usted hace clic derecho en eso, usted podrá crear un nuevo servidor enlazado.

Provea la información para una conexión como sigue. Como Fuente de Datos, usted usará el nombre usado en el archivo tnsnames.ora (con o sin nombre de dominio).

En la parte de seguridad de la configuración, dependiendo de la configuración de su ambiente, usted escogerá el método apropiado para usar la autenticación remota.

Usted también puede revisar los ajustes del servidor enlazado para ajustarlos de acuerdo a su ambiente.

Una vez hecho el clic en « OK », el servidor enlazado será creado y añadido a la lista « Linked Servers », como sigue:

Podemos probar el servidor enlazado. Para hacerlo, haga clic derecho en el servidor enlazado y elija « Test connection ».

Si todo está bien configurado, usted obtendrá el siguiente diálogo:

Usted también puede listar las tablas y vistas que puede consultar yendo a través de la vista de árbol:

Finalmente, usted puede correr la siguiente consulta:

Para más información, siga los enlaces a continuación:

Alternativa: mi procedimiento almacenado

Mientras que SSMS es fácil de usar, me gusta la automatización. Esa es la razón por la que desarrollé un procedimiento almacenado que hace exactamente lo mismo, pero en una forma codificada y más rápida.

El procedimiento almacenado se llama [Administration].[CreateStdLinkedServer]. Este procedimiento almacenado sólo trabaja con Oracle Linked Server (Servidor Enlazado Oracle), pero será actualizado en el futuro para manejar todo tipo de servidor enlazado.

Tiene la siguiente interface:

Este procedimiento sólo trabaja cuando @ServerProduct es igual a « Oracle ». Está adjuntado a este artículo y usted lo puede descargar aqui

Aquí está la llamada al procedimiento para nuestro servidor enlazado DBLNK_TEST.

Además…

Si usted quiere migrar/copiar un servidor enlazado desde un servidor a otro, puede que le interese el script Powershell Copy-SqlLinkedServer que está disponible en el proyecto de código libre llamado « dbatools ».

Solución de problemas

A veces, las cosas pueden ir mal. Usted encontrará en esta sección problemas y una manera de enfrentar esos problemas.

  • TNS:could not resolve the connect identifier specified.

¡No se preocupe por ese error, deberíamos tener una solución!

Generalmente, usted puede terminar viendo este error si no edita el archivo tnsnames apropiadamente, como en el ejemplo en la sección “Edit the local list used in name resolution (tnsnames.ora)”. Este error significa que no hay una definición al servidor que desea enlazar.

Le aconsejo revisar las definiciones en su archivo tnsnames.ora y asegurarse que tnsping le da un estado “OK”. Si no, asegúrese de que puede hacer ping a la dirección (IP o DNS) que es referenciada como el anfitrión en la entrada TNS.

Más información en “ORA-12154: TNS: could not resolve the connect identifier specified” error mientras se creaba un servidor enlazado a Oracle.

Recursos útiles

Desarrollo de base de datos SQL

Acerca de Jefferson Elias

Viviendo en Bélgica, obtuve un grado de maestría en Ciencias de la Computación en 2001 en la Universidad de Lieja. Soy uno de los raros tipos que empezó a trabajar como DBA inmediatamente después de su graduación. Así que, trabajo en el hospital de la universidad de Lieja desde 2011. Inicialmente involucrado en la administración de Bases de Datos Oracle (las cuales aún están bajo mi cargo), tuve la oportunidad de aprender y manejar instancias de SQL Server en 2013. Desde 2013, he aprendido mucho acerca de SQL Server en administración y desarrollo. Me gusta el trabajo de DBA porque uno necesita tener un conocimiento general en cada campo de IT. Esa es la razón por la que no pararé de aprender (y compartir) los productos de mis aprendizajes. Ver todas las entradas de Jefferson Elias

582 Views