Preparar tablas para procesamiento
Debe realizar las siguientes tareas para preparar las tablas para su uso en un entorno de Oracle GoldenGate para Db2 z/OS.
Desactivación de Disparadores y Restricciones en Cascada
Desactive los disparadores, las restricciones de supresión en cascada y las restricciones de actualización en cascada en las tablas de destino o modifíquelas para ignorar los cambios realizados por el usuario de la base de datos Oracle GoldenGate. Oracle GoldenGate replica el DML que resulta de un disparador o restricción en cascada. Si se activa el mismo disparador o restricción en la tabla de destino, se vuelve redundante debido a la versión replicada y la base de datos devuelve un error. Considere el siguiente ejemplo, donde las tablas de origen son emp_src y salary_src y las tablas de destino son emp_targ y salary_targ.
-
Se emite una supresión para
emp_src. -
Aplica una supresión en cascada a
salary_src. -
Oracle GoldenGate envía ambas supresiones al destino.
-
La supresión principal llega primero y se aplica a
emp_targ. -
La supresión principal aplica en cascada una supresión a
salary_targ. -
La supresión en cascada de
salary_srcse aplica asalary_targ. -
La fila se suprime en el paso 5 y no se puede ubicar.
Garantizar la unicidad de filas para las tablas
Oracle GoldenGate necesita un 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 exista 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, excluyendo aquellas que Oracle GoldenGate no soporta en una clave o aquellas que están excluidas de la configuración de Oracle GoldenGate.
Nota: Si hay otras claves no utilizables en una tabla o no hay claves 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 WHERE más extensa 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 los parámetros ExtractTABLEy 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 uno de los tipos anteriores de identificadores de fila, o si prefiere que no se utilicen esos identificadores, puede definir una clave de sustitución si la tabla tiene columnas que siempre contienen valores únicos. Para definir esta clave de sustitución, incluya una cláusula KEYCOLS en los parámetros Extract TABLE y Replicat MAP. La clave especificada sustituirá cualquier clave primaria o única existente que encuentre Oracle GoldenGate. Para obtener más información, consulte Referencia de Oracle GoldenGate.
Manejar tablas con columnas ROWID
Cualquier intento de inserción en una tabla de destino que incluya una columna con un tipo de dato ROWID GENERATED ALWAYS (valor por defecto) fallará con el siguiente error de ODBC:
ODBC error: SQLSTATE 428C9 native database error -798. {DB2 FOR OS/390}{ODBC DRIVER}{DSN08015} DSNT408I SQLCODE = -798, ERROR: YOU CANNOT INSERT A VALUE INTO A COLUMN THAT IS DEFINED WITH THE OPTION GENERATED ALWAYS. COLUMN NAME ROWIDCOL.
Puede realizar una de las siguientes acciones para preparar tablas con columnas ROWID que procesará Oracle GoldenGate:
-
Asegúrese de que las columnas
ROWIDde las tablas de destino se definen comoGENERATED BY DEFAULT. -
Si no es posible cambiar la definición de la tabla, puede solucionarlo con el siguiente procedimiento.
Para la solución alternativa ROWID GENERATE ALWAYS:
-
Para la tabla de origen, cree una sentencia Extract
TABLEy utilice una cláusulaCOLSEXCEPTen esa sentencia que excluya la columnaROWID. Por ejemplo:TABLE tab1, COLSEXCEPT (rowidcol);La cláusula
COLSEXCEPTexcluye que la columnaROWIDse capture y replique en la tabla de destino. -
Para la tabla de destino, asegúrese de que Replicat no intente utilizar la columna
ROWIDcomo clave. Esto se puede hacer de una de las siguientes maneras:-
Especifique una clave primaria en la definición de la tabla de destino.
-
Si no se puede crear una clave, cree un parámetro
MAPde Replicat para la tabla y utilice una cláusulaKEYCOLSen esa sentencia que contenga cualquier columna única, excepto la columnaROWID. Replicat utilizará esas columnas como clave. Por ejemplo:MAP tab1, TARGET tab1, KEYCOLS (num, ckey);
-
Mantenimiento de Tablas de Consultas Materializadas
Para mantener la paridad entre las tablas de consulta materializada (MQT) de origen y destino, replique las tablas base, pero no los MQT. La base de datos de destino mantiene los MQT en función de los cambios que aplica Replicat a las tablas base.
Las siguientes son las reglas para configurar estas tablas:
-
Incluya las tablas base en las sentencias
TABLEyMAP. -
No incluya MQT en las sentencias
TABLEyMAP. -
Los comodines se pueden utilizar en sentencias
TABLEyMAP, aunque puedan resolver nombres MQT junto con nombres de tabla normales. Oracle GoldenGate excluye automáticamente los MQT de las listas de tablas con comodines. Sin embargo, cualquier MQT que se muestre explícitamente en una sentencia ExtractTABLEpor nombre hará que Extract finalice de forma anormal.