TABLE | MAP

Válido para

TABLE es válido para Extract. Puede utilizar TABLE con Replicat solo con el parámetro EVENTACTIONS. MAP es válido para Extract en determinadas situaciones y Replicat. Consulte MAP para Extract para obtener más información.

Descripción

Los parámetros TABLE y MAP controlan la selección, asignación y manipulación de los objetos que se verán afectados por un proceso de Oracle GoldenGate. Estos parámetros funcionan de la siguiente manera:

TABLE y MAP son válidos para las configuraciones de carga inicial y para los procesos en línea configurados para soportar la replicación de cambios transaccionales.

Puede procesar los siguientes objetos con TABLE y MAP:

Para especificar una secuencia para la captura por Extract, utilice el parámetro SEQUENCE.

Nota: Oracle GoldenGate soporta la replicación de valores de datos reales de las vistas materializadas de Oracle.

Puede utilizar una o más sentencias TABLE o MAP en un archivo de parámetros, con o sin comodines, para especificar todos los objetos que desea procesar.

Puede excluir objetos de una sentencia TABLE o MAP con comodines con los siguientes parámetros:

Valor por defecto

Ninguno

Sintaxis de TABLE

Para las tablas, puede utilizar todas las opciones TABLE. Para los objetos no de tabla, utilice TABLE solo para especificar un objeto para la captura.

TABLE <source_table>[, TARGET <target_table>]
[, ATTRCHARSET (<charset>)]
[, CHARSET <character_set>]
[, COLCHARSET <character_set>]
[, COLMAP (<column_mapping>)]
[, {COLS | COLSEXCEPT} (<column_list>)]
[, {DEF | TARGETDEF} <template>]
[, EVENTACTIONS <action>]
[, EXITPARAM '<parameter>']
[, {FETCHCOLS | FETCHCOLSEXCEPT} (<column_list>)]
[, {FETCHMODCOLS | FETCHMODCOLSEXCEPT} (<column_list>)]
[, FETCHBEFOREFILTER]
[, FILTER (<filter_clause>)]
[, GETBEFORECOLS (<column_specification>)]
[, KEYCOLS (<columns>)]
[, SQLEXEC (<SQL_specification>)]
[, SQLPREDICATE 'WHERE <where_clause>']
[, TOKENS (<token_definition>)]
[, TRIMSPACES | NOTRIMSPACES]
[, TRIMVARSPACES | NOTRIMVARSPACES]
[, WHERE (<clause>)]
[, <container>.]<schema.table> PARTITIONOBJID <ptn_object_ID> [, <ptn_object_ID>]
;

Sintaxis de MAP

MAP <source_table>, TARGET <target_table>
[, MOD_COMPARE_COLS( <tgt_col> = <source> )]
[, COLMAP (<column_mapping>)]
[, COMPARECOLS (<column_specification>)]
[, COORDINATED]
[, {DEF | TARGETDEF} <template>]
[, EXCEPTIONSONLY]
[, EXITPARAM '<parameter>']
[, EVENTACTIONS (<action>)]
[, FILTER (<filter_clause>)]
[, HANDLECOLLISIONS | NOHANDLECOLLISIONS]
[, INSERTALLRECORDS]
[, INSERTAPPEND | NOINSERTAPPEND]
[, KEYCOLS (<columns>)]
[, MAPALLCOLUMNS | NOMAPALLCOLUMNS]
[, MAPEXCEPTION (<exceptions_mapping>)]
[, MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS]
[, REPERROR (<error>, <response>)]
[, RESOLVECONFLICT (<conflict_resolution_specification>)]
[, SQLEXEC (<SQL_specification>)]
[, THREAD (<thread_ID>)]
[, THREADRANGE (<thread_range>[, <column_list>])]
[, TRIMSPACES | NOTRIMSPACES]
[, TRIMVARSPACES | NOTRIMVARSPACES]
[, WHERE (<clause>)]
[, <container>.]<schema.table> PARTITIONOBJID <ptn_object_ID> [, <ptn_object_ID>]
;

Opciones de TABLE y MAP

En la siguiente tabla se resumen las opciones disponibles para los parámetros TABLE y MAP. Tenga en cuenta que no todas las opciones son válidas para ambos parámetros.

Tabla 11 Resumen de los componentes de sintaxis TABLE y MAP

Componente Descripción Válido para
MAP MOD_COMPARE_COL( tgt_col = source [,...] ) Éste es un parámetro solo de Replicat. Asigna el valor de origen especificado a la imagen anterior de la columna de destino como valor de clave y el valor se utiliza para la cláusula WHERE. MAP
TABLE <source_table>[, TARGET <target>] Especifica el objeto de origen en una sentencia TABLE para Extract y una asignación opcional a un objeto de destino. Se utiliza en el archivo de parámetros Extract. TABLE
MAP source_table, TARGET target_table Especifica la asignación de objeto de origen-destino para el proceso de Replicat. Se utiliza en el archivo de parámetros Replicat. MAP
ATTRCHARSET (charset) Especifica la información del juego de caracteres de origen en el nivel de atributo UDT. TABLE
COLCHARSET character_set Especifica cualquier juego de caracteres soportado. TABLE
COLMAP (column_mapping) Asigna registros entre diferentes columnas de origen y destino. TABLE y MAP
{COLS \| COLSEXCEPT} (column_list) Selecciona o excluye columnas para su procesamiento. TABLE
COMPARECOLS (column_specification) Especifica las columnas que se utilizarán para la detección y resolución de conflictos. TABLE y MAP
COORDINATED Fuerza que una transacción se procese como una transacción de barrera. MAP
{DEF | TARGETDEF} template Especifica una plantilla de definiciones de origen o de destino. TABLE y MAP
EXCEPTIONSONLY Especifica que la sentencia MAP es una sentencia MAP de excepciones. MAP
EVENTACTIONS (action) Dispara una acción basada en un registro que cumple con una regla de filtro especificada. TABLE y MAP
EXITPARAM 'parameter' Transfiere un parámetro en forma de cadena literal a una salida de usuario. TABLE y MAP
FETCHBEFOREFILTER Indica la acción FETCHCOLS o FETCHCOLSEXCEPT que se debe realizar antes de ejecutar un filtro. TABLE
{FETCHCOLS | FETCHCOLSEXCEPT} (column_list) Permite la recuperación de valores de columna de la base de datos origen cuando los valores no están en el registro de transacción. TABLE
{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (column_list) Fuerza la recuperación de valores de columna de la base de datos cuando las columnas están presentes en el log de transacciones. TABLE
FILTER (filter_clause) Selecciona registros basados en un valor numérico. FILTER proporciona más flexibilidad que WHERE. TABLE y MAP
GETBEFORECOLS (column_specification) Fuerza la captura y escritura de imágenes de columnas antes de la pista. TABLE
HANDLECOLLISIONS \| NOHANDLECOLLISIONS Concilia los resultados de los cambios realizados en la tabla de destino mediante un proceso de carga inicial con los aplicados por un grupo de sincronización de cambios. MAP
INSERTALLRECORDS Aplica todos los cambios de fila como inserciones. MAP
INSERTAPPEND \| NOINSERTAPPEND Controla si Replicat utiliza o no una indicación APPEND de Oracle para sentencias INSERT. MAP
KEYCOLS (columns) Designa columnas que identifican filas de forma única. TABLE y MAP
MAPALLCOLUMNS | NOMAPALLCOLUMNS Controla si Replicat obtiene o no columnas no clave. N/D
MAPEXCEPTION (exceptions_mapping) Especifica que la sentencia MAP contiene el manejo de excepciones para las tablas con comodines. MAP
MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS Controla si Replicat incluye o no columnas invisibles en las tablas de destino de Oracle para la asignación de columnas por defecto. En el caso de las columnas invisibles de las tablas de destino de Oracle que utilizan la asignación explícita de columnas, siempre se asignan, por lo que no es necesaria esta opción. MAP
REPERROR (error, response) Controla cómo responde Replicat a los errores al ejecutar la sentencia MAP. MAP
RESOLVECONFLICT (conflict_resolution_specification) Especifica las reglas para la resolución de conflictos. MAP
SQLEXEC (SQL_specification) Ejecuta consultas y procedimientos almacenados. TABLE y MAP
SQLPREDICATE 'WHERE where_clause' Permite que una cláusula WHERE seleccione filas para una carga inicial. TABLE
THREAD (thread_ID) Válido para Replicat en modo coordinado. Especifica que la sentencia MAP será procesada por el thread de Replicat especificado. MAP
THREADRANGE (thread_range, column_list) Válido para Replicat en modo coordinado. Especifica que la sentencia MAP será procesada por el rango especificado de threads de Replicat. MAP
TOKENS (token_definition) Define tokens de usuario. TABLE
TRIMSPACES \| NOTRIMSPACES Controla si los espacios finales se recortan o no al asignar columnas CHAR a VARCHAR. TABLE y MAP
TRIMVARSPACES \| NOTRIMVARSPACES Controla si los espacios finales se recortan o no al asignar columnas VARCHAR a CHAR o VARCHAR. TABLE y MAP
WHERE (clause) Selecciona registros basados en operadores condicionales. TABLE y MAP
; (Semicolon) Termina la sentencia TABLE o MAP y es necesaria. TABLE y MAP
PARTITIONOBJID Disponible para extracción integrada. Esta opción se utiliza para especificar los ID de objeto de las particiones que se van a capturar para las tablas particionadas. TABLE y MAP

MAP MOD_COMPARE_COL( tgt_col = fuente [,…] )

tgt_col debe ser el nombre de la columna de la tabla de destino y debe ser la columna clave para que se aplique correctamente. source puede ser la columna de la tabla de origen, el valor constante (número o cadena), la función de asignación de columnas o los resultados de SQLEXEC. Por ejemplo, source col1 se asigna a target col 1. source col1 antes de que el valor de imagen sea 1, que es un valor ficticio porque está enmascarado por el DBA para la seguridad. Replicat puede consultar el valor de imagen real antes de target col1 por SQLEXEC. Con MOD_COMPARE_COLS(), Replicat sustituye el valor source col1 ficticio por el resultado SQLEXEC, de modo que la operación UPDATE o DELETE funcione correctamente.

TABLE <source_table>[, TARGET <target>]

TABLE es válido en un archivo de parámetros de Extract.

Utilice TABLE para especificar un objeto de origen para el que desea que Extract capture datos. Especifique el nombre completo de dos o tres partes del objeto, como <schema.table> o <catalog.schema.table>. Puede utilizar un comodín para especificar varios objetos con una sentencia TABLE. Para especificar correctamente los nombres de objetos y los comodines, consulte Uso de comodines en nombres de objetos de base de datos y Uso de comodines en argumentos de comando en la documentación de microservicios de Oracle GoldenGate.

Utilice la opción TARGET solo cuando Extract debe hacer referencia a un archivo de definiciones de destino (especificado con el parámetro TARGETDEFS) para realizar conversiones o cuando se utilice la opción COLMAP para asignar columnas. De lo contrario, se puede omitir desde un parámetro TABLE. La asignación de columnas con COLMAP y el trabajo de conversión se suelen realizar en el sistema de destino para minimizar el impacto de las actividades de replicación en el sistema de origen, pero se pueden realizar en el sistema de origen si es necesario. Por ejemplo, la conversión y la asignación de columnas se pueden realizar en el sistema de origen en una configuración en la que hay varios orígenes y un destino. En este caso, puede que sea más fácil gestionar un archivo de definiciones de destino en lugar de gestionar un archivo de definiciones para cada base de datos de origen, especialmente si hay cambios frecuentes en la aplicación que requieren que se generen nuevos archivos de definiciones.

El uso de TARGET en un parámetro TABLE identifica los metadatos de los datos extraídos en función de la estructura de destino, en lugar de la del origen, para reflejar la estructura del registro que se refleja en el archivo de definiciones o en el mapa de columnas. No utilice nombres de tres partes si TARGET especifica tablas en una base de datos de contenedor de Oracle de destino. Replicat solo se puede conectar a un contenedor o catálogo, por lo que se asume que la parte del contenedor o catálogo del nombre es la misma que la que se conecta a Replicat (como se especifica con USERIDALIAS, según la base de datos).

Si no se necesitan otras opciones de sintaxis TABLE para procesar los datos de origen especificados, puede utilizar una sentencia TABLE simple, asegurándose de terminarla con un punto y coma.

 TABLE sales.customers;

A continuación se muestra el uso de un comodín para especificar varias tablas:

 TABLE sales.*;

Las sentencias TABLE anteriores indican a Extract que capture todos los datos de columna soportados para los objetos especificados y los escriba en la pista sin realizar ningún filtrado, conversión u otra manipulación.

MAP <source_table>, TARGET <target_table>

MAP es válido en un archivo de parámetros de Replicat. También puede utilizar MAP en un archivo de parámetros de Extract para cambiar el nombre de las transacciones que almacena Oracle GoldenGate para la tabla. Ver

Utilice MAP para especificar un objeto de origen y utilice TARGET para especificar el objeto de destino al que Replicat aplica los datos de origen replicados. Juntos, las cláusulas MAP y TARGET comprenden una asignación.

A continuación se muestra el uso de un comodín para especificar varias tablas. Tenga en cuenta que la cláusula TARGET no incluye el prefijo tab antes del comodín. Esa especificación no sería válida, porque el comodín se resolvería como sales.tabtab1, sales.tabtab2, etc.

 MAP sales.tab*, TARGET sales.*;

Si no se necesita filtrado, asignación u otro trabajo para los objetos, puede utilizar sentencias MAP simples como las siguientes, asegurándose de terminar cada una con un punto y coma.

MAP sales.customers, TARGET sales.customers;
MAP fin.*, TARGET fin.*;

ATTRCHARSET <(charset)>

ATTRCHARSET es válido para TABLE.

Utilice la cláusula ATTRCHARSET para especificar la información del juego de caracteres de origen en el nivel de atributo UDT. Sustituye el juego de caracteres definido en el archivo de pista o especificado por los parámetros SOURCECHARSET, CHARSET o COLCHARSET.

Los valores válidos son nombres de juegos de caracteres y nombres de atributos UDT válidos. Los nombres de atributo comodín están soportados. Por ejemplo:

TABLE SCHEMA.T*,
  ATTRCHARSET(WE8DEC, col*.attr1, col1.attr*.attr3);

COLCHARSET <character_set>

COLCHARSET es válido para TABLE.

Utilice la cláusula COLCHARSET para especificar cualquier juego de caracteres soportado. Consulte COLCHARSET para obtener más información.

COLMAP <(column_mapping)>

COLMAP es válido para TABLE y MAP.

Utilice COLMAP para:

COLMAP proporciona instrucciones para seleccionar, traducir y mover datos de columna de una columna de origen a una columna de destino. Nota: Para crear reglas globales para la asignación de columnas en todas las tablas de las sentencias MAP posteriores, utilice el parámetro COLMATCH.

Obtención de más información sobre la configuración de la asignación de columnas

Para utilizar COLMAP, se deben tener en cuenta las directrices de configuración relacionadas, como si las estructuras de columna de origen y destino son idénticas o diferentes y si los parámetros de asignación de columna global pueden ser suficientes.

Sintaxis

COLMAP (
[USEDEFAULTS, ]
<target_column> = <source_expression> [BINARYINPUT]
[, ...]
)

USEDEFAULTS

Asigna automáticamente columnas de origen y destino que tienen el mismo nombre si no se han especificado en una asignación de columna explícita. Los tipos de dato se traducen automáticamente, según sea necesario, en función del archivo de definiciones de datos local. USEDEFAULTS elimina la necesidad de una asignación de columna explícita si esas columnas tienen el mismo nombre y los datos no necesitan ningún filtrado ni conversión.

Especifique USEDEFAULTS antes de las asignaciones de columna explícitas en la cláusula COLMAP.

<target_column = source_expression>

Define una asignación explícita de columna de origen-destino.

<target_column>

Especifica el nombre de la columna de destino. Para ver los caracteres soportados en los nombres de columna, consulte Juegos de Caracteres Soportados.

<source_expression>

Puede ser cualquiera de las siguientes opciones:

BINARYINPUT

Utilice BINARYINPUT cuando la columna de destino se defina como un tipo de dato binario, como RAW o BLOB, pero la entrada de origen contiene ceros binarios en la mitad de los datos. La entrada de origen se maneja como entrada binaria y se suprime la sustitución de los valores de datos.

Ejemplo 1

MAP ggs.tran, TARGET ggs.tran2, COLMAP (loc2 = loc, type2 = type);

Ejemplo 2

TABLE ggs.tran, COLMAP (SECTION = @STRCAT('\u00a7', SECTION ));

{COLS | COLSEXCEPT} (<column_list>)

COLS y COLSEXCEPT son válidos para TABLE.

Utilice COLS y COLSEXCEPT para controlar las columnas para las que se capturan los datos.

Para utilizar COLS, se necesita lo siguiente:

Sin una clave primaria, una clave única o una cláusula KEYCOLS en la sentencia TABLE, Oracle GoldenGate utiliza todas las columnas de la tabla, lo que hace que COLS sea innecesario.

Nota: no utilice esta opción para las tablas que un grupo de extracción de pump de datos procesa en modo de transferencia.

Sintaxis

{COLS | COLSEXCEPT} (<column> [, ...])

<column>

Nombre de una columna. Para especificar varios <columns>, cree una lista delimitada por comas, por ejemplo:

COLS (name, city, state, phone)

Nota: Si la base de datos solo registra valores para columnas que se han cambiado en una operación de actualización, puede que una columna especificada para la captura con COLS no esté disponible. Para que esas columnas estén disponibles, utilice la opción FETCHCOLS en la sentencia TABLE o active el registro complementario para la columna.

Ejemplo

COLS <clause> en este ejemplo captura solo <columns> 1 y 3, mientras que COLSEXCEPT <clause> captura todos los <columns> excepto <columns> 1 y 3.

TABLE hq.acct, COLS (col1, col3);
TABLE hq.sales, COLSEXCEPT (col1, col3);

COMPARECOLS (<column_specification>)

COMPARECOLS es válido para MAP.

Utilice COMPARECOLS para especificar las columnas que Replicat utiliza para detectar y resolver conflictos de actualización o supresión cuando se configura con la opción RESOLVECONFLICT de MAP en una configuración de varios maestros. Un conflicto es una discrepancia entre la imagen anterior de un registro en la pista y los datos adecuados en la tabla de destino.

Para utilizar COMPARECOLS, la imagen anterior debe estar disponible en el registro de pista mediante el parámetro GETBEFORECOLS en la sentencia Extract TABLE. Las columnas especificadas deben existir en la base de datos destino y también deben formar parte de la configuración de Replicat (cumpla la especificación TARGET con o sin una cláusula COLMAP).

COMPARECOLS solo soporta los tipos de dato escalares como columnas de comparación. Un tipo de dato escalar se puede utilizar en una cláusula WHERE, tiene un único valor atómico y no tiene componentes internos. Los tipos de dato escalares soportados por Oracle GoldenGate incluyen los siguientes, pero no los LOB.

Algunos ejemplos de tipos de dato no escalares son los datos espaciales, los tipos de dato definidos por el usuario, los objetos grandes (LOB), XML, los tipos de dato de referencia y RAW. Una fila que se considera para CDR puede incluir datos no escalares siempre que el conflicto no esté en los datos no escalares en sí.

Para especificar rutinas de resolución de conflictos, utilice la opción RESOLVECONFLICT de MAP. COMPARECOLS y RESOLVECONFLICT pueden estar en cualquier orden en la sentencia MAP.

Obtención de más información sobre la configuración de la función CDR

Consulte Automatic Conflict Detection and Resolution o Manual Conflict Detection and Resolution para obtener más información sobre la configuración de la resolución y la detección de conflictos.

Sintaxis

COMPARECOLS(
{ON UPDATE | ON DELETE}
{ALL | KEY | KEYINCLUDING (<col>[,...]) | ALLEXCLUDING (<col>[,...]) }
[,...]
)
{ON UPDATE ON DELETE}

Especifica si la imagen anterior de las columnas especificadas se debe comparar para actualizaciones o supresiones. Puede utilizar solo ON UPDATE, solo ON DELETE o ambos. Si utiliza ambos, especifíquelos en la misma cláusula COMPARECOLS. Consulte el ejemplo de cómo utilizar ambos.

{ALL | KEY | KEYINCLUDING (<col>[,...]) | ALLEXCLUDING (<col>[,...])}

Especifica las columnas para las que se captura una imagen anterior.

ALL

Compara todas las columnas de la tabla de destino. Se genera un error si alguna de las imágenes anteriores correspondientes no están disponibles en la pista. El uso de ALL impone la carga de procesamiento más alta para Replicat, pero permite que se realicen comparaciones de detección de conflictos con todas las columnas para obtener la máxima precisión.

KEY

Compara solo las columnas de clave primaria. Esta es la opción más rápida, pero no permite la detección de conflictos más precisa, porque las claves pueden coincidir, pero las columnas no clave pueden ser diferentes.

KEYINCLUDING

Compara las columnas de clave primaria y la columna o columnas especificadas. Este es un compromiso razonable entre la velocidad y la precisión de detección.

ALLEXCLUDING

Compara todas las columnas excepto las columnas especificadas. Para las tablas con numerosas columnas, ALLEXCLUDING puede ser más eficaz que KEYINCLUDING. No excluya las columnas de clave.

Ejemplo 1

En el siguiente ejemplo, las columnas de clave más las columnas name, address y salary se comparan para los conflictos.

MAP src, TARGET tgt
COMPARECOLS (
ON UPDATE KEYINCLUDING (name, address, salary),
ON DELETE KEYINCLUDING (name, address, salary));

Ejemplo 2

En el siguiente ejemplo, se ignora la columna comment y se comparan todas las demás columnas para detectar conflictos.

MAP src, TARGET tgt
COMPARECOLS (ON UPDATE ALLEXCLUDING (comment))

COORDINADO

COORDINATED es válido para MAP. Esta opción es válida cuando Replicat está en modo coordinado.

Utilice la opción COORDINATED para forzar que las transacciones realizadas en objetos de la misma sentencia MAP se procesen como transacciones de barrera. Hace que todos los threads de todas las sentencias MAP se sincronicen con la misma ubicación de pista. La posición sincronizada es el comienzo de la transacción que contiene un registro que cumple con un valor MAP que contiene la palabra clave COORDINATED. A continuación, la transacción se aplica atómicamente mediante un único thread, que es el thread con el thread más bajo ID entre los threads actualmente en ejecución o un thread dedicado con el ID de 0 si se especifica USEDEDICATEDCOORDINATIONTHREAD en el archivo de parámetros.

Las cláusulas THREAD y THREADRANGE especificadas junto con COORDINATED se ignoran porque los threads designados no aplicarán el registro. La palabra clave COORDINATED produce la suspensión temporal del paralelismo para que las tablas de destino estén en un estado consistente antes de que se aplique la transacción coordinada por la fuerza. Después de este punto, la ejecución en paralelo comienza de nuevo.

Replicat coordina por defecto las transacciones en las que se actualiza la clave primaria, las transacciones que realizan DDL y determinadas acciones EVENTACTIONS. COORDINATED prevé una coordinación explícita.

Consulte Acerca de Coordinated Replicat para obtener más información.

Sintaxis

COORDINATED

Ejemplo

A continuación, se muestra un ejemplo del uso de la opción COORDINATED. En este ejemplo, las reglas de negocio necesitan que las tablas de destino tengan un estado consistente antes de que Replicat ejecute transacciones que incluyan operaciones SQLEXEC en los objetos especificados en la sentencia MAP. El paralelismo se debe convertir temporalmente en procesamiento SQL en serie en este caso.

Teniendo en cuenta la siguiente sentencia MAP, si otro thread inserta en t2 un registro con un valor de 100 para col_val antes de que el thread 1 realice la inserción en t1, SQLEXEC suprimirá la fila. Si otros threads siguen procesando el registro que tiene el valor 100, SQLEXEC falla. Por lo tanto, los resultados de esta sentencia MAP no son predecibles.

MAP u1.t1, TARGET u2.t1 SQLEXEC (ID test2, QUERY ' delete from u2.t2 where col_val =100 ', NOPARAMS)), THREAD(1);

Por el contrario, cuando se utiliza COORDINATED, todos los threads se sincronizan en un punto común, incluido el que procesa el registro col_val=100, eliminando así la ambigüedad de los resultados.

MAP u1.t1, TARGET u2.t1 SQLEXEC (ID test2, QUERY ' delete from u2.t2 where col_val =100 ', NOPARAMS)), THREAD(1), COORDINATED;

{DEF| TARGETDEF}<template>

DEF y TARGETDEF son válidos para TABLE y MAP.

Utilice DEF y TARGETDEF para especificar el nombre de una plantilla de definiciones que ha creado la utilidad DEFGEN.

Una plantilla se basa en las definiciones de una tabla específica. Permite agregar nuevas tablas que tengan las mismas definiciones que la tabla original a la configuración de Oracle GoldenGate sin ejecutar DEFGEN para ellas y sin tener que parar e iniciar el proceso de Oracle GoldenGate. Las definiciones de la plantilla se utilizan para las consultas de definiciones.

Sintaxis

{DEF | TARGETDEF} <template>

<template>

Nombre de una de las siguientes plantillas de definiciones generadas por la utilidad DEFGEN:

Las definiciones contenidas en la plantilla deben ser idénticas a las definiciones de la tabla o tablas que se especifican en la misma sentencia TABLE o MAP.

La distinción entre mayúsculas y minúsculas del nombre de la plantilla se observa cuando el nombre se especifica de la misma forma que se almacena en la base de datos. Asegúrese de que el nombre de la plantilla se especifica de la misma manera en la cláusula DEF o TARGETDEF en esta sentencia TABLE o MAP, y en el archivo de parámetros DEFGEN que creó la plantilla.

Ejemplo 1

En este ejemplo, se muestra un nombre de plantilla no sensible a mayúsculas/minúsculas.

MAP acct.cust*, TARGET acct.cust*, DEF custdef;

Ejemplo 2

En este ejemplo se muestra un nombre de plantilla sensible a mayúsculas/minúsculas cuando la base de datos necesita comillas para aplicar la distinción entre mayúsculas y minúsculas.

  TABLE acct.cust*, DEF "CustDef";

Ejemplo 3

En este ejemplo se muestra un caso en el que se utilizan DEF y TARGETDEF.

  MAP acct.cust*, TARGET acc.cust*, DEF custdef, TARGETDEF tcustdef;

SOLO EXCEPCIONES

EXCEPTIONSONLY es válido para MAP.

Utilice EXCEPTIONSONLY en una sentencia MAP de excepciones destinada al manejo de errores. La sentencia MAP de excepciones debe seguir la sentencia MAP para la que se anticipan errores. La sentencia MAP de excepciones se ejecuta solo si se produce un error en el último registro procesado en la sentencia regular MAP anterior.

Para utilizar EXCEPTIONSONLY, utilice una sentencia REPERROR con la opción EXCEPTION, ya sea en la sentencia MAP normal o en la raíz del archivo de parámetros. Consulte REPERROR para obtener más información. Nota: Si utiliza la función de detección y resolución de conflictos (CDR) de Oracle GoldenGate, no se necesita REPERROR con EXCEPTION. CDR envía automáticamente todas las operaciones que causan errores a la sentencia MAP de excepciones.

La sentencia MAP de excepciones debe especificar la misma tabla de origen que en la sentencia MAP normal, pero la tabla de destino de la sentencia MAP de excepciones debe ser una tabla de excepciones.

Nota: Consulte "MAPEXCEPTION (exceptions_mapping)" para admitir nombres de objetos con comodines.

Sintaxis

EXCEPTIONSONLY

EVENTACTIONS (<action>)

EVENTACTIONS es válido para TABLE y MAP. Algunas opciones sólo se aplican a uno u otro parámetro y se indican como tales en las descripciones.

Utilice EVENTACTIONS para que el proceso realice una acción definida basada en un registro de la pista, conocido como registro de evento, que reúna los requisitos para una regla de filtro específica. Puede utilizar este sistema, conocido como sistema de marcadores de eventos (o infraestructura de marcadores de eventos) para personalizar el procesamiento en función de los eventos de la base de datos. Por ejemplo, puede suspender un proceso para realizar una transformación o estadísticas de informes. La función de marcador de eventos está soportada para la replicación de cambios de datos, pero no para cargas iniciales.

Para disparar acciones que no necesitan que se apliquen datos a las tablas de destino, puede utilizar el parámetro Replicat TABLE con opciones de filtrado que soportan EVENTACTIONS. Consulte "TABLE for Replicat" para obtener más información.

Es posible que tenga que combinar dos o más acciones para lograr sus objetivos. Cuando se combinan varias acciones, la sentencia EVENTACTIONS completa se analiza en primer lugar y, a continuación, las opciones especificadas se ejecutan en orden de prioridad. La siguiente lista muestra el orden de prioridad. Las acciones que se muestran antes de Process the record se producen antes de que el registro se escriba en la pista o se aplique al destino (en función del proceso). Las acciones que se muestran después de Process the record se ejecutan después de procesar el registro.

Para evitar que el propio registro de evento se procese de forma normal, utilice la opción IGNORE o DISCARD. Debido a que IGNORE y DISCARD se evalúan antes que el registro en sí, impiden que se procese el registro. Sin esas opciones, EVENTACTIONS para Extract escribe el registro en la pista y EVENTACTIONS para Replicat aplica esa operación a la base de datos de destino.

Debe tener en cuenta la posibilidad de que una transacción pueda contener dos o más registros que activen una acción de evento. En tal caso, podría haber varias ejecuciones de determinadas especificaciones EVENTACTIONS. Por ejemplo, si se encuentran dos registros aptos que activan dos acciones ROLLOVER sucesivas, Extract pasará la pista dos veces, dejando uno de los dos archivos vacío de datos de transacción.

También debe tener en cuenta que cuando el parámetro GETUPDATEBEFORES está en vigor, se generan dos registros para las operaciones UPDATE: un registro que contiene la imagen anterior y un registro que contiene la imagen posterior. Se activa una acción de evento para cada uno de esos registros cuando la operación se considera un registro de evento. Puede utilizar el token BEFOREAFTERINDICATOR de la función de conversión de columna GGHEADER como filtro en una cláusula FILTER para cualificar los registros de modo que la acción de evento se dispare solo una vez, ya sea en el registro anterior o en el registro posterior, pero no en ambos.

El siguiente ejemplo filtra el indicador BEFORE. EVENTACTION emite el comando de shell ECHO para mostrar la cadena 'Disparado en BEFORE' en el log de eventos cuando se encuentra un registro BEFORE.

TABLE qasource.test, &
FILTER(@STRFIND('BEFORE', @GETENV('GGHEADER' , 'BEFOREAFTERINDICATOR')) > 0), &
EVENTACTIONS ( shell ('echo --== Triggered on BEFORE ==-- '), LOG);

A continuación se muestra el resultado del evento <action>:

013-03-06 17:59:31  INFO    OGG-05301  Shell command output: '--== Triggered
on AFTER ==--'

El siguiente ejemplo hace lo mismo, pero para el indicador AFTER.

 TABLE qasource.test, &
 FILTER(@STRFIND('AFTER', @GETENV('GGHEADER' , 'BEFOREAFTERINDICATOR')) > 0), &
 EVENTACTIONS ( shell ('echo --== Triggered on AFTER ==-- '), LOG);

Sintaxis

EVENTACTIONS (
[STOP | SUSPEND | ABORT | FORCESTOP]
[IGNORE [RECORD | TRANSACTION [INCLUDEVENT]]
[DISCARD]
[LOG [INFO | WARNING]]
[REPORT]
[ROLLOVER]
[SHELL '<command>' | SHELL ('<command>', VAR <variable> = {<column_name> | <expression>}
  [, ...]) ]
[TRACE[2] <file> [TRANSACTION] [DDL[INCLUDE] | DDLONLY] [PURGE | APPEND]]
[CHECKPOINT [BEFORE | AFTER | BOTH]]
[, ...]
)

STOP

Válido en TABLE para Extract y en MAP para Replicat.

Lleva el proceso a una parada normal cuando se encuentra el registro de evento especificado. El proceso espera a que se completen otras operaciones dentro de la transacción de evento antes de parar. Si la transacción es una transacción agrupada o por lotes de Replicat, el grupo actual de transacciones se aplica antes de que el proceso se detenga correctamente. El proceso se reinicia en el siguiente registro después del registro de evento, siempre que ese registro también signifique el final de una transacción.

El proceso registra un mensaje si no puede detenerse inmediatamente porque una transacción aún está abierta. Sin embargo, si el registro de evento se encuentra en una transacción abierta de larga ejecución, no hay ningún mensaje de advertencia que le avise del estado sin confirmar de la transacción. Por lo tanto, el proceso puede permanecer en ejecución durante mucho tiempo a pesar del evento STOP.

STOP se puede combinar con otras opciones EVENTACTIONS, excepto ABORT y FORCESTOP.

SUSPEND

Válido en TABLE para Extract y en MAP para Replicat.

Pausa el proceso para que conserve el contexto activo de la ejecución actual y pueda seguir respondiendo a los comandos SEND que se emiten en el cliente de administración. Cuando se suspende un proceso, el comando INFO lo muestra como RUNNING y el campo RBA muestra la última posición del punto de control.

Para reanudar el procesamiento, emita el comando SEND con la opción RESUME.

Para utilizar la opción CHECKPOINT BEFORE junto con SUSPEND, el registro de evento debe ser el inicio de una transacción para que SUSPEND tenga lugar. De esta forma, si el proceso se mata mientras se encuentra en estado suspendido, el registro de evento con la acción SUSPEND es el primer registro que se volverá a procesar al reiniciar. Si se especifican CHECKPOINT BERORE y SUSPEND, pero el registro de evento no es el inicio de una transacción, el proceso finaliza de forma anormal antes de que se pueda realizar SUSPEND.

Para utilizar la opción CHECKPOINT AFTER junto con SUSPEND, se debe ejecutar el comando RESUME antes de que se pueda realizar el punto de control y el registro de evento debe ser un registro COMMIT. Si el proceso finaliza mientras está en estado SUSPEND, el proceso vuelve a procesar la transacción desde la última posición de punto de control al reiniciar.

SUSPEND no se puede combinar con ABORT, pero se puede combinar con todas las demás opciones.

ABORT

Válido en TABLE para Extract y en MAP para Replicat.

Fuerza la salida inmediata del proceso cuando se encuentra el registro de evento especificado, independientemente de que haya o no transacciones abiertas. El registro de evento no se procesa. Se escribe un error fatal en el log y el registro de eventos se escribe en el archivo de desecho si también se especifica DISCARD. El proceso se recuperará al iniciar.

ABORT solo se puede combinar con CHECKPOINT BEFORE, DISCARD, SHELL y REPORT.

FORCESTOP

Válido en TABLE para Extract y en MAP para Replicat.

Fuerza a que el proceso se detenga correctamente cuando se encuentre el registro de evento especificado, pero solo si el registro de evento es la última operación de la transacción o el único registro de la transacción. El registro se escribe normalmente.

Si el registro de evento se encuentra en una transacción abierta de larga ejecución, el proceso escribe un mensaje de advertencia en el log y sale inmediatamente, como en ABORT. En este caso, puede ser necesaria la recuperación al iniciar. Si la acción FORCESTOP se dispara en medio de una transacción de larga ejecución, el proceso se cierra sin un mensaje de advertencia.

FORCESTOP se puede combinar con otras opciones EVENTACTIONS, excepto ABORT, STOP, CHECKPOINT AFTER y CHECKPOINT BOTH. Si se utiliza con ROLLOVER, la renovación solo se produce si el proceso se detiene correctamente.

IGNORE [RECORD TRANSACTION [INCLUDEVENT]]

Válido en TABLE para Extract y en MAP para Replicat.

Ignora parte o la totalidad de la transacción, según la acción seleccionada.

IGNORE se puede combinar con todas las demás opciones EVENTACTIONS, excepto ABORT y DISCARD.

Una vez procesadas todas las operaciones de calificación, filtrado, asignación y salida de usuario, se procesa una acción IGNORE. El registro o la transacción se ignora en la fase de salida final y evita que el registro o la transacción se escriban en el destino de salida (la pista en el caso de Extract o la base de datos en el caso de Replicat). Por lo tanto, en determinadas expresiones, por ejemplo las que incluyen operaciones SQLEXEC, SQLEXEC se ejecutará antes de que se procese IGNORE. Esto significa que, aunque el registro no se escribe en la base de datos de pista o destino, se producirán todos los efectos del procesamiento del registro a través de la calificación, el filtrado, la asignación y la salida de usuario.

Esta acción no es válida para los registros DDL. Debido a que las operaciones DDL son autónomas, ignorar un registro equivale a ignorar toda la transacción.

DISCARD

Válido en TABLE para Extract y en MAP para Replicat.

Hace que el proceso:

El proceso reanuda el proceso con el siguiente registro de la pista.

DISCARD se puede combinar con todas las demás opciones EVENTACTIONS, excepto IGNORE.

LOG [INFO WARNING]

Válido en TABLE para Extract y en MAP para Replicat.

Hace que el proceso registre el evento cuando se encuentra el registro de evento especificado. El mensaje se escribe en el archivo de informe, en el log de errores de Oracle GoldenGate y en el log de eventos del sistema.

Utilice las siguientes opciones para especificar la gravedad del mensaje:

LOG se puede combinar con todas las demás opciones EVENTACTIONS, excepto ABORT. Si se utiliza ABORT, no es necesario LOG porque ABORT registra un error fatal antes de que se cierre el proceso.

REPORT

Válido en TABLE para Extract y en MAP para Replicat.

Hace que el proceso genere un archivo de informe cuando se encuentra el registro de evento especificado. Es lo mismo que utilizar el comando SEND con la opción REPORT en GGSCI.

El mensaje REPORT se produce después de procesar el registro de evento (a menos que se utilicen DISCARD, IGNORE o ABORT), por lo que los datos del informe incluirán el registro de evento.

REPORT se puede combinar con todas las demás opciones EVENTACTIONS.

ROLLOVER

Válido en TABLE para Extract.

Hace que Extract transfiera la pista a un nuevo archivo cuando se encuentra el registro de evento especificado. La acción ROLLOVER se produce antes de que Extract escriba el registro de eventos en el archivo de pista, lo que hace que el registro sea el primero en el nuevo archivo a menos que también se utilicen DISCARD, IGNORE o ABORT.

ROLLOVER se puede combinar con todas las demás opciones EVENTACTIONS, excepto ABORT. ROLLOVER no se puede combinar con ABORT porque ROLLOVER no hace que el proceso escriba un punto de control y ROLLOVER se produce antes que ABORT.

Sin un punto de control ROLLOVER, ABORT hace que Extract vaya a su punto de control anterior al reiniciar, que estaría en el archivo de pista anterior. De hecho, esto cancela la renovación.

SHELL '<command>'

Válido en TABLE para Extract y en MAP para Replicat.

Hace que el proceso ejecute el comando de shell especificado cuando se encuentra el registro de eventos. SHELL '<command'> ejecuta un comando de shell básico. La cadena de comandos se toma en su valor literal y se envía al sistema de esa manera. El comando distingue entre mayúsculas y minúsculas. Incluya la cadena de comandos entre comillas simples, por ejemplo:

 EVENTACTIONS (SHELL 'echo hello world! > output.txt')

Si el comando shell se ejecuta correctamente, el proceso escribe un mensaje informativo en el archivo de informe y en el log de eventos. El éxito se basa en el estado de salida del comando de acuerdo con el lenguaje de shell UNIX. En ese idioma, cero indica éxito.

Si la llamada del sistema no se realiza correctamente, el proceso finaliza de forma anormal con un error grave. En el lenguaje de shell UNIX, distinto de cero equivale a fallo. Tenga en cuenta que el mensaje de error sólo está relacionado con la ejecución del propio comando SHELL y no con el estado de salida de ningún comando subordinado. Por ejemplo, SHELL puede ejecutar un script correctamente, pero los comandos de ese script pueden fallar.

SHELL se puede combinar con todas las demás opciones EVENTACTIONS.

SHELL ('<command>', VAR <variable> = {<column_name> | <expression>} [, ...])

Válido en TABLE para Extract y en MAP para Replicat.

Hace que el proceso ejecute el comando de shell especificado cuando se encuentra el registro de eventos y admite la transferencia de parámetros. El comando y los parámetros distinguen mayúsculas de minúsculas.

Cuando se utiliza SHELL con argumentos, todas las cadenas de argumentos y <command> se deben incluir entre paréntesis, por ejemplo:

 EVENTACTIONS (SHELL
 ('Current timestamp: $1  SQLEXEC result is $2 ',VAR $1 = @GETENV('JULIANTIMESTAMP'),
 VAR $2 = mytest.description));

La entrada es la siguiente:

<command>

Es el comando, que se pasa literalmente al sistema.

VAR

Es una palabra clave necesaria que inicia la entrada del parámetro.

<variable>

Es el nombre definido por el usuario de la variable de marcador de posición donde se sustituirá el valor de la variable de tiempo de ejecución. Las variables adicionales que no se utilizan en el comando se ignoran. Tenga en cuenta que cualquier literal del comando SHELL que coincida con un nombre de variable VAR se sustituye por el valor VAR sustituido. Esto puede tener consecuencias no deseadas, así que prueba tu código antes de ponerlo en producción.

<column_name>

Puede ser la imagen anterior o posterior (actual) de un valor de columna.

<expression>

puede ser el siguiente, dependiendo de si se están manejando los datos de columna o DDL.

<TRACE[2]file> [TRANSACTION] [DDL[INCLUDE] | DDLONLY] [PURGE | APPEND]

Válido en TABLE para Extract y en MAP para Replicat.

Hace que la información de rastreo del proceso se escriba en un archivo de rastreo cuando se encuentra el registro de evento especificado. TRACE proporciona información de procesamiento paso a paso. TRACE2 identifica los segmentos de código en los que el proceso pasa la mayor parte del tiempo.

Por defecto (sin opciones), el rastreo DML estándar sin directrices de límites de transacción está activado hasta que el proceso termina.

TRACE se puede combinar con todas las demás opciones EVENTACTIONS, excepto ABORT.

Para desactivar el rastreo en el archivo de rastreo especificado, ejecute el comando de proceso SEND de GGSCI con la opción TRACE OFF <file_name>.

CHECKPOINT [BEFORE AFTER BOTH]

Válido en TABLE para Extract y en MAP para Replicat.

Hace que el proceso escriba un punto de control cuando se encuentra el registro de evento especificado. Las acciones de punto de control proporcionan un contexto alrededor del procesamiento definido en las sentencias TABLE o MAP. Este contexto tiene un punto inicial y un punto final, lo que proporciona puntos de sincronización para asignar las funciones que se realizan con SQLEXEC y las salidas de usuario.

BEFORE

BEFORE para un proceso de extracción escribe un punto de control antes de que Extract escriba el registro de eventos en la pista. BEFORE para un proceso de Replicat escribe un punto de control antes de que Replicat aplique la operación SQL que está contenida en el registro al destino.

BEFORE requiere que el registro de evento sea el primer registro de una transacción. Si no es el primer registro, el proceso finalizará de forma anormal. Utilice BEFORE para asegurarse de que se confirman todas las transacciones anteriores a la que comienza con el registro de evento.

Al utilizar EVENTACTIONS para un registro DDL, tenga en cuenta que, dado que cada registro DDL es autónomo, se garantiza que el registro DDL sea el inicio de una transacción; por lo tanto, la acción de evento CHECKPOINT BEFORE está implícita para un registro DDL.

CHECKPOINT BEFORE se puede combinar con todas las opciones EVENTACTIONS.

AFTER

AFTER para Extract escribe un punto de control después de que Extract escriba el registro de eventos en la pista. AFTER para Replicat escribe un punto de control después de que Replicat aplique la operación SQL que está contenida en el registro al destino.

AFTER marca la solicitud de punto de control como asesor, lo que significa que el proceso solo emitirá un punto de control en la siguiente oportunidad práctica. Por ejemplo, en el caso de que el registro de evento sea una transacción de varios registros, el punto de control se realizará en el siguiente límite de transacción, de acuerdo con el modelo de integridad de datos de Oracle GoldenGate.

Al utilizar EVENTACTIONS para un registro DDL, tenga en cuenta que, dado que cada registro DDL es autónomo, se garantiza que el registro DDL sea el final (límite) de una transacción; por lo tanto, la acción de evento CHECKPOINT AFTER está implícita para un registro DDL.

CHECKPOINT AFTER se puede combinar con todas las opciones EVENTACTIONS, excepto ABORT.

BOTH

BOTH combina BEFORE y AFTER. El proceso Extract o Replicat escribe un punto de control antes y después de procesar el registro de evento.

CHECKPOINT BOTH se puede combinar con todas las opciones EVENTACTIONS, excepto ABORT.

CHECKPOINT se puede acortar a CP.

Ejemplo 1

En el siguiente ejemplo, se muestra cómo puede configurar un proceso para ignorar determinados registros. Cuando Extract procesa cualquier registro de pista que tenga name = abc, ignora el registro.

TABLE fin.cust, &
WHERE (name = 'abc'), &
EVENTACTIONS (ignore);

Ejemplo 2

En función de las reglas de compatibilidad y prioridad de las opciones EVENTACTIONS, DISCARD tiene una prioridad mayor que ABORT, por lo que en este ejemplo el registro de evento se escribe en el archivo de desecho antes de que el proceso finalice de forma anormal.

MAP fin.cust, TARGET fin.cust2, &
WHERE (name = 'abc'), &
EVENTACTIONS (DISCARD, ABORT);

Ejemplo 3

En el siguiente ejemplo se ejecuta una acción SHELL. Obtiene el resultado de una consulta SQLEXEC y la empareja con el registro de hora actual.

TABLE src.tab &
SQLEXEC (id mytest, query 'select description from lookup &
where pop = :mycol2', params (mycol2 = col2) ), &
EVENTACTIONS (SHELL ('Current timestamp: $1  SQLEXEC result is $2 ', &
VAR $1 = @GETENV('JULIANTIMESTAMP'), VAR $2 = mytest.description));

El shell <command> que resulta de este ejemplo podría ser similar al siguiente:

'Current timestamp: 212156002704718000  SQLEXEC result is test passed'

Ejemplo 4

El siguiente ejemplo muestra cómo se pueden producir resultados no válidos si un nombre de marcador de posición entra en conflicto con el texto literal de la cadena de comandos. En este ejemplo, un marcador de posición denominado $1 está asociado a un valor de columna y el comando SHELL se hace eco de una cadena literal que incluye $1.

MAP src.tab1, TARGET targ.tab1 &
EVENTACTIONS (SHELL ('echo Extra charge for $1 is $1', VAR $1 = COL1));

Este es el resultado no deseado, suponiendo que el valor <column> es gift wrap:

'Extra charge for gift wrap is gift wrap'

El cambio del marcador de posición <variable> a $col da como resultado la salida correcta:

MAP src.tab1, TARGET targ.tab1 &
EVENTACTIONS (SHELL ('echo Extra charge for $col is $1', VAR $col = COL1));
'Extra charge for gift wrap is $1'

A continuación, se muestra un potencial similar para resultados no deseados:

MAP src.tab1, TARGET targ.tab1 &
EVENTACTIONS (SHELL ('Timestamp: $1  Price is $13 > out.txt ', &
VAR $1 = @GETENV('JULIANTIMESTAMP')));

La salida redirigida <file> puede contener un valor <string> como este (tenga en cuenta que el segundo registro de hora contiene un valor agregado de 3):

'Timestamp: 212156002704718000 Price is 2121560027047180003'

El resultado previsto es el siguiente:

'Timestamp: 212156002704718000 Price is $13'

Ejemplo 5

En estos ejemplos se muestran diferentes formas de configurar el rastreo.

MAP tab1, TARGET tab1 EVENTACTIONS (TRACE ./dirrpt/trace
1.txt);
MAP tab2, TARGET tab2 EVENTACTIONS (TRACE ./dirrpt/trace2.txt TRANSACTION);

Ejemplo 6

A continuación, se muestra cómo se puede utilizar EVENTACTIONS con SUSPEND.

EXITPARAM '<parameter>'

EXITPARAM es válido para TABLE y MAP.

Utilice EXITPARAM para transferir un parámetro a la función EXIT_PARAMS de una rutina de salida de usuario siempre que se encuentre un registro de la sentencia TABLE o MAP.

Sintaxis

EXITPARAM '<parameter string>'

<'parameter string'>

Parámetro que es una cadena literal. Incluya el parámetro entre comillas simples. Puede especificar hasta 100 caracteres para la cadena de parámetros.

RECUPERAR FILTRO PREVIO

FETCHBEFOREFILTER es válido para TABLE.

Utilice FETCHBEFOREFILTER para recuperar columnas que se especifican con FETCHCOLS o FETCHCOLSEXCEPT antes de ejecutar una operación FILTER. La recuperación antes del filtro garantiza que los valores necesarios para el filtro estén disponibles. Sin FETCHBEFOREFILTER, las recuperaciones especificadas con FETCHCOLS o FETCHCOLSEXCEPT no se realizan hasta que se ejecutan los filtros. Especifique FETCHBEFOREFILTER antes de FILTER en el archivo de parámetros.

No utilice esta opción para las tablas que se procesan en modo de transferencia por un grupo de extracción de pump de datos.

Sintaxis

FETCHBEFOREFILTER

Ejemplo

TABLE hr.salary, FETCHCOLS (<sal_level>),
FETCHBEFOREFILTER,
FILTER (sal_level >= 8)
;

{FETCHCOLS | FETCHCOLSEXCEPT} (<column_list>)

FETCHCOLS y FETCHCOLSEXCEPT son válidos para TABLE. Estas opciones solo son válidas para la extracción principal.

Utilice FETCHCOLS y FETCHCOLSEXCEPT para recuperar los valores de columna de la base de datos cuando los valores no estén presentes en el registro del log de transacciones. Utilice esta opción si la base de datos solo registra los valores de las columnas que se han cambiado en una operación de actualización, pero debe asegurarse de que hay disponibles otros valores de columna necesarios para las operaciones FILTER.

FETCHCOLS y FETCHCOLSEXCEPT son válidos para todas las bases de datos soportadas por Oracle GoldenGate.

Para Oracle AI Database, Oracle GoldenGate recupera los valores del tablespace de deshacer mediante el mecanismo de consulta de flashback de Oracle. La consulta proporciona una imagen de lectura consistente de las columnas a partir de una hora o SCN específicos. Para obtener más información sobre cómo Oracle GoldenGate utiliza la consulta de flashback.

En lugar de utilizar FETCHCOLS o FETCHCOLSEXCEPT, puede ser más eficaz activar el registro complementario para las columnas deseadas.

Para controlar la recuperación y activar una respuesta cuando no se puede encontrar una columna especificada para la recuperación, utilice el parámetro FETCHOPTIONS. Para incluir los resultados de recuperación en las pantallas estadísticas generadas por el comando STATS EXTRACT, utilice el parámetro STATOPTIONS.

Si los valores de las columnas especificadas con FETCHCOLS o FETCHCOLSEXCEPT están presentes en el log de transacciones, no se realiza ninguna recuperación de base de datos. Esto reduce la sobrecarga de la base de datos.

Sintaxis

{FETCHCOLS | FETCHCOLSEXCEPT} (<column> [, ...])

<column>

Puede ser uno de los siguientes:

Ejemplo

La cláusula FETCHCOLS de este ejemplo recupera solo las columnas 1 y 3, mientras que la cláusula FETCHCOLSEXCEPT recupera todas las columnas excepto las columnas 1 y 3.

TABLE hq.acct, FETCHCOLS (col1, col3);
TABLE hq.sales, FETCHCOLSEXCEPT (col1, col3);

{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (<column_list>)

FETCHMODCOLS y FETCHMODCOLSEXCEPT son válidos para TABLE. Estas opciones solo son válidas para la extracción principal.

Utilice FETCHMODCOLS y FETCHMODCOLSEXCEPT para forzar que los valores de columna se recuperen de la base de datos incluso si las columnas están presentes en el log de transacciones. Según el tipo de base de datos, un registro log puede contener todas las columnas de una tabla o solo las columnas que han cambiado en la operación de transacción especificada.

FETCHMODCOLS y FETCHMODCOLSEXCEPT son válidos para todas las bases de datos soportadas por Oracle GoldenGate.

Observe las siguientes directrices de uso:

Sintaxis

{FETCHMODCOLS | FETCHMODCOLSEXCEPT} (<column> [, ...])

(<column> [, ...])

Puede ser uno de los siguientes:

Ejemplo

La cláusula FETCHMODCOLS de este ejemplo recupera solo las columnas 1 y 3, mientras que la cláusula FETCHMODCOLSEXCEPT recupera todas las columnas excepto las columnas 1 y 3.

TABLE hq.acct, FETCHMODCOLS (col1, col3);
TABLE hq.sales, FETCHMODCOLSEXCEPT (col1, col3);

FILTER (<filter_clause>)

FILTER es válido para TABLE y MAP.

Utilice FILTER para seleccionar o excluir registros en función de un valor numérico. Una expresión de filtro puede utilizar operadores condicionales, funciones de conversión de columnas de Oracle GoldenGate o ambos. Nota: Para filtrar según una cadena, utilice una de las funciones de cadena de Oracle GoldenGate. Consulte "Funciones de Asignación de Tablas y Columnas" para obtener más información sobre estas funciones. También puede utilizar la opción WHERE. Consulte "WHERE (cláusula)".

Separe todos los componentes FILTER con comas. Una cláusula FILTER puede incluir lo siguiente:

Encerrar literales entre comillas simples. Especifique los nombres de columna sensibles a mayúsculas/minúsculas a medida que se almacenan en la base de datos y escríbalos entre comillas dobles si la base de datos necesita comillas para aplicar la distinción entre mayúsculas y minúsculas (como Oracle).

Oracle GoldenGate soporta FILTER para columnas que tienen un juego de caracteres de varios bytes.

Sintaxis

FILTER (
[, ON INSERT | ON UPDATE| ON DELETE]
[, IGNORE INSERT | IGNORE UPDATE | IGNORE DELETE]
, <filter_clause>
[, RAISEERROR <error_number>]
)

<filter_clause>

Selecciona registros basados en <expression>, como:

FILTER ((PRODUCT_PRICE*PRODUCT_AMOUNT) > 10000))

Puede utilizar las funciones de conversión de columnas de Oracle GoldenGate en un filtro <clause>, como en:

FILTER (@COMPUTE (PRODUCT_PRICE*PRODUCT_AMOUNT)>10000)

Encerrar literales entre comillas simples. Especifique los nombres de columna sensibles a mayúsculas/minúsculas a medida que se almacenan en la base de datos y escríbalos entre comillas dobles si la base de datos necesita comillas para aplicar la distinción entre mayúsculas y minúsculas (como Oracle).

Oracle GoldenGate no soporta FILTER para las columnas que tienen un juego de caracteres de varios bytes o un juego de caracteres que no es compatible con el juego de caracteres del sistema operativo local.

El tamaño máximo de la cláusula de filtro es de 5.000 bytes.

ON INSERT ON UPDATE ON DELETE

Restringe el filtrado de registros a las operaciones especificadas. Separe las operaciones con comas, por ejemplo:

FILTER (ON UPDATE, ON DELETE,
@COMPUTE (PRODUCT_PRICE*PRODUCT_AMOUNT)>10000)

El ejemplo anterior ejecuta el filtro para las operaciones UPDATE y DELETE, pero no para las operaciones INSERT.

IGNORE INSERT IGNORE UPDATE IGNORE DELETE

No aplica el filtro para las operaciones especificadas. Separe las operaciones con comas, por ejemplo:

FILTER (IGNORE INSERT, @COMPUTE (PRODUCT_PRICE*PRODUCT_AMOUNT)>10000)

En el ejemplo anterior se ejecuta el filtro en las operaciones UPDATE y DELETE, pero se ignoran las operaciones INSERT.

RAISEERROR <error>

Genera un número de error definido por el usuario si el filtro falla. Se puede utilizar como entrada para el parámetro REPERROR para llamar al manejo de errores. Asegúrese de que el valor de <error> está fuera del rango de números de error que utiliza la base de datos o Oracle GoldenGate. Por ejemplo: RAISEERROR 21000.

GETBEFORECOLS (<column_specification>)

GETBEFORECOLS es válido para TABLE.

Utilice GETBEFORECOLS para especificar las columnas para las que desea que se capture y escriba la imagen antes de la pista en una operación de actualización o supresión. Utilice GETBEFORECOLS cuando utilice la función de detección y resolución de conflictos (CDR) de Oracle GoldenGate en una configuración bidireccional o de varios maestros. También se utiliza cuando se utilizan funciones de conversión u otras funciones de procesamiento que requieren la imagen anterior de un registro.

Para las actualizaciones, la imagen anterior de las columnas especificadas se incluye en la pista tanto si se modifica una columna determinada como si no. Además de las columnas especificadas en la cláusula GETBEFORECOLS, Oracle AI Database también registrará la imagen anterior de otras columnas que se modifican. Para otras bases de datos soportadas, puede utilizar el parámetro GETUPDATEBEFORES para forzar la inclusión de los valores anteriores de otras columnas que se modifican.

Nota: GETUPDATEBEFORES sustituye a GETBEFORECOLS si ambos se utilizan en el mismo archivo de parámetros.

Para utilizar este parámetro, el registro complementario debe estar activado para cualquier base de datos que no registre antes de los valores por defecto.

GETBEFORECOLS sustituye COMPRESSUPDATES y COMPRESSDELETES si se utiliza en el mismo archivo de parámetros.

Este parámetro es válido para todas las bases de datos excepto Db2 z/OS. Para Db2 z/OS en todas las plataformas soportadas por Oracle GoldenGate, utilice el parámetro GETUPDATEBEFORES en lugar de GETBEFORECOLS.

Sintaxis

GETBEFORECOLS(
{ON UPDATE | ON DELETE}
{ALL | KEY | KEYINCLUDING (<col>[,...])  | KEYANDMOD | | ALLEXCLUDING (<col>[,...]) }
[,...]
)
{ON UPDATE ON DELETE}

Especifica si se debe capturar la imagen anterior de las columnas especificadas para actualizaciones o supresiones. Puede utilizar solo ON UPDATE, solo ON DELETE o ambos. Si utiliza ambos, especifíquelos en la misma cláusula GETBEFORECOLS. Consulte el ejemplo para ver cómo utilizar ambos.

{ALL | KEY | KEYINCLUDING (<col>[,...]) | KEYANDMOD | ALLEXCLUDING (<col>[,...])}

Especifica las columnas para las que se captura una imagen anterior.

ALL

Captura una imagen anterior de todas las columnas de tipo de dato soportadas en la tabla de destino, incluida la clave primaria; todas las columnas no soportadas se omiten y se registran en el archivo de parámetros Extract o Replicat como un mensaje de información. Esto impone la carga de procesamiento más alta para Extract, pero permite realizar comparaciones de detección de conflictos utilizando todas las columnas para obtener la máxima precisión.

KEY

Capture antes de la imagen solo para la clave primaria. Esta es la opción más rápida, pero no permite la detección de conflictos más precisa, porque las claves pueden coincidir, pero las columnas no clave pueden ser diferentes. KEY es el valor por defecto.

KEYINCLUDING

Capturar antes de la imagen de la clave primaria y también la columna o columnas especificadas. Este es un compromiso razonable entre la velocidad y la precisión de detección.

KEYANDMOD

Utilice esta opción como extensión de la opción de clave para Extract y Replicat. Para actualizar DML en el origen, Extract registra la clave y las columnas modificadas. El replicat en el destino utilizará las columnas KEY y MODIFIED durante la detección de conflictos en una cláusula WHERE. Con las bases de datos de Oracle AI, la columna modificada siempre se utiliza por defecto para la detección de conflictos y este parámetro lo hace explícito.

ALLEXCLUDING

Capturar antes de la imagen de todas las columnas excepto las columnas especificadas. Para las tablas con numerosas columnas, ALLEXCLUDING puede ser más eficaz que KEYINCLUDING. No excluya las columnas de clave.

Ejemplo

En el siguiente ejemplo, las imágenes anteriores de las columnas de clave más name, address y salary siempre se escriben en el archivo de pista en las operaciones de actualización y supresión.

TABLE src,
GETBEFORECOLS (
ON UPDATE KEYINCLUDING (name, address,  salary),
ON DELETE KEYINCLUDING (name, address, salary));

HANDLECOLLISIONS | NOHANDLECOLLISIONS

HANDLECOLLISIONS y NOHANDLECOLLISIONS son válidos para MAP.

Utilice HANDLECOLLISIONS y NOHANDLECOLLISIONS para controlar si Oracle GoldenGate concilia o no los resultados de una carga inicial con cambios transaccionales replicados que se realizan en las mismas tablas. Cuando Oracle GoldenGate aplica cambios replicados una vez finalizada la carga, HANDLECOLLISIONS hace que Replicat sobrescriba los registros duplicados en las tablas de destino y proporciona un manejo alternativo de los errores de los registros que faltan.

HANDLECOLLISIONS y NOHANDLECOLLISIONS se pueden utilizar globalmente para todas las sentencias MAP del archivo de parámetros o como conmutador ON/OFF para grupos de tablas especificados con sentencias MAP, y se pueden utilizar dentro de una sentencia MAP. Cuando se utilizan en una sentencia MAP, sustituyen las especificaciones globales.

Consulte "HANDLECOLLISIONS | NOHANDLECOLLISIONS" para obtener sintaxis y uso.

INSERTALLRECORDS

INSERTALLRECORDS es válido para MAP.

Utilice el parámetro INSERTALLRECORDS para convertir todas las operaciones asignadas en operaciones INSERT en el destino. INSERTALLRECORDS se puede utilizar en el nivel raíz del archivo de parámetros, en una sentencia MAP y en una cláusula MAPEXCEPTION de una sentencia MAP.

Consulte "INSERTALLRECORDS" para obtener sintaxis y uso.

INSERTAPPEND | NOINSERTAPPEND

INSERTAPPEND es válido para MAP.

Utilice los parámetros INSERTAPPEND y NOINSERTAPPEND para controlar si Replicat utiliza o no una indicación APPEND cuando aplica operaciones INSERT a las tablas de destino de Oracle. Estos parámetros sólo son válidos para las bases de datos Oracle.

Consulte "INSERTAPPEND | NOINSERTAPPEND" para obtener sintaxis y uso.

KEYCOLS (<columns>)

KEYCOLS es válido para TABLE y MAP.

Utilice KEYCOLS para definir una o más columnas de la tabla de destino como únicas. El uso principal para KEYCOLS es definir una clave primaria sustitutiva cuando no hay disponible una clave primaria o un índice único adecuado para la tabla. También puede utilizar KEYCOLS para especificar columnas adicionales que utilizar en el identificador de fila que utiliza Replicat. Sin la disponibilidad de una clave o una cláusula KEYCOLS, Replicat utiliza todas las columnas de la tabla para crear su cláusula WHERE, realizando esencialmente una exploración de tabla completa.

Las columnas de una clave representada por KEYCOLS deben identificar de forma única una fila y deben coincidir con las columnas que se utilizan como clave en la tabla de origen. La tabla de origen debe contener al menos tantas columnas de clave o índice como la clave KEYCOLS especificada para la tabla de destino. De lo contrario, en caso de que se actualice la clave de origen o las columnas de índice, Replicat no tendrá las imágenes anteriores para las columnas KEYCOL de destino adicionales.

Al definir una clave de sustitución con KEYCOLS, tenga en cuenta las siguientes directrices:

Al utilizar KEYCOLS, asegúrese de que las columnas especificadas están configuradas para el registro, de modo que estén disponibles para Replicat en los registros de pista. Para una base de datos Oracle AI, puede activar el registro mediante la opción COLS del comando ADD TRANDATA.

En las tablas de destino, cree un índice único en las columnas de clave definidas por KEYCOLS. Un índice mejora la velocidad con la que Oracle GoldenGate localiza las filas de destino que necesita procesar.

No utilice KEYCOLS para las tablas que está procesando un grupo de extracción de pump de datos en modo de transferencia.

Directrices adicionales para KEYCOLS al utilizar Parallel Replicat o Integrated Replicat:

Sintaxis

KEYCOLS (<column> [, ... ])

<column>

Define una columna que se utilizará como clave primaria sustituta. Si existe una clave primaria o única, esas columnas se deben incluir en la especificación KEYCOLS. Para especificar varias columnas, cree una lista delimitada por comas como en:

KEYCOLS (id, name)

Los siguientes tipos de columna no están soportados en KEYCOLS:

Ejemplo

KEYCOLS

MAPEXCEPTION (<exceptions_mapping>)

MAPEXCEPTIONS es válido para MAP.

Utilice MAPEXCEPTION como parte de una sentencia MAP de excepciones destinada al manejo de errores. MAPEXCEPTION asigna operaciones fallidas que el parámetro REPERROR marca como excepciones a una tabla de excepciones. Replicat escribe los valores de estas operaciones junto con otra información en la tabla de excepciones.

Puede utilizar MAPEXCEPTION en la misma sentencia MAP que incluye la asignación de tabla de origen-destino y otras opciones MAP estándar. Los nombres de las tablas de origen y destino pueden incluir comodines.

Al utilizar MAPEXCEPTION, utilice una sentencia REPERROR con la opción EXCEPTION dentro de la misma sentencia MAP o en la raíz del archivo de parámetros de Replicat. Consulte "EXCEPTIONSONLY" y "REPERROR".

Sintaxis

MAPEXCEPTION (TARGET <exceptions_table>, INSERTALLRECORDS [, <exception_MAP_options>])

TARGET <exceptions_table>

Nombre totalmente cualificado de la tabla de excepciones. Las reglas estándar de Oracle GoldenGate para los nombres de objetos se aplican al nombre de la tabla de excepciones.

<exception_MAP_options>

Cualquier opción válida del parámetro MAP que desee aplicar al manejo de excepciones.

INSERTALLRECORDS

Aplica todas las excepciones a la tabla de excepciones como operaciones INSERT. Este parámetro es necesario cuando se utiliza MAPEXCEPTION.

Ejemplo

Este es un ejemplo de cómo utilizar MAPEXCEPTION para la asignación de excepciones. Las cláusulas MAP y TARGET contienen nombres de tabla de origen y destino con comodines. Las excepciones que se producen al procesar cualquier tabla con un nombre que empiece por TRX se capturarán en la tabla fin.trxexceptions mediante la asignación especificada.

MAP src.trx*, TARGET trg.*,
MAPEXCEPTION (TARGET fin.trxexceptions,
INSERTALLRECORDS,
COLMAP (USEDEFAULTS,
ACCT_NO = ACCT_NO,
OPTYPE = @GETENV ('LASTERR', 'OPTYPE'),
DBERR = @GETENV ('LASTERR', 'DBERRNUM'),
DBERRMSG = @GETENV ('LASTERR', 'DBERRMSG')
)
);

MAPALLCOLUMNS | NOMAPALLCOLUMNS

MAPALLCOLUMNS y NOMAPALLCOLUMNS son válidos para MAP.

Utilice MAPALLCOLUMNS para obtener columnas sin asignar (no de clave). Cuando se especifica esta opción, Extract o Replicat comprueba si todas las columnas de origen se asignan directamente al destino sin la función de asignación de columnas. Si no hay ninguna columna de origen asignada, Extract y/o Replicat finalizan de forma anormal.

Consulte "MAPALLCOLUMNS| NOMAPALLCOLUMNS".

MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS

MAPINVISIBLECOLUMNS y NOMAPINVISIBLECOLUMNS son válidos para MAP.

Utilice MAPINVISIBLECOLUMNS y NOMAPINVISIBLECOLUMNS para controlar si Replicat incluye o no columnas invisibles en las tablas de destino de Oracle para la asignación de columnas por defecto. En el caso de las columnas invisibles de las tablas de destino de Oracle que utilizan la asignación explícita de columnas, siempre se asignan, por lo que no es necesaria esta opción.

MAPINVISIBLECOLUMNS y NOMAPINVISIBLECOLUMNS se pueden utilizar de dos maneras diferentes. Cuando se especifica en un nivel global, un parámetro permanece en vigor para todas las sentencias MAP posteriores, hasta que se especifica el otro parámetro. Cuando se utilizan en una sentencia MAP, sustituyen las especificaciones globales

Consulte "MAPINVISIBLECOLUMNS | NOMAPINVISIBLECOLUMNS" para obtener sintaxis y uso.

REPERROR (<error>,<response>)

REPERROR es válido para MAP.

Utilice REPERROR para especificar un error y una respuesta que controlen juntos la forma en que Replicat responde al error al ejecutar la sentencia MAP. Puede utilizar REPERROR en el nivel MAP para sustituir y complementar las reglas de manejo de errores globales definidas con el parámetro REPERROR en el nivel raíz del archivo de parámetros. Se pueden aplicar varias sentencias REPERROR a la misma sentencia MAP para activar la gestión automática y completa de errores y el procesamiento de replicación sin interrupciones.

Para ver la sintaxis y las descripciones, consulte "REPERROR".

RESOLVECONFLICT (<conflict_resolution_specification>)

RESOLVECONFLICT es válido para MAP.

Utilice RESOLVECONFLICT en una configuración bidireccional o de varios maestros para especificar cómo gestiona Replicat los conflictos en las operaciones realizadas en las tablas de la sentencia MAP.

Se pueden especificar varias resoluciones para el mismo tipo de conflicto y se ejecutan en el orden indicado en RESOLVECONFLICT. Las resoluciones múltiples se limitan solo a conflictos INSERTROWEXISTS y UPDATEROWEXISTS.

RESOLVECONFLICT se puede utilizar varias veces en una sentencia MAP para especificar diferentes resoluciones para diferentes tipos de conflicto.

A continuación se muestran los tipos de dato y las plataformas que soporta RESOLVECONFLICT.

Sintaxis

RESOLVECONFLICT (
{INSERTROWEXISTS | UPDATEROWEXISTS | UPDATEROWMISSING |
   DELETEROWEXISTS | DELETEROWMISSING}
( {DEFAULT | <resolution_name>},
  {USEMAX (<resolution_column>) | USEMAXEQ (<resolution_column>) | USEMIN (<resolution_column>) | USEMINEQ (<resolution_column>) | USEDELTA |
     DISCARD | OVERWRITE | IGNORE}
 )
[, COLS (<column>[,...])]
)
INSERTROWEXISTS UPDATEROWEXISTS UPDATEROWMISSING
DELETEROWEXISTS DELETEROWMISSING  

El tipo de conflicto que maneja esta resolución.

INSERTROWEXISTS

Una fila insertada viola una restricción de unicidad en el destino.

UPDATEROWEXISTS

Existe una fila actualizada en el destino, pero una o más columnas tienen una imagen anterior en la pista que es diferente del valor actual en la base de datos.

UPDATEROWMISSING

No existe una fila actualizada en el destino.

DELETEROWEXISTS

Existe una fila suprimida en el destino, pero una o más columnas tienen una imagen anterior en la pista que es diferente del valor actual en la base de datos.

DELETEROWMISSING

No existe una fila suprimida en el destino.

DEFAULT | <resolution_name>

DEFAULT

El grupo de columnas por defecto. La resolución que está asociada al grupo de columnas DEFAULT se utiliza para todas las columnas que no están en un grupo de columnas con nombre explícito. Debe definir un grupo de columnas DEFAULT.

<resolution_name>

Nombre de un grupo de columnas específico que está enlazado a un tipo de resolución específico. Proporcione un nombre que identifique el tipo de resolución. Los valores válidos son caracteres alfanuméricos. Evite espacios y caracteres especiales, pero se permiten caracteres de subrayado, por ejemplo:

delta_res_method

Utilice una resolución con nombre o DEFAULT, pero no ambas.

USEMAX (<resolution_column>) | USEMAXEQ (<resolution_column>) | USEMIN (<resolution_column>) | USEMINEQ (<resolution_column>) | USEDELTA |    
DISCARD OVERWRITE IGNORE

La lógica del manejador de conflictos que se utiliza para resolver el conflicto. Las resoluciones válidas son:

USEMAX

Si el valor de <resolution_column> en el registro de pista es mayor que el valor de la columna en la base de datos, se realiza la acción adecuada.

USEMAXEQ

Si el valor de <resolution_column> en el registro de pista es mayor o igual que el valor de la columna en la base de datos, se realiza la acción adecuada.

USEMIN

Si el valor de <resolution_column> en el registro de pista es menor que el valor de <column> en la base de datos, se realiza el <action> adecuado:

USEMINEQ

Si el valor de <resolution_column> en el registro de pista es menor o igual que el valor de <column> en la base de datos, se realiza el <action> adecuado:

<resolution_column>

Nombre de una columna NOT NULL que sirve como columna de resolución. Esta columna debe formar parte del grupo de columnas asociado a esta resolución. El valor de la columna de resolución en comparación con el valor actual de la base de datos de destino determina cómo se debe aplicar una resolución. La imagen posterior de la columna de resolución se utiliza para la comparación, si está disponible; de lo contrario, se utiliza el valor de imagen anterior. Utilice una columna que se pueda comparar mediante SQL simple:

Para utilizar una resolución de registro de hora más reciente, utilice una columna de registro de hora como <resolution_column> y defina la columna de registro de hora en la hora actual cuando se inserte o actualice una fila. Si es posible, defina la columna de resolución con el tipo de dato SYSTIMESTAMP, que soporta segundos fraccionarios. Cuando se realizan comparaciones con granularidad de subsegundos, hay poca necesidad de manejadores de conflictos que rompan vínculos que resuelvan casos en los que el valor de la columna de resolución es idéntico tanto en la pista como en el destino. Si se asegura de que el valor de la columna de registro de hora solo puede aumentar o disminuir (según la resolución), USEMAX y USEMIN no provocan divergencia de datos.

Nota:

No utilice una columna de clave primaria como columna de resolución en una sentencia USEMAX para el conflicto UPDATEROWEXISTS. De lo contrario, Replicat finaliza de forma anormal con un error similar al siguiente:

  2013-04-04 10:18:38 ERROR OGG-01922 Missing RESOLUTION COLUMN NAME while mapping to target table "FIN"."ACCT".

USEDELTA

(Sólo conflicto UPDATEROWEXISTS) Agregue la diferencia entre los valores antes y después del registro de pista y el valor actual de la columna en la base de datos de destino. Si alguno de los valores es NULL, se emite un error. Base USEDELTA en columnas que contienen tipos de dato NUMERIC. USEDELTA es útil en una configuración de varios nodos cuando una fila se actualiza simultáneamente en varios nodos. Propaga sólo la diferencia en los valores de columna a los otros nodos, de modo que todos los nodos se sincronizan.

DISCARD

(Válido para todos los tipos de conflicto) Conserve el valor actual en la base de datos de destino y escriba los datos en el registro de pista en el archivo de desecho.

Utilice DISCARD con precaución, ya que puede provocar divergencias en los datos.

OVERWRITE

(Válido para todos los tipos de conflicto excepto DELETEROWMISSING) Aplique el registro de pista de la siguiente manera:

Utilice OVERWRITE con precaución, ya que puede provocar divergencias en los datos.

IGNORE

(Válido para todos los tipos de conflicto) Mantenga el valor actual en la base de datos de destino e ignore el registro de pista: no aplique a la tabla de destino ni a un archivo de desecho.

COLS (<column>[, ...])

Un grupo de columnas no por defecto. Se trata de una lista de columnas de la base de datos de destino (después de la asignación) que están enlazadas y operadas por un tipo de resolución específico. Si no se especifica ningún grupo de columnas para un conflicto, todas las columnas se ven afectadas por la resolución que se especifica para el conflicto determinado.

También puede especificar un grupo de columnas DEFAULT, que incluye todas las columnas que no se muestran en otro grupo de columnas. Consulte la opción DEFAULT.

Puede especificar varios grupos de columnas, cada uno con una resolución diferente. Por ejemplo, puede utilizar OVERWRITE para col2 y col3, y puede utilizar USEDELTA para col4. Ninguna columna de ningún grupo puede estar en ningún otro grupo. Los conflictos para las columnas de diferentes grupos de columnas se resuelven por separado según la resolución especificada y en el orden indicado.

Los grupos de columnas funcionan de la siguiente manera:

Ejemplos

Ejemplo 1

En este ejemplo se muestran todos los tipos de conflicto con USEMAX, OVERWRITE, DISCARD.

MAP fin.src, TARGET fin.tgt,
    COMPARECOLS (ON UPDATE ALL, ON DELETE ALL),
    RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, USEMAX (last_mod_time)),
    RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, USEMAX (last_mod_time)),
    RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, OVERWRITE)),
    RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, OVERWRITE)),
    RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, DISCARD)),
    );

Ejemplo 2

En este ejemplo se muestra UPDATEROWEXISTS con USEDELTA y USEMAX.

MAP fin.src, TARGET fin.tgt,
    COMPARECOLS
    (ON UPDATE KEYINCLUDING (address, phone, salary, last_mod_time),
    ON DELETE KEYINCLUDING (address, phone, salary, last_mod_time)),
    RESOLVECONFLICT (
    UPDATEROWEXISTS,
    (delta_res_method, USEDELTA, COLS (salary)),
    (DEFAULT, USEMAX (last_mod_time)));

Ejemplo 3

En este ejemplo se muestra UPDATEROWEXISTS con USEDELTA, USEMAX y IGNORE.

MAP fin.src, TARGET fin.tgt,
    COMPARECOLS
    (ON UPDATE ALLEXCLUDING (comment)),
    RESOLVECONFLICT (
    UPDATEROWEXISTS,
    (delta_res_method, USEDELTA, COLS (salary, balance)),
    (max_res_method, USEMAX (last_mod_time), COLS (address, last_mod_time)),
    (DEFAULT, IGNORE));

SQLEXEC (<SQL_specification>)

SQLEXEC es válido para TABLE y MAP.

Utilice SQLEXEC para ejecutar una consulta o un procedimiento SQL almacenado desde una sentencia MAP durante el procesamiento de Oracle GoldenGate. SQLEXEC permite a Oracle GoldenGate comunicarse directamente con la base de datos para realizar cualquier trabajo soportado por la base de datos. Este trabajo puede formar parte del proceso de sincronización, como la recuperación de valores para la conversión de columnas, o puede ser independiente de la extracción o replicación de datos, como la ejecución de un procedimiento almacenado que ejecuta una acción en la base de datos.

Consulte "SQLEXEC" para obtener sintaxis y uso.

SQLPREDICATE 'WHERE <where_clause>'

SQLPREDICATE es válido para las bases de datos de Oracle, Db2 LUW, Db2 en z/OS, Db2 para i, PostgreSQL, MySQL, SQL Server y Sybase. No utilice SQLPREDICATE para un grupo de Extract configurado para sincronizar los cambios transaccionales. Solo es adecuado para un Extract de carga inicial, ya que vuelve a buscar una sentencia SELECT que seleccione registros directamente de las tablas.

SQLPREDICATE se utiliza con TABLE.

Utilice SQLPREDICATE para incluir una cláusula WHERE de SQL convencional en la sentencia SELECT que Extract utiliza al seleccionar datos de una tabla como preparación para una carga inicial. SQLPREDICATE fuerza que los registros devueltos por la selección se ordenen por los valores clave.

SQLPREDICATE es un método de selección más rápido para las cargas iniciales que las opciones WHERE o FILTER. Afecta directamente a la sentencia SQL y no necesita que Extract recupere todos los registros antes de filtrarlos.

Para las tablas de Oracle, SQLPREDICATE reduce la cantidad de datos que se almacenan en el segmento de deshacer, lo que puede reducir la incidencia de errores de instantánea demasiado antigua. Esto resulta útil al cargar tablas muy grandes.

Mediante una cláusula SQLPREDICATE, puede particionar las filas de una tabla grande entre dos o más procesos de extracción paralelos. Esta configuración permite aprovechar también el procesamiento de carga de entrega en paralelo.

SQLPREDICATE también permite seleccionar datos basados en un registro de hora u otros criterios para filtrar las filas que se extraen y cargan en la tabla de destino. SQLPREDICATE se puede utilizar para cláusulas ORDER BY o cualquier otro tipo de cláusula de selección.

Asegúrese de que la cláusula WHERE contiene columnas que forman parte de una clave o un índice. De lo contrario, Extract realiza una exploración de tabla completa, lo que reduce la eficacia de la sentencia SELECT.

Sintaxis

TABLE <source_table>, SQLPREDICATE 'WHERE <where_clause>';

WHERE

Se trata de una palabra clave obligatoria.

<where_clause>

Cláusula SQL WHERE válida que selecciona registros de las tablas de origen.

Ejemplo

TABLE hr.emp, SQLPREDICATE 'WHERE state = 'CO' and city = 'DENVER''

THREAD (<thread_ID>)

THREAD es válido para MAP. Esta opción es válida cuando Replicat está en modo coordinado.

Utilice THREAD para especificar que todos los objetos de la misma sentencia MAP deben ser procesados por el thread de Replicat especificado. El thread especificado maneja el filtrado, la manipulación, la entrega al destino, el manejo de errores y otro trabajo que se configura para esos objetos. Cuando se utiliza THREAD, se pueden utilizar comodines en la cláusula TARGET.

Todas las tablas que tienen dependencias referenciales entre sí deben asignarse en el mismo thread. Por ejemplo, si las tablas scott.cust y scott.ord tienen una relación de clave ajena, la siguiente es una posible asignación:

MAP scott.cust, TARGET scott.cust, THREAD (5);
MAP scott.ord, TARGET scott.ord, THREAD (5);

El thread con el thread más bajo ID siempre procesa las transacciones de barrera si se omite la opción THREAD o THREADRANGE. Además, el trabajo que no está asignado explícitamente a un thread se procesa a través de este thread. Por ejemplo, si hay threads con ID que van de 1 a 10, el thread 1 realiza transacciones de barrera y no asignadas.

Para procesar una sentencia MAP entre varios threads, consulte THREADRANGE (thread_range, column_list). THREAD y THREADRANGE son opciones que se excluyen mutuamente. No los utilice juntos en la misma sentencia MAP.

Sintaxis

THREAD (<thread_ID>)

<thread_ID>

Identificador numérico del thread que procesará esta sentencia MAP. Los valores válidos están comprendidos entre 1 y el valor especificado con la opción MAXTHREADS del comando ADD REPLICAT que creó este grupo. Puede utilizar el comando INFO REPLICAT para verificar el número máximo de threads permitidos para un grupo de Replicat. Al especificar ID de thread, lo siguiente debe ser verdadero:

Si no se ha utilizado MAXTHREADS, el número máximo de threads por defecto es 25.

Ejemplos

Los siguientes ejemplos muestran algunas formas de utilizar la opción THREAD.

Ejemplo 1

En este ejemplo, el thread 1 procesa la tabla cust.

MAP scott.cust, TARGET scott.cust, THREAD (1);

Ejemplo 2

En este ejemplo, el thread 1 procesa todas las tablas del esquema scott.

MAP scott.*, TARGET scott.*, THREAD (1);

Ejemplo 3

En este ejemplo, la tabla orders se particiona entre dos sentencias MAP mediante el uso de FILTER (filter_clause) y la función @RANGE. Para obtener más información sobre @RANGE, consulte "@RANGE".

MAP scott.orders, TARGET scott.orders, FILTER (@RANGE (1, 2, OID)), THREAD (1);
MAP scott.orders, TARGET scott.orders, FILTER (@RANGE (2, 2, OID)), THREAD (2);

THREADRANGE (<thread_range>,<column_list>)

THREADRANGE es válido para MAP. Esta opción es válida cuando Replicat está en modo coordinado.

Utilice THREADRANGE para especificar que la carga de trabajo de la tabla de destino se va a particionar de forma uniforme entre un rango de threads de Replicat, según el valor de una columna o columnas especificadas. Por ejemplo, si la partición se basa en el valor de una columna denominada ID y el valor THREADRANGE es 1-3, el thread 1 procesa filas con valores ID del 1 al 10, el thread 2 procesa filas con valores ID del 11 al 20 y el thread 3 procesa filas con valores ID del 21 al 30. Puede que la partición no sea tan completa como se muestra en el ejemplo anterior, según el cálculo inicial de la carga de trabajo, pero se coordina para que el mismo thread siempre procese la misma fila. Cada thread especificado maneja el filtrado, la manipulación, el manejo de errores, la entrega al destino y otro trabajo para su rango de filas.

La partición de una tabla en un rango de threads puede mejorar el rendimiento de la aplicación para tablas o tablas muy grandes que con frecuencia incurren en transacciones de larga ejecución o grandes volúmenes, pero también se pueden utilizar en otros casos. Puede procesar más de una tabla a través del mismo rango de threads.

Se puede utilizar una cláusula TARGET con comodines cuando se utiliza THREADRANGE si se omite la lista de columnas opcional. Al utilizar una lista de columnas, utilice sentencias MAP explícitas independientes para cada tabla que utilice el mismo rango de threads.

Para procesar una sentencia MAP con un thread específico, consulte THREAD (thread_ID). THREAD y THREADRANGE son opciones que se excluyen mutuamente. No los utilice juntos en la misma sentencia MAP.

No especifique tablas que tengan dependencias referenciales entre sí en un rango de threads. Utilice la opción THREAD y procese todas las tablas con el mismo thread.

No utilice THREADRANGE para particionar secuencias. Si se necesita coordinación, por ejemplo, cuando una secuencia forma parte de una operación SQLEXEC, particione la secuencia en un thread con la opción THREAD.

El thread con el thread más bajo ID siempre procesa las transacciones de barrera si se omite la opción THREAD o THREADRANGE. Además, el trabajo que no está asignado explícitamente a un thread se procesa a través de este thread. Por ejemplo, si hay threads con ID que van de 1 a 10, el thread 1 realiza transacciones de barrera y no asignadas. Nota: Las columnas especificadas en una lista de columnas deben existir en el archivo de pista. Puede controlar esto mediante KEYCOLS en Extract para incluir esta columna, o mediante FETCHCOLS en Extract para la columna, o asegurándose de que la columna forma parte del grupo de logs suplementario y, a continuación, mediante LOGALLSUPCOLS.

Sintaxis

THREADRANGE (<lowID>-<highID>, [<column>[, <column>][, ...]])

<lowID>

Identificador de thread más bajo de este rango. Los valores válidos son del 1 al 500.

<highID>

El identificador de thread más alto de este rango, que debe ser un número mayor que <lowID>. Los valores válidos son del <lowID>+1 al 500. El número de threads del rango no puede superar el valor especificado con la opción MAXTHREADS del comando ADD REPLICAT. Si no se ha utilizado MAXTHREADS, el número máximo de threads por defecto es 25.

[<column>[, <column>][, ...]]

Opcional. Especifica una o más columnas únicas en las que basar la partición de filas. Para especificar varias columnas, utilice una lista delimitada por comas, como col1, col2, col3. Cuando se omite esta opción, la partición entre los threads se basa de forma predeterminada en las siguientes columnas, en el orden de preferencia que se muestra:

Ejemplo

El siguiente ejemplo divide las tablas orders y order_lines entre los mismos dos threads, según el valor de la columna OID.

MAP scott.orders, TARGET scott.orders, THREADRANGE (1-2, OID);
MAP scott.order_lines, TARGET scott.order_lines, THREADRANGE (1-2, OID);

TOKENS (<token_definition>)

TOKENS es válido para TABLE.

Utilice TOKENS para definir un token de usuario y asociarlo a los datos. Los tokens permiten extraer y almacenar datos en el área de token de usuario de una cabecera de registro de pista. Los datos de token se pueden recuperar y utilizar de muchas formas para personalizar la forma en que Oracle GoldenGate entrega los datos. Por ejemplo, puede utilizar datos de token en asignaciones de columnas, procedimientos almacenados a los que llama SQLEXEC o macros.

Para utilizar los datos de token definidos en las tablas de destino, utilice la función de conversión de columna @TOKEN en la cláusula COLMAP de una sentencia MAP de Replicat. La función @TOKEN asigna el nombre de un token a una columna de destino.

No utilice esta opción para las tablas que se procesan en modo de transferencia por un grupo de extracción de pump de datos.

El juego de caracteres de los datos de token no se convierte. El token debe estar en el juego de caracteres de la base de datos origen para Extract y en el juego de caracteres de la base de datos destino para Replicat.

Sintaxis

TOKENS (<token_name> = <token_data> [, ...])

<token_name>

Nombre que ha elegido para el token. Puede ser cualquier número de caracteres válidos y no distingue entre mayúsculas y minúsculas. Los nombres de varios bytes no están soportados.

<token_data>

Cualquier cadena de caracteres válida de hasta 2000 bytes. Los datos pueden ser un literal que esté entre comillas simples (o comillas dobles si NOUSEANSISQLQUOTES está en uso) o el resultado de una función de conversión de columnas de Oracle GoldenGate.

Ejemplo

A continuación, se crean tokens denominados TK-OSUSER, TK-GROUP y TK-HOST y se asignan a los datos de token obtenidos con la función @GETENV.

TABLE ora.oratest, TOKENS (
TK-OSUSER = @GETENV ('GGENVIRONMENT' , 'OSUSERNAME'),
TK-GROUP = @GETENV ('GGENVIRONMENT' , 'GROUPNAME')
TK-HOST =  @GETENV ('GGENVIRONMENT' , 'HOSTNAME'));

ESPACIOS DE TRABAJO COMPARTIDO | NOTRIMSPACES

TRIMSPACES y NOTRIMSPACES son válidos para TABLE y MAP.

Utilice TRIMSPACES y NOTRIMSPACES en el nivel raíz de un archivo de parámetros o en una sentencia TABLE o MAP para controlar si los espacios finales de una columna CHAR de origen se truncan o no cuando se aplican a una columna CHAR o VARCHAR de destino. El valor por defecto es TRIMSPACES.

Consulte "TRIMSPACES | NOTRIMSPACES" para obtener sintaxis y uso.

TRIMVARSPACES | NOTRIMVARSPACES

TRIMVARSPACES y NOTRIMVARSPACES son válidos para TABLE y MAP.

Utilice TRIMVARSPACES y NOTRIMVARSPACES en el nivel raíz de un archivo de parámetros o en una sentencia TABLE o MAP para controlar si los espacios finales de una columna VARCHAR de origen se truncan o no cuando se aplican a una columna CHAR o VARCHAR de destino. El valor por defecto es NOTRIMVARSPACES.

Consulte "TRIMVARSPACES | NOTRIMVARSPACES" para obtener sintaxis y uso.

WHERE (<clause>)

WHERE es válido para TABLE y MAP.

Utilice WHERE para seleccionar registros basados en una sentencia condicional. WHERE no soporta lo siguiente:

Encerrar literales entre comillas simples. Especifique los nombres de columna sensibles a mayúsculas/minúsculas a medida que se almacenan en la base de datos y escríbalos entre comillas dobles si la base de datos necesita comillas para aplicar la distinción entre mayúsculas y minúsculas (como Oracle).

Obtención de más información sobre el filtrado de registros

Sintaxis

WHERE (<clause>)

<clause>

Selecciona registros en función de una condición, como:

WHERE (branch = 'NY')

La Tabla 2-12 muestra los operadores WHERE permitidos.

Cuadro 12 Operadores WHERE permitidos

Operador Ejemplo
Nombres de Columna PRODUCT_AMT "Product_Amt"
Valores numéricos -123, 5500.123
Cadenas literales entre comillas simples "AUTO", "Ca"
Pruebas de columna @NULL, @PRESENT, @ABSENT (la columna es nula, está presente o ausente en el registro). Estas pruebas están integradas en Oracle GoldenGate.
Comparison operators =, <>, >, <,>=, <= < td>
Conjunctive operators `AND`, `OR`
Grouping parentheses Use open and close parentheses for logical grouping of multiple elements.

Example

The following WHERE example returns all records when the AMOUNT column is over 10,000 and does not cause a record to be discarded when AMOUNT is absent.

WHERE (amount = @PRESENT AND amount > 10000)

PARTITIONOBJID

Valid for Integrated Extract.

PARTITIONOBJID is used to specify the object IDs of the partitions to be captured for partitioned tables, and applies to Integrated Extract. For an IO table (with or without overflow area), index segment object ID should be used for partition level filtering. In this case, PARTITIONOBJID in the MAP or TABLE statement specifies the index segment object IDs of the partitions to be extracted.

Syntax

MAP/TABLE [container.]schema.table PARTITIONOBJID ptn_object_ID [, ptn_object_ID]

The following restrictions apply:

Syntax for IO table TABLE statement:

TABLE [container.]schema.table PARTITIONOBJID index_segment_object_ID [, index_segment_object_ID]

Syntax for IO table MAP statement:

MAP [container.]schema.table PARTITIONOBJID index_segment_object_ID [, index_segment_object_ID]