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.

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:

  1. Clave primaria

  2. Primera clave única alfanuméricamente que no contiene un registro de hora ni una columna calculada no materializada.

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

  1. 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 KEYCOLS en los parámetros Extract TABLE y Replicat MAP. 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:

Para la solución alternativa ROWID GENERATE ALWAYS:

  1. Para la tabla de origen, cree una sentencia Extract TABLE y utilice una cláusula COLSEXCEPT en esa sentencia que excluya la columna ROWID. Por ejemplo:

    TABLE tab1, COLSEXCEPT (rowidcol);

    La cláusula COLSEXCEPT excluye que la columna ROWID se capture y replique en la tabla de destino.

  2. Para la tabla de destino, asegúrese de que Replicat no intente utilizar la columna ROWID como 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 MAP de Replicat para la tabla y utilice una cláusula KEYCOLS en esa sentencia que contenga cualquier columna única, excepto la columna ROWID. 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: