Compartir a través de


Solución de problemas de publicadores de Oracle

En este tema se enumeran varios problemas que pueden surgir al configurar y usar un publicador de Oracle.

Se genera un error con respecto al software de cliente y redes de Oracle

La cuenta con la que se ejecuta Microsoft SQL Server en el distribuidor debe tener permisos de lectura y ejecución para el directorio (y todos los subdirectorios) en el que está instalado el software de red de cliente de Oracle. Si no se conceden los permisos o los componentes de cliente de Oracle no están instalados correctamente, recibirá el siguiente mensaje de error:

"Error de conexión al servidor con [Proveedor OLE DB de Microsoft para Oracle]. No se encontraron componentes de cliente y redes de Oracle. Oracle Corporation proporciona estos componentes y forman parte de la instalación de software cliente oracle versión 7.3.3 o posterior. El proveedor no puede funcionar hasta que se instalen estos componentes".

Si se ha instalado un cliente de Oracle adecuado en el distribuidor, asegúrese de que SQL Server se detuvo y, a continuación, se reinició una vez completada la instalación del cliente. Esto es necesario para que SQL Server reconozca los componentes del cliente.

Si ha comprobado que se conceden permisos y que los componentes están instalados correctamente, pero este error persiste, compruebe que la configuración del Registro en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI sea correcta:

  • Para Oracle 10g, la configuración correcta es

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql10.dll

    • OracleXaLib = oraclient10.dll

  • Para Oracle 9i, la configuración correcta es

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql9.dll

    • OracleXaLib = oraclient9.dll

El distribuidor de SQL Server no se puede conectar a la instancia de base de datos de Oracle

Si el distribuidor de SQL Server no puede conectarse al publicador de Oracle, asegúrese de que:

  • El software de Oracle necesario se instala en el distribuidor.

  • La base de datos de Oracle está en línea y puede conectarse a ella mediante una herramienta como SQL*Plus.

  • La replicación de inicio de sesión utilizada para conectarse al editor de Oracle tiene permisos suficientes. Para obtener más información, consulte Configuración de un publicador de Oracle.

  • Los nombres de TNS definidos durante la configuración del publicador de Oracle se muestran en el archivo tnsnames.ora.

  • Se usan el inicio y la ruta de acceso correctos de Oracle. Incluso si solo tiene un conjunto de archivos binarios de Oracle instalados en el distribuidor de SQL Server, asegúrese de que las variables de entorno relacionadas con Oracle Home estén configuradas correctamente. Si cambia los valores de las variables de entorno, debe detener y reiniciar SQL Server para que el cambio surta efecto.

Para obtener más información sobre cómo configurar y probar la conectividad, vea "Instalación y configuración del software de redes de cliente de Oracle en el distribuidor de SQL Server" en Configuración de un publicador de Oracle.

El publicador de Oracle está asociado a otro distribuidor

Un publicador de Oracle solo se puede asociar a un distribuidor de SQL Server. Si un distribuidor diferente está asociado al publicador de Oracle, debe quitarse antes de que se pueda usar otro distribuidor. Si el Distribuidor no se ha deshabilitado primero, recibirá uno de los siguientes mensajes de error:

  • "La instancia de servidor de Oracle "<OraclePublisherName>" se ha configurado previamente para usar "<SQLServerDistributorName>" como distribuidor. Para empezar a usar "<NewSQLServerDistributorName>" como distribuidor, debe quitar la configuración de replicación actual en la instancia del servidor de Oracle, que eliminará todas las publicaciones de esa instancia del servidor".

  • "El servidor de Oracle "<OracleServerName>" ya está definido como publicador "<OraclePublisherName>" en el distribuidor "<SQLServerDistributorName>".<DistributionDatabaseName>'. Elimine el editor o elimine el sinónimo público '<SynonymName>' para recrearlo.

Cuando se elimina un Publisher de Oracle, los objetos de replicación en la base de datos de Oracle se eliminan automáticamente. Sin embargo, la limpieza manual de los objetos de replicación de Oracle es necesaria en algunos casos. Para limpiar manualmente los objetos de replicación de Oracle creados por la replicación:

  1. Conéctese al publicador de Oracle con permisos DBA.

  2. Emita el comando SQL DROP PUBLIC SYNONYM MSSQLSERVERDISTRIBUTOR;.

  3. Emita el comando SQL DROP USER <replication_administrative_user_schema>``CASCADE;.

Se genera el error 21663 de SQL Server con respecto a la falta de una clave principal

Los artículos de publicaciones transaccionales deben tener una clave principal válida. Si no tienen una clave principal válida, recibirá el siguiente mensaje de error al intentar agregar un artículo:

"No se encontró ninguna clave principal válida para la tabla de origen [<TableOwner>].[<TableName>]"

Para obtener información sobre los requisitos de las claves principales, vea la sección "Índices y restricciones únicos" en el tema Consideraciones de diseño y limitaciones para publicadores de Oracle.

Se genera el error 21642 de SQL Server relacionado con un inicio de sesión duplicado de servidor enlazado

Cuando se configura inicialmente un publicador de Oracle, se crea una entrada de servidor vinculado para la conexión entre el publicador y el distribuidor. El servidor vinculado tiene el mismo nombre que el nombre del servicio de TNS de Oracle. Si intenta crear un servidor vinculado con el mismo nombre, se muestra el siguiente mensaje de error:

"Los publicadores heterogéneos requieren un servidor vinculado. Ya existe un servidor vinculado denominado "<LinkedServerName>". Quite el servidor vinculado o elija otro nombre de publicador".

Este error puede producirse si intenta crear el servidor vinculado directamente o si ha quitado previamente la relación entre el publicador de Oracle y el distribuidor de SQL Server y ahora está intentando volver a configurarlo. Si recibe este error al intentar volver a configurar el publicador, quite el servidor vinculado con sp_dropserver (Transact-SQL).

Si necesita conectarse al publicador de Oracle a través de una conexión de servidor vinculado, cree otro nombre de servicio TNS y, a continuación, use este nombre al llamar a sp_addlinkedserver (Transact-SQL). Para obtener información sobre cómo crear nombres de servicio de TNS, consulte la documentación de Oracle.

Se genera el error 21617 de SQL Server

La publicación de Oracle usa la aplicación Oracle SQL*PLUS para descargar el paquete de código de soporte del publicador en la base de datos de Oracle. Antes de intentar configurar el publicador de Oracle, SQL Server comprueba que SQL*PLUS es accesible a través de la ruta de acceso del sistema en el distribuidor. Si SQL*PLUS no se puede cargar, se muestra el siguiente mensaje de error:

"No se puede ejecutar SQL*PLUS. Asegúrese de que se instala una versión actual del código de cliente de Oracle en el distribuidor".

Intente localizar SQL*PLUS en el distribuidor. Para una instalación de cliente de Oracle 10g, el nombre de este archivo ejecutable es sqlplus.exe. Normalmente se instala en %ORACLE_HOME%/bin. Para comprobar que la ruta de acceso de SQL*PLUS aparece en la ruta del sistema, examine el valor de la variable del sistema Path:

  1. Haga clic con el botón secundario en Mi PCy, a continuación, haga clic en Propiedades.

  2. Haga clic en la pestaña Opciones avanzadas y, a continuación, haga clic en Variables de entorno.

  3. En el cuadro de diálogo Variables de entorno , en la lista Variables del sistema , seleccione la variable Path y, a continuación, haga clic en Editar.

  4. En el cuadro de diálogo Editar variable del sistema : si la ruta de acceso a la carpeta que contiene sqlplus.exe no está presente en el cuadro de texto Valor variable , edite la cadena para incluirla.

  5. Haga clic en Aceptar en cada cuadro de diálogo abierto para salir y guardar los cambios.

Si no puede encontrar sqlplus.exe en el distribuidor, instale una versión actual del software cliente de Oracle en el distribuidor. Para obtener más información, consulte Configuración de un publicador de Oracle.

Se genera el error 21620 de SQL Server

Si se conecta a una base de datos de Oracle anterior a la versión 8.1, la publicación de Oracle requiere que el software cliente de Oracle instalado en el distribuidor sea de la versión 9. Si se conecta a una base de datos de Oracle que es la versión 8.1 o posterior, se recomienda que el software cliente de Oracle sea la versión 10 o posterior.

Antes de intentar configurar Oracle Publisher, la publicación de Oracle verifica que la versión de SQL*PLUS accesible mediante la ruta del sistema en el Distribuidor sea la versión 9 o posterior. Si no es así, se muestra el siguiente mensaje de error:

"La versión de SQL*PLUS a la que se puede acceder a través de la variable Path del sistema no es lo suficientemente actual como para admitir la publicación de Oracle. Asegúrese de que se instala una versión actual del código de cliente de Oracle en el distribuidor".

Si tiene varias versiones del software cliente de Oracle instaladas en el distribuidor, asegúrese de que la versión más reciente sea al menos la versión 9 y que la variable de ruta de acceso del sistema haga referencia primero a esta versión (las referencias a otras versiones pueden aparecer siempre que la más reciente aparezca primero). Para obtener más información sobre cómo editar la variable de ruta del sistema, vea la sección "Error 21617 de SQL Server se produce" anteriormente en este tema.

Se produce el error 21624 o el error 21629 de SQL Server

Para distribuidores de 64 bits, Oracle publica utilizando el proveedor OLEDB de Oracle para Oracle (OraOLEDB.Oracle). Asegúrese de que el proveedor OLEDB de Oracle está instalado y registrado en el distribuidor. Si el proveedor no está instalado y registrado, se muestra uno o ambos de los siguientes mensajes de error:

  • "No se puede encontrar el proveedor OLEDB de Oracle registrado, OraOLEDB.Oracle, en el distribuidor "%s". Asegúrese de que la versión actual del proveedor OLEDB de Oracle está instalada y registrada en el distribuidor".

  • "La clave del Registro CLSID que indica que el proveedor OLEDB de Oracle para Oracle, OraOLEDB.Oracle, no está presente en el distribuidor. Asegúrese de que el proveedor OLEDB de Oracle está instalado y registrado en el distribuidor".

Si usa la versión 10g del software cliente de Oracle, el proveedor es OraOLEDB10.dll; para la versión 9i, es OraOLEDB.dll. El proveedor se instala en %ORACLE_HOME%\BIN (por ejemplo, C:\oracle\product\10.1.0\Client_1\bin). Si determina que el proveedor OLEDB de Oracle no está instalado en el distribuidor, instálelo desde el disco de instalación de software cliente de Oracle proporcionado por Oracle. Para obtener más información, consulte Configuración de un publicador de Oracle.

Si el proveedor OLEDB de Oracle está instalado, asegúrese de que está registrado. Para registrar el archivo DLL del proveedor, ejecute el siguiente comando desde el directorio en el que está instalado el archivo DLL y, a continuación, detenga y reinicie la instancia de SQL Server:

  1. regsvr32 OraOLEDB10.dll o regsvr32 OraOLEDB.dll.

Se produce el error 21626 o el error 21627 de SQL Server

Para comprobar que el entorno de publicación de Oracle está configurado correctamente, SQL Server intenta conectarse al publicador de Oracle con las credenciales de inicio de sesión que especificó durante la configuración. Si el distribuidor de SQL Server no puede conectarse al publicador de Oracle, se muestra el siguiente mensaje de error:

  • "No se puede conectar al servidor de bases de datos de Oracle "%s" mediante el proveedor OLEDB de Oracle OraOLEDB.Oracle".

Si se muestra este mensaje de error, compruebe la conectividad con la base de datos de Oracle ejecutando SQL*PLUS directamente con el mismo inicio de sesión y contraseña especificado durante la configuración del publicador de Oracle. Para obtener más información, vea la sección "El distribuidor de SQL Server no se puede conectar a la instancia de base de datos de Oracle" anteriormente en este tema.

Se genera el error 21628 de SQL Server

Para distribuidores de 64 bits, la publicación de Oracle usa el proveedor OLEDB de Oracle para Oracle (OraOLEDB.Oracle). SQL Server crea una entrada del Registro para permitir que el proveedor de Oracle se ejecute en proceso con SQL Server. Si hay un problema al leer o escribir esta entrada del Registro, se muestra el siguiente mensaje de error:

"No se puede actualizar el registro del distribuidor "%s" para permitir que el proveedor OLEDB de Oracle OraOLEDB.Oracle se ejecute en proceso con SQL Server. Asegúrese de que el inicio de sesión actual está autorizado para modificar las claves del Registro propiedad de SQL Server".

La publicación de Oracle requiere que exista la entrada del Registro y que se establezca en 1 para distribuidores de 64 bits. Si la entrada no existe, SQL Server intentará crearla. Si la entrada existe, pero está establecida en 0, no se cambiará la configuración; Se producirá un error en la configuración del publicador de Oracle.

Para ver y modificar la configuración del Registro:

  1. Haga clic en Inicio y luego en Ejecutar.

  2. En el cuadro de diálogo Ejecutar , escriba regedit y, a continuación, haga clic en Aceptar.

  3. Vaya a HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<NombreDeInstancia>\Proveedores.

    Debe incluirse una carpeta denominada OraOLEDB.Oracle bajo Proveedores. Dentro de esta carpeta debe estar el nombre de valor DWORD AllowInProcess, con un valor de 1.

  4. Si determina que AllowInProcess está establecido en 0, actualice la entrada del Registro a 1:

    1. Haga clic con el botón derecho en la entrada y, a continuación, haga clic en Modificar.

    2. En el cuadro de diálogo Editar cadena, escriba 1 en el campo Valor de datos.

Se genera el error 21684 de SQL Server

Si la cuenta de usuario administrativa no tiene privilegios suficientes, se muestra el siguiente mensaje de error:

"Los permisos asociados al inicio de sesión de administrador para el publicador de Oracle "%s" no son suficientes".

Para comprobar los permisos concedidos al usuario, ejecute la consulta siguiente: SELECT * from session_privs. La salida debe ser similar a la siguiente:

PRIVILEGE

------------------

CREATE SESSION

CREATE TABLE

CREATE PUBLIC SYNONYM

DROP PUBLIC SYNONYM

CREATE VIEW

CREATE SEQUENCE

CREATE PROCEDURE

CREATE TRIGGER

Te encuentras con problemas de permisos para el esquema de usuario de réplica.

El esquema de usuario de replicación debe tener los permisos descritos en "Crear manualmente el esquema de usuario" en Configurar un publicador de Oracle.

Oracle Error ORA-01000

La replicación usa cursores en el publicador de Oracle durante el proceso de agregar artículos a una publicación. Es posible superar el número máximo de cursores disponibles en el publicador durante este proceso. Si esto ocurre, se produce el siguiente error:

"ORA-01000: se han superado los cursores abiertos máximos"

Para evitar este problema, asegúrese de que la configuración de max_open_cursors en las bases de datos de Oracle esté establecida en un número lo suficientemente alto (al menos 1000). Para obtener más información sobre esta configuración, consulte la documentación de Oracle.

Oracle Error ORA-01555

El siguiente error de base de datos de Oracle no está relacionado con la replicación de instantáneas; está relacionado con la forma en que Oracle construye vistas coherentes con la lectura de los datos:

"ORA-01555: Instantánea demasiado antigua"

Con objetos conocidos como segmentos de reversión, Oracle construye vistas consistentes para la lectura de los datos desde el momento en que se emite una instrucción SQL. Es posible que se produzca un error de "instantánea demasiado antigua" cuando otras sesiones simultáneas sobrescriben la información de reversión. Antes de Oracle 9i, el método recomendado para reducir la frecuencia de este error era aumentar el tamaño o el número de segmentos de reversión y asignar transacciones grandes a un segmento de reversión específico.

En Oracle 9i, Oracle introdujo el concepto de espacio de tablas UNDO, que reemplaza el segmento de reversión. Para evitar el error de "instantánea demasiado antigua" en Oracle 9i, se recomienda que:

  • Cree un espacio de tablas UNDO con una cantidad adecuada de espacio libre.

  • Establezca la garantía de retención en el espacio de tablas (Oracle 10G y versiones posteriores).

  • Configure los parámetros de inicialización de Oracle UNDO_MANAGEMENT y UNDO_RETENTION.

Para obtener más información sobre cómo evitar el error de "instantánea demasiado antigua", consulte la documentación de Oracle.

Oracle Error ORA-22285

Si una tabla incluye una columna BFILE, los datos de la columna se almacenan en el sistema de archivos. Se debe conceder acceso a la cuenta de usuario administrativa de replicación al directorio en el que se almacenan los datos mediante la sintaxis siguiente:

GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>

Si no se concede acceso, el Agente lector de registros genera el siguiente error:

"ORA-22285: directorio o archivo no existente para la operación FILEOPEN"

Se realizan cambios que requieren reconfiguración del publicador

Los cambios en las tablas o procedimientos de metadatos de replicación requieren que elimine y vuelva a configurar el editor de publicaciones. Para volver a configurar el publicador, debe quitar el publicador y volver a configurarlo mediante SQL Server Management Studio, Transact-SQL o RMO. Para obtener información sobre cómo configurar el publicador, consulte Configuración de un publicador de Oracle.

Para eliminar un Publisher de Oracle (SQL Server Management Studio)

  1. Conéctese al distribuidor del publicador de Oracle en SQL Server Management Studio y expanda el nodo de servidor.

  2. Haga clic con el botón derecho en Replicación y, a continuación, haga clic en Propiedades del distribuidor.

  3. En la página Publicadores del cuadro de diálogo Propiedades del distribuidor, desactive la casilla del publicador de Oracle.

  4. Haz clic en Aceptar.

Para eliminar un publicador de Oracle (Transact-SQL)

Véase también

Configuración de un publicador de Oracle
Información general sobre la publicación de Oracle