Configuración y solución de problemas de un servidor vinculado a una base de datos de Oracle en SQL Server
En este artículo se describe cómo configurar un servidor vinculado desde un equipo que ejecuta Microsoft SQL Server en una base de datos de Oracle y se proporcionan pasos básicos para solucionar problemas de errores comunes que puede experimentar al configurar un servidor vinculado en una base de datos de Oracle.
Versión original del producto: Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Workgroup Edition
Número de KB original: 280106
Resumen
En este artículo se describe cómo configurar un servidor vinculado desde un equipo que ejecuta Microsoft SQL Server en una base de datos de Oracle y se proporcionan pasos básicos para solucionar problemas de errores comunes que puede experimentar al configurar un servidor vinculado en Oracle. La mayoría de la información de este artículo es aplicable a entornos configurados para usar el proveedor OLEDB de Microsoft para Oracle (MSDAORA). Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. En su lugar, use el proveedor OLE DB de Oracle.
Para obtener más información sobre cómo configurar un servidor vinculado mediante el proveedor OLEDB de Oracle, consulte Cómo ponerse en marcha con Oracle y servidores vinculados.
Importante
La versión actual de Microsoft ODBC Driver for Oracle cumple con la especificación ODBC 2.5, mientras que el proveedor OLE DB para Oracle es un proveedor nativo de API de OCI de Oracle 7. Tanto el controlador como el proveedor usan el cliente SQL*Net (o el cliente Net8 para Oracle 8x) y la biblioteca oracle Call Interface (OCI) y otros componentes cliente de Oracle, para conectarse a bases de datos de Oracle y recuperar datos. Los componentes de cliente de Oracle son importantes y deben configurarse correctamente para conectarse correctamente a las bases de datos de Oracle mediante el controlador y el proveedor.
En microsoft Data Access Components (MDAC) versión 2.5 y versiones posteriores, tanto microsoft ODBC Driver como proveedor OLE DB solo admiten Oracle 7 y Oracle 8i con las siguientes limitaciones:
No se admiten los tipos de datos específicos de Oracle 8.x, como CLOB, BLOB, BFILE, NCHAR, NCLOB y NVARCHAR2.
No se admite la característica Unicode en servidores Oracle 7.x y 8.x.
No se admiten varias instancias de cliente de Oracle o varios hogares de Oracle porque se basan en la primera aparición de Oracle home en la variable SYSTEM PATH.
No se admite la devolución de varios conjuntos de resultados de un procedimiento almacenado o una instrucción SQL por lotes mediante ADO o OLEDB.
No se admiten combinaciones externas anidadas.
No se admite la persistencia XML.
No se admite la versión superior a 8i mediante estos controladores.
Nota:
Los productos de otros fabricantes mencionados en este artículo son fabricados por compañías que no dependen de Microsoft. Microsoft no ofrece ninguna garantía, implícita o de otro tipo, respecto al rendimiento o la confiabilidad de estos productos.
Pasos para configurar un servidor vinculado en Oracle
Debe instalar el software cliente de Oracle en el equipo que ejecuta SQL Server donde está configurado el servidor vinculado.
Instale el controlador que desee en el equipo que ejecuta SQL Server. Microsoft solo admite Proveedor OLE DB de Microsoft para Oracle y Microsoft ODBC Driver for Oracle. Si usa un proveedor de terceros o un controlador de terceros para conectarse a Oracle, debe ponerse en contacto con el proveedor correspondiente para cualquier problema que pueda experimentar mediante su proveedor o controlador.
Si usa Proveedor OLE DB de Microsoft para Oracle y Microsoft ODBC Driver for Oracle, tenga en cuenta lo siguiente:
Tanto el proveedor OLE DB como el controlador ODBC que se incluyen con microsoft Data Access Components (MDAC) requieren SQL*Net 2.3.x o una versión posterior. Debe instalar el software cliente oracle 7.3.x o una versión posterior en el equipo cliente. El equipo cliente es el equipo que ejecuta SQL Server.
Asegúrese de que tiene MDAC 2.5 o una versión posterior instalada en el equipo que ejecuta SQL Server. Con MDAC 2.1 o con una versión anterior, no puede conectarse a bases de datos que usan Oracle 8. x o una versión posterior.
Para habilitar MDAC 2.5 o versiones posteriores para trabajar con software cliente de Oracle, el registro debe modificarse en el equipo cliente que ejecuta SQL Server, tal como se indica en la tabla siguiente.
Oracle Client Microsoft Windows 2000 and later versions -------------------------------------------------------------------------- 7.x [HKEY_LOCAL_MACHINE\SOFTWARE Microsoft\MSDTC\MTxOCI] "OracleXaLib"="xa73.dll" "OracleSqlLib"="SQLLib18.dll" "OracleOciLib"="ociw32.dll" 8.0 [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\MSDTC\MTxOCI] "OracleXaLib"="xa80.dll" "OracleSqlLib"="sqllib80.dll" "OracleOciLib"="oci.dll" 8.1 [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\MSDTC\MTxOCI] "OracleXaLib"="oraclient8.dll" "OracleSqlLib"="orasql8.dll" "OracleOciLib"="oci.dll"
Reinicie el equipo que ejecuta SQL Server después de instalar el software cliente de Oracle.
En el equipo que ejecuta SQL Server, configure un servidor vinculado mediante el siguiente script.
-- Adding linked server (from SQL Server Books Online): /* sp_addlinkedserver [@server =] 'server'[, [@srvproduct =] 'product_name'] [, [@provider =] 'provider_name'] [, [@datasrc =] 'data_source'] [, [@location =] 'location'] [, [@provstr =] 'provider_string'] [, [@catalog =] 'catalog'] */ EXEC sp_addlinkedserver 'Ora817Link', 'Oracle', 'MSDAORA', 'oracle817' -- Adding linked server login: /* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname'[,[@useself =] 'useself'] [,[@locallogin =] 'locallogin'] [,[@rmtuser =] 'rmtuser'] [,[@rmtpassword =] 'rmtpassword'] */ EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger' -- Help on the linked server: EXEC sp_linkedservers EXEC sp_helpserver select * from sysservers
Nota:
Si usa Microsoft ODBC Driver for Oracle, puede usar el
@datasrc
parámetro para especificar un nombre de DSN. Para una conexión sin DSN, la cadena del proveedor se proporciona a través del parámetro @provstr . Con Proveedor OLE DB de Microsoft para Oracle, use el alias de servidor de Oracle configurado en el archivo TNSNames.Ora para el parámetro @datasrc. Para obtener más información, vea el tema "sp_addlinkedserver" en los Libros en pantalla de SQL Server.
Mensajes de error comunes y cómo solucionarlos
Importante
Esta sección, método o tarea contiene pasos que le indican cómo modificar el Registro. No obstante, pueden producirse problemas graves si modifica el registro de manera incorrecta. Por lo tanto, asegúrese de que sigue estos pasos con atención. Para la protección añadida, realice una copia de seguridad del Registro antes de modificarlo. A continuación, puede restaurar el Registro si se produce un problema. Para obtener más información sobre cómo realizar copias de seguridad y restaurar el registro, haga clic en el siguiente número de artículo para ver el artículo de Microsoft Knowledge Base: 322756 Cómo realizar copias de seguridad y restaurar el registro en Windows.
Puede usar cualquiera de los dos métodos siguientes para recuperar información extendida sobre cualquier error que experimente al ejecutar una consulta distribuida.
Método 1
Conéctese a SQL Server mediante SQL Server Management Studio y ejecute el código siguiente para activar la marca de seguimiento 7300.
DBCC Traceon(7300)
Método 2
Capture el evento "Errores de OLEDB" que se encuentra en la categoría de eventos "Errores y advertencias" en SQL Profiler. El formato del mensaje de error es el siguiente:
Interface::Method failed with hex-error code.
Puede buscar código hexadecimal en el archivo Oledberr.h que se incluye con el Kit de desarrollo de software (SDK) MDAC.
A continuación se muestra una lista de mensajes de error comunes que pueden producirse, junto con información sobre cómo solucionar el mensaje de error.
Nota:
Si usa SQL Server 2005 o versiones posteriores, estos mensajes de error pueden ser ligeramente diferentes. Sin embargo, los identificadores de error de estos mensajes de error son los mismos que en versiones anteriores de SQL Server. Por lo tanto, puede identificarlos mediante los identificadores de error. Para problemas relacionados con el rendimiento, busque en los Libros en pantalla de SQL Server para el tema Optimización de consultas distribuidas.
Mensaje 1
Error 7399: El proveedor OLE DB "%ls" del servidor vinculado "%ls" notificó un error. %ls
Active la marca de seguimiento 7300 o use SQL Profiler para capturar el evento errores OLEDB para recuperar la información de error de OLEDB extendida.
Mensaje 2a
"ORA-12154: TNS:could not resolve service name"
Mensaje 2b
"No se encontraron los componentes de red y cliente de Oracle(tm). Estos componentes son suministrados por Oracle Corporation y forman parte de la instalación de software cliente oracle versión 7.3.3 (o posterior) "
Estos errores se producen cuando hay un problema de conectividad con el servidor oracle. Consulte las técnicas para solucionar problemas de conectividad con el servidor de Oracle a continuación para obtener más solución de problemas.
Mensaje 3
Error 7302: No se puede crear una instancia del proveedor OLE DB "MSDAORA" para el servidor vinculado "%ls".
Asegúrese de que el archivo MSDAORA.dll está registrado correctamente. (El archivo MSDAORA.dll es el proveedor OLE DB de Microsoft para el archivo Oracle). Use RegSvr32.exe para registrar Proveedor OLE DB de Microsoft para Oracle.
Nota:
Si usa un proveedor de Oracle de terceros y el proveedor de Oracle no se puede ejecutar fuera de un proceso de SQL Server, habilite para ejecutarlo en proceso cambiando las opciones del proveedor. Para cambiar las opciones del proveedor, use uno de los métodos siguientes:
Método 1 Busque la siguiente clave del Registro. A continuación, cambie el valor de la entrada AllowInProcess (DWORD) a 1. Esta clave del Registro se encuentra bajo el nombre de proveedor correspondiente:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName
.Método 2 Siga estos pasos para establecer la opción Permitir inprocesamiento para proveedores mediante SQL Server Management Studio (SSMS).
- Abra SSMS y conéctese a la instancia de SQL Server.
- En Explorador de objetos, vaya a Proveedores de servidores vinculados de objetos>de servidor>.
- Haga clic con el botón derecho en el proveedor que desea configurar y seleccione Propiedades.
- En la ventana Opciones de proveedor, active la casilla Habilitar para la opción Permitir inprocesamiento .
Mensaje 4
Error 7303: No se puede inicializar el objeto de origen de datos del proveedor OLE DB "MSDAORA" para el servidor vinculado "%ls". [Mensaje devuelto por el proveedor OLE/DB: ORA-01017: nombre de usuario/contraseña no válido; inicio de sesión denegado] Seguimiento de errores de OLE DB [proveedor OLE/DB 'MSDAORA' IDBInitialize::Initialize devuelto 0x80040e4d].
Este mensaje de error indica que el servidor vinculado no tiene una asignación de inicio de sesión correcta. Puede ejecutar el
sp_helplinkedsrvlogin
procedimiento almacenado para establecer la información de inicio de sesión correctamente. Además, compruebe que ha especificado los parámetros correctos para la configuración del servidor vinculado.Mensaje 5
Error 7306: No se puede abrir la tabla ' %ls' del proveedor OLE DB 'MSDAORA' para el servidor vinculado "%ls". La tabla especificada no existe. [Mensaje devuelto por el proveedor OLE/DB: La tabla no existe.][Mensaje devuelto por el proveedor OLE/DB: ORA-00942: la tabla o vista no existe] Seguimiento de errores de OLE DB [PROVEEDOR OLE/DB 'MSDAORA' IOpenRowset::OpenRowset devuelto 0x80040e37: La tabla especificada no existe.].
Error 7312: Uso no válido del esquema o catálogo para el proveedor OLE DB '%ls' para el servidor vinculado "%ls". Se proporcionó un nombre de cuatro partes, pero el proveedor no expone las interfaces necesarias para usar un catálogo o un esquema.
Error 7313: se especificó un esquema o catálogo no válidos para el proveedor "%ls" para el servidor vinculado "%ls".
Error 7314: El proveedor OLE DB "%ls" para el servidor vinculado "%ls" no contiene la tabla "%ls". O bien no existe la tabla o bien el usuario actual no tiene permisos en la tabla.
Si recibe estos mensajes de error, es posible que falte una tabla en el esquema de Oracle o que no tenga permisos en esa tabla. Compruebe que el nombre del esquema se ha escrito con mayúsculas. El caso alfabético de la tabla y de las columnas debe ser como se especifica en las tablas del sistema de Oracle.
En el lado de Oracle, se almacena una tabla o una columna que se crea sin comillas dobles en mayúsculas. Si la tabla o la columna se incluyen entre comillas dobles, la tabla o la columna se almacenan tal como está.
La siguiente llamada muestra si la tabla existe en el esquema de Oracle. Esta llamada también muestra el nombre exacto de la tabla.
sp_tables_ex @table_server=Ora817Link, @table_schema='your_schema_name'
Mensaje 6
Error 7413: No se pudo conectar al servidor vinculado '%ls' (proveedor OLE DB '%ls'). Habilite la función de delegación o utilice un inicio de sesión remoto de SQL Server para el usuario actual. Msg 18456, Level 14, State 1, Line 1 Login failed for user ''.
Este mensaje de error indica que se está intentando realizar una consulta distribuida para un inicio de sesión autenticado de Microsoft Windows sin una asignación de inicio de sesión explícita. En un entorno de sistema operativo en el que no se admite la delegación de seguridad, los inicios de sesión autenticados de Windows NT necesitan una asignación explícita a un inicio de sesión remoto y una contraseña creados mediante
sp_addlinkedsrvlogin
.Mensaje 7
Error 7391: No se pudo realizar la operación porque el proveedor OLE DB 'MSDAORA' para el servidor vinculado "%ls" no pudo iniciar una transacción distribuida. Seguimiento de errores de OLE DB [proveedor OLE/DB 'MSDAORA' ITransactionJoin::JoinTransaction devuelto 0x8004d01b]
Compruebe que las versiones de OCI están registradas correctamente como se describió anteriormente en este artículo.
Nota:
Si las entradas del Registro son correctas, se carga el archivo MtxOCI.dll. Si no se carga el archivo MtxOCI.dll, no puede realizar transacciones distribuidas en Oracle mediante Proveedor OLE DB de Microsoft para Oracle o mediante Microsoft ODBC Driver for Oracle. Si usa un proveedor de terceros y recibe el error 7391, compruebe que el proveedor OLE DB que usa admite transacciones distribuidas. Si el proveedor OLE DB admite transacciones distribuidas, compruebe que el Coordinador de transacciones distribuidas de Microsoft (MSDTC) se está ejecutando y tenga habilitado el acceso a la red.
Mensaje 8
Error 7392: No se puede iniciar una transacción para el proveedor OLE DB "MSDAORA" para el servidor vinculado "%ls". Seguimiento de errores de OLE DB [PROVEEDOR OLE/DB 'MSDAORA' ITransactionLocal::StartTransaction devuelto 0x8004d013: ISOLEVEL=4096].
El proveedor OLE DB devolvió el error 7392 porque solo una transacción puede estar activa para esta sesión. Este error indica que se está intentando realizar una instrucción de modificación de datos en un proveedor OLE DB cuando la conexión está en una transacción explícita o implícita y el proveedor OLE DB no admite transacciones anidadas. SQL Server requiere esta compatibilidad para que, en determinadas condiciones de error, pueda finalizar los efectos de la instrucción de modificación de datos mientras continúa con la transacción.
Si
SET XACT_ABORT
está activado, SQL Server no requiere compatibilidad con transacciones anidadas del proveedor OLE DB. Por lo tanto, ejecute antes de ejecutarSET XACT_ABORT ON
instrucciones de modificación de datos en tablas remotas en una transacción implícita o explícita. Haga esto en caso de que el proveedor OLE DB que use no admita transacciones anidadas.
Técnicas para solucionar problemas de conectividad con el servidor oracle
Para depurar los problemas de conectividad de Oracle con el controlador ODBC de Microsoft para Oracle o el Proveedor OLE DB de Microsoft para Oracle, siga estos pasos:
Use la utilidad Oracle SQL Plus (una utilidad de consulta basada en la línea de comandos) para comprobar que puede conectarse a Oracle y recuperar datos.
Nota:
Si no puede conectarse a Oracle y recuperar datos, tiene una instalación incorrecta o una configuración de los componentes de cliente de Oracle o no ha creado correctamente un alias de servicio de Sustrato de red transparente (TNS) para el servidor oracle cuando usó la utilidad SQL*Net Easy Configuration o Oracle Net8 Easy Configuration. Póngase en contacto con el administrador de bases de datos de Oracle (DBA) para comprobar que los componentes de Oracle que debe tener instalados y configurados correctamente.
Compruebe la versión del cliente de Oracle (versión SQL*Net) instalada en el equipo. Tanto el controlador ODBC de Microsoft para Oracle como el Proveedor OLE DB de Microsoft para Oracle requieren la instalación de SQL*Net versión 2.3 o posterior en el equipo cliente.
La conectividad de SQL Plus (la herramienta de consulta de cliente de Oracle) puede parecer funcionar, pero debe reiniciar el equipo para que la conectividad ODBC/OLE DB funcione correctamente.
Nota:
Cuando se usa Oracle 8i, el archivo .rgs está vacío.
Si el cliente de Oracle está instalado y recibe un error que indica que Oracle Client Components 7.3 o posterior debe instalarse en el equipo, compruebe que la variable de entorno PATH en el equipo cliente contiene la carpeta en la que se instaló el cliente de Oracle, como, por ejemplo, Oracle_Root\Bin. Si no encuentra esta carpeta, agregue la carpeta a la variable PATH para resolver el error.
Compruebe que el archivo Ociw32.dll está en la carpeta Oracle_Root\bin . Este archivo .dll no puede existir en ninguna otra ubicación del equipo cliente. Asegúrese de que los archivos DLL del componente de cliente de Oracle (por ejemplo, el archivo Core40.dll y el archivo Ora*.dll) no existen fuera de la carpeta o subcarpeta Oracle_Root .
Compruebe que hay instalada una única versión de cliente de Oracle en el equipo. No pueden existir varias versiones de SQL*Net en el mismo equipo cliente con interferencias y con operaciones críticas (por ejemplo, TNS y búsquedas de alias).
Microsoft recomienda tener una instalación local del cliente de Oracle y no hacerlo mediante la asignación de un cliente remoto de Oracle en el equipo y, a continuación, incluirlo en la ruta de acceso del sistema para conectarse a Oracle a través de ODBC/OLE DB. Pero el proveedor y el controlador se prueban con un cliente oracle instalado localmente y no en un recurso compartido de red.