Preparación de Tablas para el Proceso
Los atributos de tabla de las siguientes secciones se deben abordar en el entorno de Oracle GoldenGate.
Consideración de Replicat para Columnas, Disparadores y Restricciones de Identidad de Destino
Al replicar datos en una base de datos de SQL Server de destino que tiene columnas de identidad, disparadores y restricciones de cascada y control, tenga en cuenta lo siguiente:
-
Para las columnas que tienen una columna de identidad, Replicat define
IDENTITY_INSERT ONpara la tabla, lo que puede reducir el rendimiento de entrega. -
Para las tablas que tienen disparadores o restricciones en cascada, la ejecución de la operación de disparador o en cascada puede provocar un error de Replicat si Replicat está configurado para entregar los mismos datos que un disparador insertará o la restricción en cascada actualizará o suprimirá.
Por ejemplo,
TableAen el origen tiene un disparador que inserta un registro enTableB. Extract está configurado para capturar registros tanto paraTableAcomo paraTableB. En el destino, Replicat insertará primero un registro paraTableAy, a continuación, el disparador paraTableAarranca e inserta enTableB, seguido por el Replicat que intenta insertar el mismo registro enTableB, lo que dará como resultado un error de Replicat. -
Compruebe que también se aplican restricciones de clave ajena, lo que puede reducir el rendimiento de la entrega.
-
Para las tablas de la base de datos de destino que tienen disparadores, defina el parámetro
SET XACT_ABORTen off. Esto garantiza que la ejecución de la operación de disparador no provoque la falta de transacciones.
Para superar estas situaciones, hay varias opciones que se pueden implementar en función del caso de uso de replicación.
-
Para implantaciones unidireccionales en las que un Replicat es el único proceso que escribe datos en las tablas de destino, tenga en cuenta las siguientes opciones para las columnas, los disparadores y las restricciones de identidad en las tablas de destino.
-
Desactive o borre la propiedad Identity, los disparadores y las restricciones de las tablas de destino.
-
Modifique la propiedad de identidad, los disparadores y las restricciones, y defina la opción
NOT FOR REPLICATIONpara cada uno y asegúrese de que el controlador ODBC de Microsoft tenga al menos la versión 17.8.1.
-
-
Para implementaciones multidireccionales en las que tanto un Replicat como una aplicación escriben datos en las tablas de destino, y los disparadores y las restricciones están activados, modifique la propiedad Identity, los disparadores y las restricciones y defina la opción
NOT FOR REPLICATIONpara cada una y asegúrese de que el controlador ODBC de Microsoft tenga al menos la versión 17.8.1.Además, para utilizar columnas
IDENTITYen una configuración de replicación multidireccional, defina las columnasIDENTITYpara que tengan un valor de incremento igual al número de servidores de la configuración, con un valor inicial diferente para cada una.Por ejemplo, una configuración de tres bases de datos sería la siguiente:
Database1 define el valor inicial en 0 con un incremento de 3.
Database2 define el valor inicial en 1 con un incremento de 3.
Database3 define el valor inicial en 2 con un incremento de 3.
Mejora de la replicación de IDENTITY con el procesamiento de matrices
Puesto que solo una tabla por sesión puede tener IDENTITY_INSERT definido en ON, Replicat debe alternar continuamente IDENTITY_INSERT cuando aplica datos IDENTITY a varias tablas de una sesión. Para mejorar el rendimiento de Replicat en esta situación, utilice el parámetro BATCHSQL. BATCHSQL hace que Replicat utilice el procesamiento de matriz en lugar de aplicar sentencias SQL de una en una.
Garantizar la unicidad de fila en la tabla de origen y destino
Oracle GoldenGate necesita algún tipo de identificador de fila único en las tablas de origen y destino para localizar las filas de destino correctas para las actualizaciones y supresiones replicadas.
A menos que se utilice una cláusula KEYCOLS en la sentencia TABLE o MAP, Oracle GoldenGate selecciona un identificador de fila para utilizarlo en el siguiente orden de prioridad:
-
Clave primaria
-
Primera clave única alfanuméricamente que no contiene un registro de hora ni una columna calculada no materializada.
-
Si no existe ninguno de los tipos de clave anteriores (aunque puede haber otros tipos de claves definidos en la tabla) Oracle GoldenGate construye una pseudoclave de todas las columnas que la base de datos permite utilizar en una clave única, excluidas las que no soporta Oracle GoldenGate en una clave o las que están excluidas de la configuración de Oracle GoldenGate. Nota: Si hay otras claves no utilizables en una tabla o si no hay ninguna clave en la tabla, Oracle GoldenGate registra un mensaje adecuado en el archivo de informe. La creación de una clave a partir de todas las columnas impide el rendimiento de Oracle GoldenGate en el sistema de origen. En el destino, esta clave hace que Replicat utilice una cláusula
WHEREmás grande y menos eficaz.
- Si una tabla no tiene una clave adecuada o si prefiere que no se utilicen las claves existentes, puede definir una clave sustituta si la tabla tiene columnas que siempre contienen valores únicos. Para definir esta clave de sustitución, incluya una cláusula
KEYCOLSen el parámetro ExtractTABLEy el parámetro ReplicatMAP. La clave especificada sustituirá cualquier clave primaria o única existente que encuentre Oracle GoldenGate. Consulte TABLE | MAP en Reference for Oracle GoldenGate.
Uso de KEYCOLS para especificar una clave personalizada
Si una tabla no tiene un identificador de fila aplicable o si prefiere que no se utilicen identificadores, puede definir una clave de sustitución, siempre que la tabla tenga columnas que siempre contengan valores únicos. Para definir esta clave de sustitución, incluya una cláusula KEYCOLS en el parámetro Extract TABLE y el parámetro Replicat MAP. La clave especificada sustituye cualquier clave primaria o única existente que encuentre Oracle GoldenGate.