Consideraciones y limitaciones de diseño de los publicadores de Oracle

La publicación de una base de datos de Oracle se diseña para que funcione casi idénticamente a la publicación de una base de datos de MicrosoftSQL Server. No obstante, debe tener en cuenta las siguientes limitaciones y problemas:

  • La opción de puerta de enlace de Oracle proporciona mejor rendimiento que la opción Completo. No obstante, esta opción no se puede utilizar para publicar la misma tabla en varias publicaciones transaccionales. Una tabla puede aparecer como máximo en una publicación transaccional y en cualquier número de publicaciones de instantánea. Si necesita publicar la misma tabla en varias publicaciones transaccionales, elija la opción Completo de Oracle.

  • La replicación admite la publicación de tablas, índices y vistas materializadas. No se replican otros objetos.

  • Existen pequeñas diferencias entre el almacenamiento y el procesamiento de datos en Oracle y las bases de datos de SQL Server que afectan a la replicación.

  • Existen ciertas diferencias en el modo en que se admiten las características de replicación al utilizar un publicador de Oracle.

Compatibilidad con objetos de publicación de Oracle

La replicación admite los siguientes objetos de las bases de datos de Oracle:

  • Tablas

  • Tablas organizadas por índices

  • Índices

  • Vistas materializadas (se replican como tablas)

Los siguientes elementos pueden aparecer en tablas publicadas pero no se replican:

  • Índices basados en dominios

  • Índices basados en funciones

  • Valores predeterminados

  • Restricciones CHECK

  • Claves externas

  • Opciones de almacenamiento (espacios de tabla, clústeres, etc.)

No es posible replicar los siguientes objetos:

  • Tablas anidadas

  • Vistas

  • Paquetes, cuerpos de paquetes, procedimientos y desencadenadores

  • Colas

  • Secuencias

  • Sinónimos

Para obtener información acerca de los tipos de datos admitidos, vea Asignar tipos de datos para publicadores de Oracle.

Diferencias entre Oracle y SQL Server

  • Oracle tiene límites de tamaño máximo diferentes para algunos objetos. Cualquier objeto creado en la base de datos de publicación de Oracle debe respetar los límites de tamaño máximo de los correspondientes objetos en SQL Server. Para obtener información sobre límites en SQL Server, vea Especificaciones de capacidad máxima para SQL Server.

  • Los nombres de objeto de Oracle se crean de manera predeterminada en mayúsculas. Asegúrese de proporcionar los nombres de los objetos de Oracle en mayúsculas al publicarlos a través de un distribuidor de SQL Server si están en mayúsculas en la base de datos de Oracle. Si no se especifican los objetos en mayúsculas o minúsculas correctamente, se puede producir un mensaje de error que indica que no se puede encontrar el objeto.

  • Oracle tiene un dialecto SQL ligeramente diferente de SQL Server; los filtros de fila se deben escribir en sintaxis compatible con Oracle.

Consideraciones para objetos grandes

Los datos de objetos grandes (LOB) no se almacenan en la tabla de registro de artículos; las actualizaciones de datos LOB se recuperan directamente en la tabla publicada. Las actualizaciones se replican en publicaciones transaccionales solamente si la operación que afecta al LOB activa el desencadenador de replicación en la tabla replicada. Los desencadenadores de Oracle se activan cuando se insertan o eliminan filas que contienen LOB; sin embargo, las actualizaciones de columnas LOB no activan los desencadenadores. Una actualización de una columna LOB se replicará inmediatamente sólo si una columna no LOB de la misma fila se actualiza también en la misma transacción de Oracle. Si no, la columna LOB se actualizará en el suscriptor cuando se produzca la siguiente actualización de una columna no LOB de la misma fila. Asegúrese de que este comportamiento es aceptable para su aplicación.

Para replicar actualizaciones de columnas LOB en publicaciones transaccionales, considere una de las siguientes estrategias cuando escriba la aplicación:

  • Elimine y vuelva a insertar las filas en una transacción en lugar de actualizar la fila: especifique el nuevo LOB al volver a insertar la fila.Como la eliminación y la inserción activan desencadenadores, la fila se replicará.

  • Incluya una columna no LOB en la actualización de filas además de la columna LOB, o actualice una columna no LOB de la fila como parte de la misma transacción de Oracle. En ambos casos, la actualización de la columna no LOB garantiza que se active el desencadenador.

Para obtener más información sobre los LOB, vea Asignar tipos de datos para publicadores de Oracle.

Índices y restricciones únicos

En la replicación de instantáneas y transaccional, las columnas contenidas en índices y restricciones únicos (incluidas las restricciones de clave principal) deben respetar ciertas limitaciones Si no se respetan dichas limitaciones, la restricción o el índice no se replican.

  • El número máximo de columnas permitido en un índice en SQL Server es de 16.

  • Todas las columnas incluidas en restricciones únicas deben tener tipos de datos admitidos. Para obtener más información acerca de los tipos de datos, vea Asignar tipos de datos para publicadores de Oracle.

  • Todas las columnas incluidas en restricciones únicas se deben publicar (no se pueden filtrar).

  • Las columnas incluidas en restricciones o índices únicos no deben ser de tipo NULL.

Considere también los siguientes problemas:

  • Oracle y SQL Server tratan los valores NULL de forma diferente: Oracle permite varias filas con valores NULL para columnas que admiten valores NULL y están incluidas en restricciones o índices únicos. SQL Server aplica la unicidad al permitir una única fila con valor NULL para la misma columna.No puede publicar un índice o restricción únicos que permita el valor NULL porque se produciría una infracción de restricción en el suscriptor si la tabla publicada contiene varias filas con valores NULL para cualquiera de las columnas incluidas en el índice o restricción.

  • Al probar la unicidad, SQL Server omite los espacios en blanco de un campo pero Oracle no.

Como en la replicación transaccional de SQL Server, las tablas de las publicaciones transaccionales de Oracle requieren una clave principal, que debe ser única según las reglas especificadas anteriormente. Si la clave principal no sigue las reglas indicadas anteriormente, no se puede publicar la tabla para la replicación transaccional.

Diferencias entre la publicación de Oracle y la replicación transaccional estándar

  • Un publicador de Oracle no puede tener el mismo nombre que su distribuidor de SQL Server ni el mismo nombre que ninguno de los publicadores de SQL Server que utilizan el mismo distribuidor, ni que ninguno de los suscriptores que reciben la publicación.Las publicaciones a las que da servicio el mismo distribuidor deben tener nombres únicos.

  • Una tabla publicada en una publicación de Oracle no puede recibir datos replicados. Por eso, la publicación de Oracle no es compatible con publicaciones con suscripciones de actualización inmediata o de actualización en cola, ni con topologías en las que las tablas de publicación son a la vez tablas de suscripción, como la replicación punto a punto y bidireccional.

  • Las relaciones de clave principal a clave externa de la base de datos de Oracle no se replican en los suscriptores. No obstante, se mantienen las relaciones en los datos cuando se entregan los cambios.

  • Las publicaciones transaccionales estándar admiten tablas de hasta 1000 columnas. Las publicaciones transaccionales de Oracle admiten 995 columnas (la replicación agrega cinco columnas a cada tabla publicada).

  • Se agregan cláusulas de intercalación a las instrucciones CREATE TABLE para habilitar las comparaciones que distinguen entre mayúsculas y minúsculas, que es importante para las claves principales y las restricciones únicas. Este comportamiento se controla con la opción de esquema 0x1000, que se especifica con el parámetro @schema_option de sp_addarticle (Transact-SQL).

  • Si utiliza procedimientos almacenados para configurar o mantener un publicador de Oracle, no coloque los procedimientos dentro de una transacción explícita. El servidor vinculado que se utiliza para conectar al publicador de Oracle no admite dicha transacción.

  • Si crea una suscripción de extracción en una publicación de Oracle con un asistente, debe utilizar el Asistente para nueva suscripción con SQL Server 2005 y versiones posteriores. No obstante, para las versiones anteriores de SQL Server, puede utilizar el procedimiento almacenado y las interfaces SQL-DMO para configurar suscripciones de extracción a publicaciones de Oracle.

  • Si utiliza procedimientos almacenados para propagar los cambios a los suscriptores (valor predeterminado), tenga en cuenta que se admite la sintaxis MCALL, pero que su comportamiento es diferente cuando la publicación es de un publicador de Oracle. Normalmente MCALL proporciona un mapa de bits que muestra qué columnas se han actualizado en el publicador. Con una publicación de Oracle, el mapa de bits muestra siempre que todas las columnas han sido actualizadas. Para obtener más información sobre el uso de procedimientos almacenados, vea Especificar cómo se propagan los cambios para los artículos transaccionales.

Compatibilidad con características de replicación transaccional

  • Las publicaciones de Oracle no admiten todas las opciones de esquema que admiten las publicaciones de SQL Server. Para obtener más información sobre las opciones de esquema, vea sp_addarticle (Transact-SQL).

  • Los suscriptores de publicaciones de Oracle no pueden utilizar suscripciones de actualización inmediata o de actualización en cola, ni ser nodos en una topología del mismo nivel o bidireccional.

  • Los suscriptores de publicaciones de Oracle no se pueden inicializar automáticamente desde una copia de seguridad.

  • SQL Server admite dos tipos de validación: binaria y de recuento de filas.Los publicadores de Oracle admiten la validación de recuento de filas. Para obtener más información, vea Validar los datos replicados.

  • SQL Server proporciona dos formatos de instantánea: modo bcp nativo y modo de carácter.Los publicadores de Oracle admiten las instantáneas en modo de carácter.

  • No se admiten los cambios de esquema en las tablas de Oracle publicadas. Para realizar los cambios de esquema, quite primero la publicación, realice los cambios y vuelva a crear la publicación y todas las suscripciones.

    [!NOTA]

    Si se realizan los cambios de esquema y la posterior eliminación y nueva creación de la publicación y las suscripciones cuando no se está produciendo ninguna actividad en las tablas publicadas, puede especificar la opción "sólo compatibilidad con replicación" para las suscripciones. Esto les permite sincronizarse sin tener que copiar una instantánea en cada suscriptor. Para obtener más información, vea Inicializar una suscripción transaccional sin una instantánea.

Modelo de seguridad de replicación

El modelo de seguridad de la publicación de Oracle es el mismo que el de la replicación transaccional estándar, con las siguientes excepciones:

Para obtener más información sobre la seguridad de replicación, vea Seguridad y protección (replicación).