Consideraciones de diseño y limitaciones para los editores de Oracle

Se aplica a:SQL Server

Publicar desde una base de datos Oracle funciona casi igual que publicar desde una base de base de datos de Microsoft SQL Server. Sin embargo, ten en cuenta las siguientes limitaciones y problemas:

  • La opción Oracle Gateway ofrece mejor rendimiento que la opción Oracle Complete. Sin embargo, no puedes usar la opción Oracle Gateway para publicar la misma tabla en múltiples publicaciones transaccionales. Una tabla puede aparecer en una sola publicación transaccional, pero puede aparecer en cualquier número de publicaciones instantáneas. 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 replica otros objetos.

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

  • Existen diferencias en cómo se soportan las funciones de replicación transaccional cuando se utiliza un Oracle Publisher.

Soporte para publicar objetos desde Oracle

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

  • Tablas

  • Tablas organizadas por índices

  • Índices

  • Vistas materializadas (replicadas como tablas)

Los siguientes objetos pueden estar presentes en tablas publicadas pero no se replican:

  • Índices basados en dominios

  • Índices basados en funciones

  • Valores predeterminados

  • Restricciones de comprobación

  • Claves externas

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

Los siguientes objetos no pueden replicarse:

  • 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 Data Type Mapping for Oracle Publishers.

Diferencias entre Oracle y SQL Server

  • Oracle tiene límites de tamaño máximo diferentes para algunos objetos. Cualquier objeto que crees en la base de datos de publicaciones de Oracle debe cumplir con los límites máximos de tamaño para los objetos correspondientes en SQL Server. Para más información, sobre los límites de SQL Server, vea Especificaciones de capacidad máxima para SQL Server.

  • Por defecto, Oracle crea los nombres de los objetos en mayúsculas. Asegúrate de proporcionar los nombres de los objetos Oracle en mayúsculas al publicarlos a través de un distribuidor SQL Server si están en mayúsculas en la base de datos Oracle. No especificar los objetos en el caso correcto puede resultar en un mensaje de error que indique que el objeto no puede ser encontrado.

  • Oracle utiliza un dialecto SQL ligeramente diferente al de SQL Server; escribe filtros de fila con sintaxis compatible con Oracle.

Consideraciones para objetos grandes

La tabla de logs del artículo no almacena datos de objetos grandes (LOB). Las actualizaciones de los datos LOB siempre se recuperan directamente de 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 disparadores de Oracle se activan cuando se insertan o eliminan filas que contienen objetos LOB. Sin embargo, las actualizaciones de las columnas LOB no activan los desencadenadores. Una actualización de una columna LOB se replica inmediatamente solo si una columna no LOB de la misma fila también se actualiza en la misma transacción Oracle. Si no, la columna LOB se actualiza en el Suscriptor cuando ocurre la siguiente actualización a una columna que no sea LOB en 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:

  • Elimina e inserta de nuevo las filas dentro de una transacción en lugar de actualizar la fila: especifica el nuevo LOB al volver a insertar la fila. Como tanto la eliminación como la inserción activan desencadenadores, se replica la fila.

  • 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 Data Type Mapping for Oracle Publishers.

Índices y restricciones únicos

Tanto para la replicación instantánea como para la transaccional, las columnas en índices y restricciones únicas (incluidas las restricciones de clave primaria) deben cumplir ciertas restricciones. Si no cumplen estas restricciones, la restricción o índice no se replica.

  • Puedes incluir hasta 16 columnas en un índice en SQL Server.

  • Todas las columnas en restricciones únicas deben tener tipos de datos soportados. Para obtener más información acerca de los tipos de datos, vea Data Type Mapping for Oracle Publishers.

  • Debes publicar todas las columnas con restricciones únicas (no puedes filtrarlas).

  • Las columnas en restricciones o índices únicos no deberían ser nulas.

Considere también los siguientes problemas:

  • Oracle y SQL Server tratan NULL de manera diferente: Oracle admite varias filas con valores NULL para las columnas que permiten NULL y se incluyen en restricciones o índices únicos. SQL Server aplica la singularidad solo permitiendo una única fila con un valor NULL para la misma columna. No puedes publicar una restricción o índice único que permita NULL porque se produciría una violació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 comprobar la unicidad, SQL Server ignora los espacios en blanco finales de un campo, pero Oracle no.

Al igual que en la replicación transaccional de SQL Server, las tablas en publicaciones transaccionales de Oracle requieren una clave primaria. La clave primaria debe ser única según las reglas especificadas anteriormente. Si la clave primaria no sigue estas reglas, no puedes publicar la tabla para 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).

  • Las cláusulas de intercalación se agregan a las instrucciones CREATE TABLE para habilitar comparaciones sensibles a mayúsculas y minúsculas, lo que es importante para las claves principales y las restricciones de unicidad. 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. Esto no es compatible a través del servidor vinculado utilizado para conectarse a Oracle Publisher.

  • 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 (9.x) 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, consulte Especificar cómo se propagan los cambios para los artículos transaccionales.

Soporte para la función de replicación transaccional

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

  • Los suscriptores de las publicaciones de Oracle no pueden usar suscripciones de actualización inmediata o en cola, ni ser nodos en una topología peer-to-peer o bidireccional.

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

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

  • SQL Server ofrece dos formatos de instantáneas: modo BCP nativo y modo de caracteres. Los publicadores de Oracle admiten las instantáneas en modo de carácter.

  • No se soportan cambios de esquema en tablas 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 realizas cambios en el esquema y eliminas y recreas la publicación y las suscripciones cuando no hay actividad en las tablas publicadas, puedes especificar la opción replication support only para las suscripciones. Esta opción los sincroniza sin copiar una instantánea en cada suscriptor. Para obtener más información, consulte Initialize a Transactional Subscription Without a Snapshot.

Modelo de seguridad de replicación

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

Para más información sobre la seguridad de la replicación, vea Ver y modificar la configuración de seguridad de la replicación.