Solución de problemas en Oracle Publisher

Se aplica a:SQL Server

Este artículo enumera varios problemas que pueden surgir al configurar y utilizar un Oracle Publisher.

Aparece un error referente al cliente Oracle y al software de red

Debes conceder permisos de lectura y ejecución a la cuenta bajo la cual Microsoft SQL Server se ejecuta en el distribuidor para el directorio y todos los subdirectorios donde está instalado el software de red cliente de Oracle. Si no concedes los permisos o si los componentes del cliente Oracle no están instalados correctamente, recibes el siguiente mensaje de error:

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

Si instalas un cliente Oracle adecuado en el distribuidor, asegúrate de detener y luego reiniciar SQL Server una vez finalizada la instalación del cliente. Este paso es necesario para que SQL Server reconozca los componentes del cliente.

Si concedes los permisos e instalas los componentes correctamente pero el error persiste, verifica que la configuración del registro en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI esté correcta:

  • Para Oracle 10g, los ajustes correctos son:

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql10.dll

    • OracleXaLib = oraclient10.dll

  • Para Oracle 9i, los ajustes correctos son:

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql9.dll

    • OracleXaLib = oraclient9.dll

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

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

  • El software de Oracle necesario está instalado en el distribuidor.

  • La base de datos de Oracle está online y puedes conectarte a ella usando una herramienta como SQL*Plus.

  • El inicio de sesión que utiliza la replicación para conectarse al publicador de Oracle tiene permisos suficientes. Para obtener más información, vea Configurar un publicador de Oracle.

  • El archivo tnsnames.ora lista los nombres TNS que definiste durante la configuración de Oracle Publisher.

  • Estás usando el Oracle Home y la ruta correctos. Aunque solamente tenga un conjunto de archivos binarios de Oracle instalados en el distribuidor de SQL Server, asegúrese de que las variables de entorno relacionadas con el directorio de inicio de Oracle están configuradas correctamente. Si cambia los valores de las variables de entorno, deberá detener y reiniciar SQL Server para que se aplique el cambio.

Para más información sobre la configuración y comprobación de la conectividad, vea la sección sobre instalación y configuración del software de red del cliente Oracle en el distribuidor de SQL Server, en Configurar un publicador de Oracle.

El Oracle Publisher está asociado con otro distribuidor

Un publicador de Oracle solamente se puede asociar con un distribuidor de SQL Server. Si hay un distribuidor diferente asociado con Oracle Publisher, déjalo antes de usar otro distribuidor. Si no eliminas primero el Distribuidor, aparece uno de los siguientes mensajes de error:

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

  • "Ya se ha definido el servidor de Oracle "<NombreServidorOracle>" como publicador "<NombrePublicadorOracle>" en el distribuidor "<NombreDistribuidorSQLServer>.<NombreBaseDatosDistribución>". Quite el publicador o el sinónimo público "<NombreSinónimo>" para volver a crearlo.

Cuando eliminas un Oracle Publisher, los objetos de replicación en la base de datos Oracle se limpian automáticamente. Sin embargo, en algunos casos necesitas limpiar manualmente los objetos de replicación de Oracle. Para limpiar manualmente los objetos de replicación de Oracle creados por la replicación:

  1. Conéctese al publicador de Oracle con permisos de administrador de base de datos (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 debido a la falta de una clave primaria

Los artículos de las publicaciones transaccionales deben tener una clave principal válida. Si no tienen una clave primaria válida, recibes el siguiente mensaje de error cuando intentas añadir un artículo:

"No se encuentra ninguna clave principal válida para la tabla de origen [<PropietarioTabla>].[<NombreTabla>]"

Para información sobre los requisitos de claves primarias, consulte la sección "Índices y restricciones únicas" en el artículo Consideraciones y limitaciones de diseño para editores de Oracle.

Se genera el error 21642 de SQL Server respecto a un inicio de sesión duplicado de un servidor vinculado

Cuando configuras inicialmente un Oracle Publisher, el proceso crea una entrada enlazada en el servidor para la conexión entre el Publisher y el Distribuidor. El servidor vinculado tiene el mismo nombre que el servicio TNS de Oracle. Si intentas crear un servidor enlazado con el mismo nombre, verás el siguiente mensaje de error:

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

Este error puede ocurrir si intentas crear el servidor enlazado directamente o si previamente perdiste la relación entre Oracle Publisher y SQL Server Distributor, y ahora estás intentando reconfigurarlo. Si recibe este error al intentar reconfigurar el publicador, elimine el servidor vinculado con sp_dropserver (Transact-SQL).

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

Aparece el error 21617 de SQL Server

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

"No se pudo ejecutar SQL*PLUS. Compruebe que el código del cliente de Oracle instalado en el distribuidor corresponda a la versión actual."

Intenta localizar SQLPLUS en el distribuidor. Para una instalación cliente Oracle 10g, el nombre de este ejecutable es sqlplus.exe. Normalmente se instala en %ORACLE_HOME%/bin. Para verificar que la ruta de SQLPLUS aparece en la ruta del sistema, examina el valor de la variable del sistema Ruta:

  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 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 Modificar.

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

  5. Haga clic en Aceptar en todos los cuadros de diálogo abiertos para salir y guardar los cambios.

Si no puedes localizar sqlplus.exe en el distribuidor, instala una versión actual del software cliente de Oracle en el distribuidor. Para obtener más información, vea Configurar un publicador de Oracle.

Aparece el error 21620 de SQL Server

Si te conectas a una base de datos Oracle anterior a la versión 8.1, Oracle Publishing requiere que el software cliente de Oracle instalado en el Distribuidor sea de la versión 9. Si te conectas a una base de datos Oracle versión 8.1 o posterior, usa el software cliente Oracle versión 10 o posterior.

Antes de intentar configurar la publicación de Oracle, Oracle Publishing comprueba que la versión de SQL*PLUS accesible a través de la ruta de acceso del sistema en el Distribuidor sea la versión 9 o una posterior. Si no lo es, se muestra el siguiente mensaje de error:

"La versión de SQL*PLUS a la que se tiene acceso a través de la variable Path del sistema no es lo suficientemente actual para admitir publicaciones de Oracle. Compruebe que el código del cliente de Oracle instalado en el distribuidor corresponda a la versión actual."

Si tienes varias versiones del software cliente Oracle instaladas en el distribuidor, asegúrate de que la versión más reciente sea al menos la versión 9 y que la variable de ruta del sistema se refiera primero a esta versión (las referencias a otras versiones pueden aparecer siempre que la más reciente aparezca primero). Para más información sobre cómo editar la variable de ruta del sistema, consulte la sección "SQL Server is Raised" anterior en este artículo.

Aparece el error 21624 o 21629 de SQL Server

Para los distribuidores de 64 bits, la publicación en Oracle utiliza el proveedor Oracle OLEDB para Oracle (OraOLEDB.Oracle). Asegúrate de que el proveedor Oracle OLEDB esté instalado y registrado en el Distribuidor. Si el proveedor no está instalado y registrado, verás 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'. Compruebe que la versión del proveedor OLEDB de Oracle instalada y registrada en el distribuidor sea la actual."

  • "La clave del Registro CLSID que indica que el proveedor OLEDB de Oracle, OraOLEDB.Oracle, se ha registrado no está presente en el distribuidor. Compruebe que el proveedor OLEDB de Oracle se haya instalado y registrado en el distribuidor".

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

Si el proveedor Oracle OLEDB está instalado, asegúrate de que esté registrado. Para registrar la DLL del proveedor, ejecuta el siguiente comando desde el directorio donde está instalada la DLL, y luego detén y reinicia la instancia de SQL Server:

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

Se genera el error 21626 o 21627 de SQL Server

Para verificar que el entorno de publicación de Oracle está configurado correctamente, SQL Server intenta conectarse al Oracle Publisher utilizando las credenciales de inicio de sesión que especificaste durante la configuración. Si el distribuidor de SQL Server no puede conectarse al Oracle Publisher, verás el siguiente mensaje de error:

  • "No se puede conectar con el servidor de base de datos Oracle '%s' mediante el proveedor OLEDB de Oracle, OraOLEDB.Oracle."

Si ves este mensaje de error, verifica la conectividad con la base de datos de Oracle ejecutando SQL*PLUS directamente usando el mismo inicio de sesión y contraseña que especificaste durante la configuración del Oracle Publisher. Para más información, consulte la sección "El distribuidor de SQL Server no puede conectarse a la Instancia de la Base de Datos Oracle" anterior en este artículo.

Se genera el error 21628 de SQL Server

Para los distribuidores de 64 bits, la publicación de Oracle utiliza el proveedor Oracle OLEDB para Oracle (OraOLEDB.Oracle). SQL Server crea una entrada en el registro para permitir que el proveedor de Oracle ejecutarse en proceso con SQL Server. Si hay algún problema al leer o escribir esta entrada del registro, aparece el siguiente mensaje de error:

No se puede actualizar el registro del distribuidor "%s" para que el proveedor OLE DB de Oracle, OraOLEDB.Oracle, pueda ejecutarse con SQL Server. Asegúrese de que la sesión actual tenga autorización para modificar las claves del Registro de SQL Server.

La publicación por oráculo requiere que exista la entrada del registro y que esté configurada en 1 para distribuidores de 64 bits. Si la entrada no existe, SQL Server intenta crearla. Si la entrada existe pero está en 0, la configuración no cambia y la configuración del Oracle Publisher falla.

Para ver y modificar la opción del Registro:

  1. Seleccione Inicio y, a continuación, seleccione Ejecutar.

  2. En el cuadro de diálogo Ejecutar, escribe regedit y luego selecciona OK.

  3. Navegue hasta HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<NombreInstancia>\Providers.

    En Proveedores, encuentra una carpeta llamada OraOLEDB.Oracle. Dentro de esta carpeta, busca el valor DWORD llamado AllowInProcess con un valor de 1.

  4. Si ves que AllowInProcess está configurado a 0, actualiza la entrada del registro a 1:

    1. Haz clic derecho en la entrada y luego selecciona Modificar.

    2. En el cuadro de diálogo Editar cadena , escriba 1 en el campo Datos del valor .

Se genera el error 21684 de SQL Server

Si la cuenta de usuario administrativo no tiene suficientes privilegios, ves el siguiente mensaje de error:

"Los permisos asociados con el inicio de sesión de administrador del publicador de Oracle '%s' no son suficientes."

Para verificar los permisos concedidos al usuario, ejecute la siguiente consulta: 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 replicación

El esquema de usuario de la replicación debe tener los permisos que se describen en la sección sobre creación manual de esquemas de usuario en Configurar un publicador de Oracle.

Error ORA-01000 de Oracle

Durante el proceso de agregar artículos a una publicación, la replicación utiliza cursores en el publicador de Oracle. Durante este proceso, es posible superar el número máximo de cursores disponibles en el publicador. Si esto ocurre, aparecerá el siguiente error:

ORA-01000: se ha superado el número máximo de cursores abiertos

Para evitar este problema, asegúrese de que el parámetro max_open_cursors de las bases de datos de Oracle esté establecido en un número suficientemente alto (al menos 1000). Para obtener más información acerca de este parámetro, vea la documentación de Oracle.

Error ORA-01555 de Oracle

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

"ORA-01555: Instantánea demasiado antigua"

Oracle utiliza objetos conocidos como segmentos de reversión para construir vistas de lectura coherentes de los datos a partir del momento en que se emite una instrucción SQL. El error "snapshot too old" (instantánea demasiado antigua) puede producirse cuando otras sesiones concurrentes 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 sustituye al segmento de rollback. Para evitar el error "snapshot too old" en Oracle 9i, se recomienda:

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

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

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

Para obtener más información acerca de cómo evitar el error "snapshot too old", vea la documentación de Oracle.

Error de oráculo ORA-22285

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

GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>

Si no concedes acceso, el Agente Lector de Registros genera el siguiente error:

"ORA-22285: directorio o archivo inexistente para operación FILEOPEN"

Cambios que requieren reconfiguración del Publisher

Si realizas cambios en tablas o procedimientos de metadatos de replicación, debes eliminar y reconfigurar el Publisher. Para reconfigurar el Publisher, debes eliminar el Publisher y configurarlo de nuevo usando SQL Server Management Studio, Transact-SQL o RMO. Para más información sobre cómo configurar el Publisher, consulte Configurar un Oracle Publisher.

Para eliminar un Oracle Publisher (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 secundario en Replicacióny, 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. Haga clic en OK.

Para eliminar un publicador de Oracle (Transact-SQL)