Detección y Resolución Automática de Conflictos
Cuando Oracle GoldenGate replica los cambios entre las bases de datos Oracle, puede configurar y gestionar la detección y resolución automáticas de conflictos de Oracle GoldenGate en las bases de datos Oracle. Nota: La función Detección y resolución automática de conflictos está disponible en Oracle Database 12c versión 2 (12.2) y posteriores, y funciona con Oracle GoldenGate 12c (12.3.0.1) y versiones posteriores. Hay una función manual de detección y resolución de conflictos, que se denomina detección y resolución de conflictos (CDR) de Oracle GoldenGate. El CDR de Oracle GoldenGate está configurado en el archivo de parámetros de Replicat. Para obtener más información sobre Oracle GoldenGate CDR, consulte Detección y resolución manuales de conflictos.
Acerca de la detección y resolución automáticas de conflictos
Cuando Oracle GoldenGate replica cambios entre bases de datos Oracle, puede configurar y gestionar automáticamente la detección y resolución de conflictos de Oracle GoldenGate en estas bases de datos.
Esta función está diseñada para su uso con configuraciones activo-activo, donde Oracle GoldenGate debe mantener la sincronización de datos entre varias bases de datos que contienen los mismos juegos de datos.
Nota: La función de detección y resolución automática de conflictos (ACDR) solo está disponible cuando se utiliza Oracle GoldenGate con Oracle AI Database. Para bases de datos que no son de Oracle, hay una función manual de detección y resolución de conflictos (CDR) disponible con Oracle GoldenGate. El CDR de Oracle GoldenGate está configurado en el archivo de parámetros de Replicat.
Detección y Resolución Automática de Conflictos
Puede configurar la detección y resolución automáticas de conflictos en una configuración de Oracle GoldenGate que replique tablas entre bases de datos Oracle. Para configurar la detección y resolución automáticas de conflictos para una tabla, debe llamar al procedimiento ADD_AUTO_CDR en el paquete DBMS_GOLDENGATE_ADM. Un requisito para configurar la detección y resolución automáticas de conflictos, el usuario de Oracle GoldenGate debe tener los privilegios adecuados. Consulte Grant User Privileges for Oracle AI Database 26ai and Higher y Grant User Privileges for Oracle Database 21c and Lower para obtener más información sobre los privilegios de usuario.
El usuario administrador debe estar conectado a la PDB adecuada al llamar a ADD_AUTO_CDR. Ahora se agregan las siguientes constantes, que representan indicadores de bits:
-
EARLIEST_TIMESTAMP_RESOLUTIONdefineTOMBSTONE KEY VERSIONINGautomáticamente -
DELETE_ALWAYS_WINSdefineTOMBSTONE KEY VERSIONINGautomáticamente. -
IGNORE_SITE_PRIORITY
En el siguiente ejemplo se utiliza un comando ALTER para la tabla HR.EMPLOYEES:
BEGIN
dbms_goldengate_adm.alter_auto_cdr
(schema_name => 'HR'
,table_name => 'EMPLOYEES'
,additional_options => DBMS_GOLDENGATE_ADM.ADDITIONAL_OPTIONS_ADD_KEY_VERSION );
END;
/
Consulte la descripción de additional_options en ADD_AUTO_CDR Procedure de Referencia de tipos y paquetes PL/SQL de Oracle AI Database.
Cuando Oracle GoldenGate captura los cambios originados en una instancia de Oracle AI Database, cada cambio se encapsula en un registro de cambios lógicos de fila (LCR). Un LCR de fila es una representación estructurada de un cambio de fila DML. Cada LCR de fila incluye el tipo de operación, los valores de columna antiguos y los valores de columna nuevos. Los LCR de varias filas pueden formar parte de una única transacción de base de datos.
Cuando más de una réplica de una tabla permite cambios en la tabla, se puede producir un conflicto cuando se realiza un cambio en la misma fila en dos bases de datos diferentes casi al mismo tiempo. Oracle GoldenGate replica los cambios mediante los LCR de fila. Detecta un conflicto comparando los valores antiguos de la fila LCR para el cambio inicial de la base de datos de origen con los valores actuales de la fila de tabla correspondiente en la base de datos de destino identificada por las columnas clave. Si algún valor de columna no coincide, se produce un conflicto.
Después de detectar un conflicto, Oracle GoldenGate puede resolverlo sobrescribiendo los valores de la fila con algunos valores de la fila LCR, ignorando los valores de la fila LCR o calculando un delta para actualizar los valores de la fila.
La detección y resolución automáticas de conflictos no requiere cambios en la aplicación por los siguientes motivos:
-
Oracle AI Database crea y mantiene automáticamente columnas invisibles de registro de hora.
-
Las inserciones, actualizaciones y supresiones utilizan la tabla de log de supresión de lápida para determinar si se ha suprimido una fila.
-
Se pueden detectar conflictos de columnas LOB.
-
Oracle AI Database configura automáticamente el registro complementario en las columnas necesarias.
Consejo:
Consulte también Oracle AI Database Utilities para obtener información sobre el registro complementario.
Requisitos para la Detección y Resolución Automática de Conflictos
A continuación se muestran los requisitos clave para configurar la CDR automática en Oracle GoldenGate:
-
El registro complementario es necesario para garantizar que cada LCR de fila tenga la información necesaria para detectar y resolver un conflicto. El registro complementario coloca información adicional en el redo log para las columnas de una tabla cuando se realiza una operación DML en la tabla. Al configurar una tabla para la detección y resolución de conflictos de Oracle GoldenGate, el registro complementario se configura automáticamente para todas las columnas de la tabla. La información adicional en el redo log se coloca en un LCR cuando se replica un cambio de tabla.
El Extract se debe utilizar para la captura. El Replicat integrado o el Replicat paralelo en modo integrado se deben utilizar en el lado de aplicación.
LOGALLSUPCOLSdebe seguir siendo el valor por defecto. -
Hay un campo oculto
KEYVER$$de tipo registro de hora que se agrega opcionalmente a la tablaDELETE TOMBSTONE. Este campo es necesario para la resoluciónEARLIEST TIMESTAMP,DELETE ALWAYS WINSySITE PRIORITYy también existe en la tabla base. La existencia del campo en la tabla base se debe proporcionar en los metadatos del archivo de pista como un indicador o token.Las actualizaciones de clave primaria también están soportadas en la tabla
DELETE TOMBSTONE. Se inserta una entrada en la tablaDELETE TOMBSTONEpara la fila del valor de clave original (antes de la imagen). La lógica de Extract, que coincide con INSERTS en la tablaDELETE TOMBSTONEcon DELETES, también debe coincidir con las actualizaciones de clave primaria o con la clave única (UK) con al menos un campo no anulable, si no hay ninguna clave primaria. -
SITE PRIORITYnecesita soporte de Replicat, antes de implantar los parámetros y transferir el valor al Replicat. -
La CDR automática no funciona con otras excepciones de nivel
MAPy configuraciones de manejo de errores, comoREPERROR,MAPEXCEPTION. Puede utilizar Automatic CDR oREPERROR/MAPEXCEPTION, pero no ambos en la misma tabla. ConsulteTABLE \| MAPyREPERRORpara obtener más información.
Compatibilidad y migración
Si la tabla base de la base de datos de origen no contiene la columna KEYVER$$, pero la tabla base de destino tiene actualizaciones de clave primaria y DELETE, se produce un error en la base de datos de destino para las resoluciones EARLIEST TIMESTAMP, DELETE ALWAYS WINS y SITE PRIORITY.
Al replicar desde una tabla base, que tiene un valor KEYVER$$ en una tabla de destino, que no lo tiene, se ignora la columna KEYVER$$.
Grupos de Columnas
Un grupo de columnas es una agrupación lógica de una o más columnas de una tabla replicada. Al agregar un grupo de columnas, la detección y resolución de conflictos se realiza en las columnas del grupo de columnas independientemente de las demás columnas de la tabla.
Al configurar una tabla para la detección y resolución de conflictos de Oracle GoldenGate con el procedimiento ADD_AUTO_CDR, todas las columnas escalares de la tabla se agregan a un grupo de columnas por defecto. Para definir otros grupos de columnas para la tabla, ejecute el procedimiento ADD_AUTO_CDR_COLUMN_GROUP. Las columnas de la tabla que no forman parte de un grupo de columnas definido por el usuario permanecen en el grupo de columnas por defecto de la tabla.
Los grupos de columnas permiten que diferentes bases de datos actualicen diferentes columnas en la misma fila casi al mismo tiempo sin causar un conflicto. Cuando se configuran grupos de columnas para una tabla, se pueden evitar conflictos incluso si diferentes bases de datos actualizan la misma fila de la tabla. No se detecta ningún conflicto si las actualizaciones cambian los valores de las columnas en diferentes grupos de columnas.
Figura 1: Grupos de columnas

En este ejemplo se muestra una fila que se replica en la base de datos A y la base de datos B. Los dos grupos de columnas siguientes se configuran para la tabla replicada en cada base de datos:
-
Un grupo de columnas incluye la columna
Office. La columna de registro de hora invisible para este grupo de columnas esTS1. -
Otro grupo de columnas incluye las columnas
TitleySalary. La columna de registro de hora invisible para este grupo de columnas esTS2.
Estos grupos de columnas permiten que la base de datos A y la base de datos B actualicen la misma fila casi al mismo tiempo sin provocar ningún conflicto. En concreto, se realizan los siguientes cambios:
-
En la base de datos A, el valor de
Officeha cambiado de1080a1030. -
En la base de datos B, el valor de
Titleha cambiado deMTS1aMTS2.
Debido a que la columna Office y la columna Title están en diferentes grupos de columnas, los cambios se replican sin que se detecte ningún conflicto. El resultado es que los valores de la fila son los mismos en ambas bases de datos después de que se haya replicado cada cambio.
Actualizaciones de línea de negocio de trozos
Un juego de operaciones de LOB compuesto por LOB WRITE, LOB ERASE y LOB TRIM es una actualización de LOB de trozos. Cuando se configura una tabla que contiene columnas LOB para la detección y resolución de conflictos, cada columna LOB se coloca en su propio grupo de columnas y el grupo de columnas tiene su propia columna de registro de hora oculta. La columna de registro de hora se actualiza en la primera operación de línea de negocio de trozos.
Para una columna LOB, se detecta y resuelve un conflicto de las siguientes formas:
-
Si el registro de hora del grupo de columnas de LOB es posterior al grupo de columnas de LOB correspondiente en la fila, se aplica la actualización de LOB de trozos.
-
Si el registro de hora del grupo de columnas de LOB es anterior al grupo de columnas de LOB correspondiente en la fila, se retiene el LOB en la fila de la tabla.
-
Si la fila no existe en la tabla, se emite un error.
Detección y resolución más temprana de conflictos de registro de hora
Las columnas con nombres de formato CDRTS$ column group y CDRTS$ROW se utilizan para contener registros de hora que reflejan las horas de modificación de los grupos de columnas y la fila.
Nota: Las tablas con símbolos $ o $$ son tablas internas u ocultas.
DBMS_GOLDENGATE_ADM incluye los siguientes procedimientos para configurar la resolución de registro de hora más temprana y más reciente:
-
ADD_AUTO_CDR() -
ADD_AUTO_CDR_COLUMN_GROUP() -
REMOVE_AUTO_CDR() -
REMOVE_AUTO_CDR_COLUMN_GROUP() -
ALTER_AUTO_CDR() -
ALTER_AUTO_CDR_COLUMN_GROUP()
El campo ADDITIONAL_OPTIONS, tanto en ADD_AUTO_CDR() como en ALTER_AUTO_CDR(), activa el uso del primer registro de hora. La activación del registro de hora más antiguo activa automáticamente el control de versiones, que agrega una nueva columna oculta KEYVER$$ (número de versión) del tipo registro de hora. Se agrega un nuevo valor de indicador para indicar el primer uso de registro de hora. Este campo también se agrega a la tabla DELETE TOMBSTONE. Los conflictos de supresión son el motivo por el que se necesita el número de versión. Con una resolución de registro de hora más temprana, es posible que los conflictos de supresión, que pueden ser transparentes, no solo se ejecuten correctamente de manera incorrecta, sino que también eviten nuevas inserciones de la fila (versiones nuevas). Con un registro de hora de versión, la supresión se puede resolver correctamente en un DML de fila para la misma versión de fila.
La inserción original de la fila recibe el registro de hora actual de su valor por defecto. A continuación, la eliminación de esta fila inserta el número de versión y la hora a la que se insertó esta fila en la tabla de lápida cuando hay una supresión. En una nueva inserción, por defecto, el número de versión recibe de nuevo el registro de hora actual, evitando así un conflicto falso con las entradas de supresión actuales en la tabla de lápida.
Ejemplo
Supongamos que tiene una tabla tab1 que es globalmente consistente entre las bases de datos del sitio 1 y el sitio 2.
La tabla contiene una clave (principal). ACDR mantiene automáticamente una versión de clave (kv) y un registro de hora (ts) como columnas para la tabla base (oculta) y la tabla de lápida. Para la versión de clave kv y el registro de hora ts
Base de datos 1: insert tab1 key1 kv1 ts1
Base de datos 2: delete tab1 key1 kv1 ts1
Inserción en la tabla DELETE TOMBSTONE key1 kv1 ts1
Base de datos 1: insert tab1 key1 kv2 ts2
Sin usar la versión de clave, la inserción se ignoraría, el registro de hora de supresión es anterior. A medida que se utiliza la versión de clave, sabe que kv2 no es la versión de la fila que se ha suprimido y la inserción se realiza correctamente.
Última resolución y detección de conflictos de registro de hora
Al ejecutar el procedimiento ADD_AUTO_CDR en el paquete DBMS_GOLDENGATE_ADM para configurar una tabla para la detección y resolución automáticas de conflictos de Oracle GoldenGate, se agrega una columna de registro de hora oculta a la tabla. Esta columna de registro de hora oculta registra la hora de un cambio de fila y esta información se utiliza para detectar y resolver conflictos.
Cuando se aplica un LCR de fila, se puede producir un conflicto para una operación INSERT, UPDATE o DELETE. En la siguiente tabla, se describe cada tipo de conflicto y cómo se resuelve.
| Operación | Detección de Conflictos | Resolución de Conflictos |
|---|---|---|
INSERT |
Se detecta un conflicto cuando la tabla tiene el mismo valor para una columna de clave que el nuevo valor de la fila LCR. | Si el registro de hora de la fila LCR es posterior al registro de hora de la fila de la tabla, los valores de la fila LCR sustituyen a los valores de la tabla. Si el registro de hora de la fila LCR es anterior al registro de hora de la fila de la tabla, se desecha el LCR de la fila y se conservan los valores de la tabla. |
UPDATE |
Se detecta un conflicto en cada uno de los siguientes casos:
|
Si hay una discrepancia de valores y el registro de hora de la fila LCR es posterior al registro de hora de la fila de la tabla, los valores de la fila LCR sustituyen a los valores de la tabla. Si hay una discrepancia de valores y el registro de hora de la fila LCR es anterior al registro de hora de la fila de la tabla, se desecha el LCR de la fila y se retienen los valores de la tabla. Si la fila de la tabla no existe y el registro de hora de la fila LCR es posterior al registro de hora de la fila de la tabla de lápida, la fila LCR se convierte de una operación Si la fila de la tabla no existe y el registro de hora de la fila LCR es anterior al registro de hora de la fila de la tabla de lápida, la fila LCR se desecha. Si la fila de la tabla no existe y no hay ninguna fila correspondiente en la tabla de lápida, la fila LCR se convierte de una operación |
DELETE |
Se detecta un conflicto en cada uno de los siguientes casos:
|
Si el registro de hora de la fila LCR es posterior al registro de hora de la tabla, suprima la fila de la tabla. Si el registro de hora de la fila LCR es anterior al registro de hora de la tabla, se desecha el LCR de la fila y se conservan los valores de la tabla. Si la supresión se realiza correctamente, registre la fila LCR insertándola en la tabla de lápida. Si la fila de la tabla no existe, registre la fila LCR insertándola en la tabla de lápida. |
En la siguiente imagen se muestra la resolución de conflictos entre la base de datos A y la B: 
En este ejemplo se muestra una fila que se replica en la base de datos A y la base de datos B. Las columnas de base de datos son Name, RowTS, Office, Title y Salary. La columna RowTS es la columna invisible en ambas bases de datos. Hay una actualización en la columna Office de la base de datos A y, al mismo tiempo, hay una actualización en la columna Title de la base de datos B. Esto provoca un conflicto y la resolución de este conflicto se realiza aplicando el último método de registro de hora.
-
En la base de datos A, el valor de la columna
Officese actualiza de 1080 a 1103 y el valor RowTS cambia de @TS10 a @TS20. Una flecha indica que este cambio se replica en la base de datos B. -
En la base de datos B, el valor de la columna
Titlecambia de MTS1 a MTS2 y el valor RowTS cambia de @TS10 a @TS22. -
Para resolver este conflicto, gana el último registro de hora que existe en la base de datos B. Esto implica que los cambios en la base de datos A no se aplican. Los valores finales aplicados a la base de datos A y a la base de datos B son Scott, @TS22, 1080, MTS2, 100.
Resolución de conflictos delta
Con la detección de conflictos delta, se produce un conflicto cuando un valor de la lista de columnas antigua de la fila LCR difiere del valor de la fila correspondiente de la tabla.
Para configurar la detección y resolución de conflictos delta para una tabla, ejecute el procedimiento ADD_AUTO_CDR_DELTA_RES en el paquete DBMS_GOLDENGATE_ADM. El método de resolución delta no depende de un registro de hora ni de una columna de resolución adicional. Con la resolución de conflictos delta, el conflicto se resuelve agregando la diferencia entre los valores nuevo y antiguo de la fila LCR al valor de la tabla. Este método de resolución se utiliza generalmente para datos financieros, como un saldo de cuenta. Por ejemplo, si un saldo bancario se actualiza simultáneamente en dos sitios, el valor convergente contabiliza todos los cargos y abonos.
En la siguiente figura, se proporciona un ejemplo que ilustra la detección y resolución de conflictos delta.
Figura 2: Detección y resolución de conflictos delta

En este ejemplo se muestra una fila que se replica en la base de datos A y la base de datos B. La columna Balance se designa como la columna en la que se realiza la resolución de conflictos delta y la columna RowTS es la columna de registro de hora invisible para realizar un seguimiento de la hora de cada cambio en la columna Balance. Se realiza un cambio en el valor Balance de la fila en ambas bases de datos casi al mismo tiempo (@T20 en la base de datos A y @T22 en la base de datos B). Estos cambios dan como resultado un conflicto, y la resolución de conflictos delta se utiliza para resolver el conflicto de la siguiente manera:
-
En la base de datos A, el valor de
Balanceha cambiado de1000a1750. Por tanto, el valor se incrementó en 750. -
En la base de datos B, el valor de
Balanceha cambiado de1000a950. Por lo tanto, el valor se redujo en 50. -
Para resolver el conflicto en la base de datos A, el valor de la diferencia entre los valores nuevo y antiguo de la fila LCR con el valor de la tabla. La diferencia entre los valores nuevos y antiguos en el LCR es (1000+750-50=1700). El valor actual de la tabla se incrementa en 700 para que el valor después de la resolución de conflictos sea 1700.
-
Para resolver el conflicto en la base de datos B, el valor de la diferencia entre los valores nuevo y antiguo de la fila LCR con el valor de la tabla. La diferencia entre los valores nuevos y antiguos en el LCR es de 750 (1000 - 50 + 750)=1700. Por lo tanto, el valor actual de la tabla (950) se incrementa en 750 para que el valor después de la resolución de conflictos sea 1700.
Después de la resolución de conflictos delta, el valor de la columna Balance es el mismo para la fila de la base de datos A y la base de datos B.
CDR de prioridad de centro
Nota: La resolución SITE PRIORITY tiene prioridad sobre todos los valores de resolución COLUMN GROUP.
Nota: Si el parámetro Replicat SITE PRIORITY no se coloca antes de las sentencias de asignación aplicables en el archivo de parámetros, no funcionará. Este parámetro se debe colocar antes de las sentencias de asignación aplicables.
La resolución de prioridad se especifica en el archivo de parámetros de Replicat entre el origen y el destino para la resolución de conflictos.
SITE PRIORITY está activado para una base de datos o PDB en el archivo de parámetros Replicat con el parámetro ACDR SITE_PRIORITY {source_db_name}{OVERWRITE | IGNORE }, que se especifica para activar la resolución SITE PRIORITY para una tabla.
Si se especifica la opción OVERWRITE, la tabla de origen tiene prioridad y los conflictos se resuelven mediante OVERWRITE. Por el contrario, si se especifica la opción IGNORE, la tabla de destino tiene prioridad y los cambios de la tabla de origen se ignoran en un conflicto.
La resolución SITE PRIORITY se puede desactivar mediante el campo ADDITIONAL_OPTIONS en el procedimiento ADD_AUTO_CDR() del paquete DBMS_GOLDENGATE_ADM y ALTER_AUTO_CDR() mediante la definición de IGNORE_SITE_PRIORITY.
Cada relación origen-destino de Replicat se puede configurar de forma diferente; por lo tanto, la convergencia depende de la configuración del usuario.
Eliminar CDR de registro de hora de ganancias siempre
DELETE ALWAYS WINS se activa mediante el campo ADDITIONAL_OPTIONS en los procedimientos DBMS_GOLDENGATE_ADM ADD_AUTO_CDR() y ALTER_AUTO_CDR(). Se trata de nuevo de un método de resolución de conflictos de supresión, que no utiliza la última resolución de registro de hora; por lo tanto, es necesario el control de versiones. La activación de DELETE ALWAYS WINS activa automáticamente el control de versiones, que agrega una nueva columna oculta KEYVER$$ (número de versión) de tipo registro de hora. También se agrega un nuevo valor de indicador a acdrflags_kqldtvc para indicar el uso de DELETE ALWAYS WINS. Este campo también se agrega a la tabla DELETE TOMBSTONE. Existen los mismos problemas de control de versiones que la resolución EARLIEST TIMESTAMP.
Ejemplo:
Versión de clave kv y registro de hora ts
Base de datos 1: insert tab1 key1 kv1 ts1
Base de datos 2: delete tab1 key1 kv1 ts1
Inserción en la tabla DELETE TOMBSTONE key1 kv1 ts1
Base de datos 1: insert tab1 key1 kv2 ts2
Sin usar la versión de clave, se ignoraría la inserción, la supresión siempre gana. A medida que se utiliza la versión de clave, sabe que kv2 no es la versión de la fila que se ha suprimido y la inserción se realiza correctamente.
DELETE TOMBSTONE Tabla
La tabla DELETE TOMBSTONE es un marcador de un registro suprimido para distinguirlo de un registro que nunca existió. Una tabla DELETE TOMBSTONE contiene como mínimo las columnas de clave y el registro de hora de la operación. Esta información es necesaria para suprimir la convergencia porque algunas actualizaciones e inserciones entrantes pueden retrasarse desde otro sitio y el LCR entrante debe filtrarse con el registro de hora de la operación de lápida para determinar si se debe aplicar.
Seguimiento de actualizaciones de clave primaria en Delete Tombstone
El soporte completo de actualizaciones de clave primaria (PK) requiere el manejo de conflictos tanto en las filas representadas por la imagen anterior de la clave como en la fila representada por la imagen posterior de la clave. Una actualización de clave primaria es una supresión e inserción autónoma, por lo que los conflictos de actualización de clave primaria se deben soportar como supresión para los conflictos con la imagen anterior de la clave y se inserta con la imagen posterior de la clave (y la fila).
La compatibilidad con la actualización de clave primaria como supresión de la fila representada por la imagen anterior de la clave significa que se debe insertar en la tabla deleteombstone como supresión. Se agrega un disparador interno de actualización para insertarlo en la tabla de lápida cuando se actualiza la clave primaria (en realidad, la clave de identificación de fila, ya sea la clave primaria si existe o el Reino Unido seleccionado con al menos una columna no nula). Como una actualización de clave primaria puede provocar dos conflictos, se intentan hasta dos resoluciones en el nivel de fila, se elimina la fila con la clave primaria original y se inserta la fila con la nueva clave primaria.
Ejemplo: uso de la última resolución de registro de hora
Base de datos 1: actualización a tab1 key1 at ts1
Base de datos 2: actualización a tab1 key1 set key1 to key2 ts2
Base de datos 3: actualización a tab1 key2 ts3
En este escenario, parece que en la fila de nivel de fila tab1 con key1 se debe suprimir y la actualización de la base de datos 3 debe ser la modificación final de la clave de fila tab1
- Si, en cambio, la base de datos 2 está en
ts3y la base de datos 3 está ents3, la actualización de clave primaria en la base de datos 2 sería la modificación final de la filatab1key2.
Now, consider a case where the database 1 was at ts3, database 2 at ts2 and database 3 at ts1, then the update to tab1 row key1 on database 1 should succeed and the PK update from database 2 on tab1 row key2 should succeed. En este punto, parece que la resolución completa es que tanto la eliminación en la imagen anterior como la inserción en la imagen posterior se deben resolver por separado. Esto implica que no son dependientes el uno del otro y una pérdida para uno, no es una pérdida para ambos.
Configuración de resolución y detección de conflictos delta
El procedimiento ADD_AUTO_CDR_DELTA_RES del paquete DBMS_GOLDENGATE_ADM configura la detección y la resolución de conflictos delta.
Con la resolución de conflictos delta, se especifica una columna para la que se detectan y resuelven conflictos. El conflicto se detecta si el valor de la columna de la fila LCR no coincide con el valor correspondiente de la tabla. El conflicto se resuelve agregando la diferencia entre los valores nuevo y antiguo de la fila LCR al valor de la tabla.
Puede configurar un administrador de Oracle GoldenGate mediante el procedimiento GRANT_ADMIN_PRIVILEGE en el paquete DBMS_GOLDENGATE_ADM.
-
Conéctese a la base de datos del servidor entrante como administrador de Oracle GoldenGate.
-
Ejecute el procedimiento
ADD_AUTO_CDRy especifique la tabla que desea configurar para la última detección y resolución de conflictos de registro de hora. -
Ejecute el procedimiento
ADD_AUTO_CDR_DELTA_RESy especifique la columna en la que se realiza la detección y resolución de conflictos delta. -
Repita los pasos anteriores en cada instancia de Oracle AI Database que replique la tabla.
Ejemplo 9-23 Configuración de la detección y resolución de conflictos delta para una tabla
En este ejemplo, se configura la detección y resolución de conflictos delta para la columna order_total en la tabla oe.orders.
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS');
END;
/
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_DELTA_RES(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS',
COLUMN_NAME => 'ORDER_TOTAL');
END;
/
Configuración de la última detección y resolución de conflictos de registro de hora
El procedimiento ADD_AUTO_CDR del paquete DBMS_GOLDENGATE_ADM configura la última detección y resolución de conflictos de registro de hora. El procedimiento ADD_AUTO_CDR_COLUMN_GROUP agrega grupos de columnas opcionales.
Para Oracle AI Database 26ai y versiones posteriores, existen métodos adicionales para gestionar y mantener las tablas configuradas de ACDR. Puede conservar las columnas subyacentes relacionadas con AUTO-CDR como columnas UNUSED o borrarlas inmediatamente después de llamar al procedimiento REMOVE_AUTO_CDR.
Si aplica el procedimiento ADD_AUTO_CDR a una tabla, por defecto, sus columnas internas se marcan como no utilizadas si se elimina AUTO_CDR. Después de llamar a REMOVE_AUTO_CDR, las columnas no utilizadas se pueden suprimir manualmente en una etapa posterior o se pueden eliminar inmediatamente mediante algunos parámetros adicionales. Para obtener más información, consulte Removing Conflict Detection and Resolution From a Table.
Para obtener más información, consulte ADD_AUTO_CDR Procedure en la Referencia de tipos y paquetes PL/SQL de Oracle AI Database
Con la última detección y resolución de conflictos de registro de hora, se detecta un conflicto cuando la columna de registro de hora de la fila LCR no coincide con el registro de hora de la fila de tabla correspondiente. La fila LCR se aplica si su registro de hora es posterior. De lo contrario, la fila LCR se desecha y la fila de la tabla no se cambia. Al ejecutar el procedimiento ADD_AUTO_CDR, agrega una columna de registro de hora invisible para cada fila de la tabla especificada y configura la detección y resolución de conflictos de registro de hora. Cuando se utiliza el procedimiento ADD_AUTO_CDR_COLUMN_GROUP para agregar uno o más grupos de columnas, agrega un registro de hora para el grupo de columnas y configura la detección y resolución de conflictos de registro de hora para el grupo de columnas.
Puede configurar un administrador de Oracle GoldenGate mediante el procedimiento GRANT_ADMIN_PRIVILEGE en el paquete DBMS_GOLDENGATE_ADM.
-
Conéctese a la base de datos del servidor entrante como administrador de Oracle GoldenGate.
-
Ejecute el procedimiento
ADD_AUTO_CDRy especifique la tabla que desea configurar para la última detección y resolución de conflictos de registro de hora. -
Ejecute el procedimiento
ADD_AUTO_CDR_COLUMN_GROUPy especifique uno o más grupos de columnas en la tabla. -
Repita los pasos anteriores en cada instancia de Oracle AI Database que replique la tabla.
Ejemplo 9-24 Configuración de la última detección y resolución de conflictos de registro de hora para una tabla
En este ejemplo, se configura la última detección y resolución de conflictos de registro de hora para la tabla hr.employees.
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES');
END;
/
Ejemplo 9-25 Configuración de grupos de columnas
En este ejemplo, se configuran los siguientes grupos de columnas para la resolución de conflictos de registro de hora en la tabla HR.EMPLOYEES:
-
El grupo de columnas
JOB_IDENTIFIER_CGincluye las columnasJOB_ID,DEPARTMENT_IDyMANAGER_ID. -
El grupo de columnas
COMPENSATION_CGincluye las columnasSALARYyCOMMISSION_PCT.
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_COLUMN_GROUP(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
COLUMN_LIST => 'JOB_ID, DEPARTMENT_ID, MANAGER_ID',
COLUMN_GROUP_NAME => 'JOB_IDENTIFIER_CG');
END;
/
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_COLUMN_GROUP(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
COLUMN_LIST => 'SALARY, COMMISSION_PCT',
COLUMN_GROUP_NAME => 'COMPENSATION_CG');
END;
/
Configuración de resolución y detección de conflictos delta
El procedimiento ADD_AUTO_CDR_DELTA_RES del paquete DBMS_GOLDENGATE_ADM configura la detección y resolución de conflictos delta.
Con la resolución de conflictos delta, se especifica una columna para la que se detectan y resuelven conflictos. El conflicto se detecta si el valor de la columna de la fila LCR no coincide con el valor correspondiente de la tabla. El conflicto se resuelve agregando la diferencia entre los valores nuevo y antiguo de la fila LCR al valor de la tabla.
Puede configurar un administrador de Oracle GoldenGate mediante el procedimiento GRANT_ADMIN_PRIVILEGE en el paquete DBMS_GOLDENGATE_ADM.
-
Conéctese a la base de datos del servidor entrante como administrador de Oracle GoldenGate.
-
Ejecute el procedimiento
ADD_AUTO_CDRy especifique la tabla que desea configurar para la última detección y resolución de conflictos de registro de hora. -
Ejecute el procedimiento
ADD_AUTO_CDR_DELTA_RESy especifique la columna en la que se realiza la detección y resolución de conflictos delta. -
Repita los pasos anteriores en cada instancia de Oracle AI Database que replique la tabla.
Ejemplo 9-26 Configuración de la detección y resolución de conflictos delta para una tabla
En este ejemplo, se configura la detección y resolución de conflictos delta para la columna order_total en la tabla oe.orders.
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS');
END;
/
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR_DELTA_RES(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS',
COLUMN_NAME => 'ORDER_TOTAL');
END;
/
Gestión de la detección y resolución automáticas de conflictos
Puede gestionar la detección y resolución automática de conflictos de Oracle GoldenGate en Oracle AI Database con el paquete DBMS_GOLDENGATE_ADM.
Modificación de la resolución y detección de conflictos de una tabla
El procedimiento ALTER_AUTO_CDR del paquete DBMS_GOLDENGATE_ADM modifica la detección y resolución de conflictos de una tabla.
La detección y resolución automáticas de conflictos de Oracle GoldenGate se deben configurar para la tabla:
-
Conéctese a la base de datos del servidor entrante como administrador de Oracle GoldenGate.
-
Ejecute el procedimiento
ALTER_AUTO_CDRy especifique la tabla que desea configurar para la última detección y resolución de conflictos de registro de hora. -
Repita todos los pasos anteriores en cada instancia de Oracle AI Database que replique la tabla.
Ejemplo 9-27 Modificación de la Detección y Resolución de Conflictos para una Tabla
Este ejemplo modifica la detección y resolución de conflictos de la tabla HR.EMPLOYEES para especificar que se realice un seguimiento de los conflictos de supresión en una tabla de lápiz.
BEGIN
DBMS_GOLDENGATE_ADM.ALTER_AUTO_CDR(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
TOMBSTONE_DELETES => TRUE);
END;
/
Modificación de un grupo de columnas
El procedimiento ALTER_AUTO_CDR_COLUMN_GROUP modifica un grupo de columnas.
-
Conéctese a la base de datos del servidor entrante como administrador de Oracle GoldenGate.
-
Ejecute el procedimiento
ALTER_AUTO_CDR_COLUMN_GROUPy especifique uno o más grupos de columnas en la tabla. -
Repita todos los pasos anteriores en cada instancia de Oracle AI Database que replique la tabla.
Ejemplo 9-28 Modificación de un Grupo de Columnas
En este ejemplo se elimina la columna MANAGER_ID del grupo de columnas JOB_IDENTIFIER_CG para la tabla HR.EMPLOYEES.
BEGIN
DBMS_GOLDENGATE_ADM.ALTER_AUTO_CDR_COLUMN_GROUP(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
COLUMN_GROUP_NAME => 'JOB_IDENTIFIER_CG',
REMOVE_COLUMN_LIST => 'MANAGER_ID');
END;
/
Nota: Si hay más de una columna, utilice una lista separada por comas.
Purga de filas de piedra sepulcral
El procedimiento PURGE_TOMBSTONES elimina las filas de lápiz que se registraron antes de una fecha y hora especificadas. Este procedimiento elimina las filas de lápida de todas las tablas configuradas para la resolución de conflictos en la base de datos.
Puede ser necesario purgar filas de lápida periódicamente para evitar que el registro de lápida crezca demasiado grande con el tiempo.
-
Conéctese a la base de datos del servidor entrante como administrador de Oracle GoldenGate.
-
Ejecute el procedimiento
PURGE_TOMBSTONESy especifique la fecha y la hora.
Ejemplo 9-29 Depuración de Filas Tombstone
Este ejemplo purga todas las filas de lápida registradas antes de las 3:00 p.m. del 1 de diciembre de 2015, hora estándar del este. El registro de hora se debe introducir en formato TIMESTAMP WITH TIME ZONE.
EXEC DBMS_GOLDENGATE_ADM.PURGE_TOMBSTONES('2015-12-01 15:00:00.000000 EST');
Redefinición en línea en tablas ACDR
Oracle AI Database permite mitigar la interacción de las aplicaciones al reorganizar tablas o columnas mediante el paquete DBMS_REDEFINITION. El paquete DBMS_REDEFINITION se puede usar para realizar las siguientes tareas:
-
Elimine las columnas no utilizadas.
-
Reorganización, rediseño de tablespaces y partición.
DBMS_REDFINITION.START_REDEF_TABLE gestiona automáticamente la columna de registro de hora oculta en la tabla temporal.
Para obtener más información sobre el paquete DBMS_REDFINITION, consulte DBMS_REDEFINITION en la Referencia de tipos y paquetes PL/SQL de Oracle AI Database.
Eliminación de la detección y resolución de conflictos de una tabla
Con Oracle AI Database y versiones posteriores, la eliminación de la detección y resolución automáticas de conflictos (ACDR) por completo de la tabla tiene un impacto menor en la tabla porque las columnas relacionadas con AUTO_CDR se marcan como UNUSED si se elimina AUTO_CDR.
Después de llamar al procedimiento REMOVE_AUTO_CDR, las columnas no utilizadas se pueden suprimir manualmente en una ventana de mantenimiento. Esto resulta útil para tablas grandes en las que la operación ALTER TABLE ... DROP COLUMN consume muchos recursos.
Si desea eliminar todas las columnas internas AUTO_CDR inmediatamente al llamar al procedimiento REMOVE_AUTO_CDR, primero debe marcar la tabla con el parámetro additional_options REMOVE_HIDDEN_COLUMNS para el procedimiento ADD_AUTO_CDR o ALTER_AUTO_CDR.
Utilice el procedimiento REMOVE_AUTO_CDR del paquete DBMS_GOLDENGATE_ADM para etiquetar una tabla como UNUSED, lo que minimiza el bloqueo. Puede elegir borrar una columna o retenerla en una etapa posterior.
-
Conéctese a la base de datos del servidor entrante como administrador de Oracle GoldenGate.
-
Ejecute el procedimiento
REMOVE_AUTO_CDRy especifique la tabla. -
Repita todos los pasos anteriores en cada instancia de Oracle AI Database que replique la tabla.
Ejemplo 9-30 Eliminación de la detección y resolución de conflictos para una tabla
En este ejemplo, se elimina la detección y resolución de conflictos para la tabla HR.EMPLOYEES.
BEGIN
DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES');
END;
/
Puede elegir borrar columnas mediante el indicador ADD_AUTO_CDR.REMOVE_HIDDEN_COLUMNS como parámetro additional_flags en el procedimiento ADD_AUTO_CDR.
A continuación, se muestra un ejemplo que puede utilizar para ver columnas ocultas en una tabla.
La siguiente consulta utiliza el paquete DBA_UNUSED_COL_TABS para determinar si hay columnas no utilizadas en la tabla EMPLOYEES.
SELECT OWNER, TABLE_NAME, COUNT
FROM DBA_UNUSED_COL_TABS
WHERE OWNER = 'HR'
AND TABLE_NAME = 'EMPLOYEES'
ORDER BY OWNER, TABLE_NAME;
La salida se muestra de la siguiente manera:
OWNER TABLE_NAME COUNT
-------- ------------ ----------
HR EMPLOYEES 1
La siguiente consulta muestra las columnas ocultas que el sistema etiquetó cuando se eliminó ACDR para el grupo de columnas en la tabla EMPLOYEES.
SELECT OWNER, TABLE_NAME, COLUMN_ID, COLUMN_NAME, DATA_TYPE, HIDDEN_COLUMN
FROM DBA_TAB_COLS
WHERE OWNER = 'HR'
AND TABLE_NAME = 'EMPLOYEES'
AND HIDDEN_COLUMN = 'YES' AND USER_GENERATED= 'NO'
ORDER BY OWNER, TABLE_NAME, COLUMN_ID;
La salida se muestra de la siguiente manera:
OWNER TABLE_NAME COLUMN_ID COLUMN_NAME DATA_TYPE HIDDEN_COLUMN
------------ ------------ ---------- ------------- ------------ ---------------
HR EMPLOYEES SYS_C00014_22092220:30:52$ TIMESTAMP(6) YES
Eliminación de un grupo de columnas
Con Oracle AI Database 26ai y versiones posteriores, la eliminación de la detección y resolución automáticas de conflictos (ACDR) de los grupos de columnas tiene un menor impacto en la tabla porque las columnas relacionadas con ACDR se marcan como UNUSED. También puede elegir borrar una columna o retenerla en una etapa posterior.
Utilice el procedimiento REMOVE_AUTO_CDR_COLUMN_GROUP del paquete DBMS_GOLDENGATE_ADM para etiquetar una tabla, lo que minimiza el bloqueo. Consulte el ejemplo de Removing Conflict Detection and Resolution From a Table.
-
Conéctese a la base de datos del servidor entrante como administrador de Oracle GoldenGate.
-
Ejecute el procedimiento
REMOVE_AUTO_CDR_COLUMN_GROUPy especifique el nombre del grupo de columnas. -
Repita todos los pasos anteriores en cada instancia de Oracle AI Database que replique la tabla.
Ejemplo 9-31 Eliminación de un grupo de columnas
En este ejemplo se elimina el grupo de columnas COMPENSATION_CG de la tabla HR.EMPLOYEES.
BEGIN
DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR_COLUMN_GROUP(
SCHEMA_NAME => 'HR',
TABLE_NAME => 'EMPLOYEES',
COLUMN_GROUP_NAME => 'COMPENSATION_CG');
END;
Eliminación de la resolución y detección de conflictos delta
El procedimiento REMOVE_AUTO_CDR_DELTA_RES del paquete DBMS_GOLDENGATE_ADM elimina la detección y resolución de conflictos delta para una columna.
La detección y resolución de conflictos delta se deben configurar para la columna especificada.
-
Conéctese a la base de datos del servidor entrante como administrador de Oracle GoldenGate.
-
Ejecute el procedimiento
REMOVE_AUTO_CDR_DELTA_RESy especifique la columna. -
Repita todos los pasos anteriores en cada instancia de Oracle AI Database que replique la tabla.
Ejemplo 9-32 Eliminación de la detección y resolución de conflictos delta para una tabla
En este ejemplo, se elimina la detección y resolución de conflictos delta para la columna ORDER_TOTAL en la tabla OE.ORDERS.
BEGIN
DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR_DELTA_RES(
SCHEMA_NAME => 'OE',
TABLE_NAME => 'ORDERS',
COLUMN_NAME => 'ORDER_TOTAL');
END;
Supervisión de la detección y resolución automáticas de conflictos
Puede supervisar la detección y resolución automática de conflictos de Oracle GoldenGate en una instancia de Oracle AI Database consultando las vistas del diccionario de datos.
Visualización de información sobre las tablas configuradas para conflictos
La vista ALL_GG_AUTO_CDR_TABLES muestra información sobre las tablas configuradas para la detección y resolución automáticas de conflictos de Oracle GoldenGate.
-
Conéctese a la base de datos.
-
Consulte la vista
ALL_GG_AUTO_CDR_TABLES.
Ejemplo 9-33 Visualización de información sobre las tablas configuradas para la detección y resolución de conflictos
Esta consulta muestra la siguiente información sobre las tablas que están configuradas para la detección y resolución de conflictos:
-
Propietario de la tabla para cada tabla.
-
Nombre de la tabla para cada tabla.
-
Tabla de lápida utilizada para almacenar filas suprimidas para conflictos de actualización-supresión, si se configura una tabla de lápida para la tabla.
-
Columna de registro de hora oculta que se utiliza para la resolución de conflictos de cada tabla.
COLUMN TABLE_OWNER FORMAT A15
COLUMN TABLE_NAME FORMAT A15
COLUMN TOMBSTONE_TABLE FORMAT A15
COLUMN ROW_RESOLUTION_COLUMN FORMAT A25
SELECT TABLE_OWNER,
TABLE_NAME,
TOMBSTONE_TABLE,
ROW_RESOLUTION_COLUMN
FROM ALL_GG_AUTO_CDR_TABLES
ORDER BY TABLE_OWNER, TABLE_NAME;
El resultado tiene un aspecto similar al siguiente:
TABLE_OWNER TABLE_NAME TOMBSTONE_TABLE ROW_RESOLUTION_COLUMN
--------------- --------------- --------------- -------------------------
HR EMPLOYEES DT$_EMPLOYEES CDRTS$ROW
OE ORDERS DT$_ORDERS CDRTS$ROW
Visualización de información sobre columnas de resolución de conflictos
La vista ALL_GG_AUTO_CDR_COLUMNS muestra información sobre las columnas configuradas para la detección y resolución automáticas de conflictos de Oracle GoldenGate.
Las columnas se pueden configurar para la detección y resolución automática de conflictos de filas o columnas. Las columnas se pueden configurar para la última resolución de conflictos de registro de hora en un grupo de columnas. Además, se puede configurar una columna para la resolución de conflictos delta.
-
Conéctese a la base de datos como administrador de Oracle GoldenGate.
-
Consulte la vista
ALL_GG_AUTO_CDR_COLUMNS.
Ejemplo 9-34 Visualización de información sobre grupos de columnas
Esta consulta muestra la siguiente información sobre las tablas que están configuradas para la detección y resolución de conflictos:
-
Propietario de la tabla para cada tabla.
-
Nombre de la tabla para cada tabla.
-
Si la columna está en un grupo de columnas, el nombre del grupo de columnas.
-
Nombre de la columna.
-
Si la columna está configurada para la última resolución de conflictos de registro de hora, el nombre de la columna de registro de hora oculta para la columna.
COLUMN TABLE_OWNER FORMAT A10
COLUMN TABLE_NAME FORMAT A10
COLUMN COLUMN_GROUP_NAME FORMAT A17
COLUMN COLUMN_NAME FORMAT A15
COLUMN RESOLUTION_COLUMN FORMAT A23
SELECT TABLE_OWNER,
TABLE_NAME,
COLUMN_GROUP_NAME,
COLUMN_NAME,
RESOLUTION_COLUMN
FROM ALL_GG_AUTO_CDR_COLUMNS
ORDER BY TABLE_OWNER, TABLE_NAME;
El resultado tiene un aspecto similar al siguiente:
TABLE_OWNE TABLE_NAME COLUMN_GROUP_NAME COLUMN_NAME RESOLUTION_COLUMN
---------- ---------- ----------------- --------------- -----------------------
HR EMPLOYEES COMPENSATION_CG COMMISSION_PCT CDRTS$COMPENSATION_CG
HR EMPLOYEES COMPENSATION_CG SALARY CDRTS$COMPENSATION_CG
HR EMPLOYEES JOB_IDENTIFIER_CG MANAGER_ID CDRTS$JOB_IDENTIFIER_CG
HR EMPLOYEES JOB_IDENTIFIER_CG JOB_ID CDRTS$JOB_IDENTIFIER_CG
HR EMPLOYEES JOB_IDENTIFIER_CG DEPARTMENT_ID CDRTS$JOB_IDENTIFIER_CG
HR EMPLOYEES IMPLICIT_COLUMNS$ PHONE_NUMBER CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ LAST_NAME CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ HIRE_DATE CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ FIRST_NAME CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ EMAIL CDRTS$ROW
HR EMPLOYEES IMPLICIT_COLUMNS$ EMPLOYEE_ID CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ ORDER_MODE CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ ORDER_ID CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ ORDER_DATE CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ CUSTOMER_ID CDRTS$ROW
OE ORDERS DELTA$ ORDER_TOTAL
OE ORDERS IMPLICIT_COLUMNS$ PROMOTION_ID CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ ORDER_STATUS CDRTS$ROW
OE ORDERS IMPLICIT_COLUMNS$ SALES_REP_ID CDRTS$ROW
En este ejemplo, las columnas con IMPLICIT_COLUMNS$ para el nombre de grupo de columnas se configuran para la detección y resolución de conflictos de filas, pero no forman parte de un grupo de columnas. Las columnas con DELTA$ para el nombre del grupo de columnas se configuran para la detección y resolución de conflictos delta y estas columnas no tienen una columna de resolución.
Visualización de información sobre grupos de columnas
La vista ALL_GG_AUTO_CDR_COLUMN_GROUPS muestra información sobre los grupos de columnas configurados para la detección y resolución automáticas de conflictos de Oracle GoldenGate.
Puede configurar la detección y resolución automática de conflictos de Oracle GoldenGate mediante el procedimiento ADD_AUTO_CDR en el paquete DBMS_GOLDENGATE_ADM. Puede configurar grupos de columnas mediante el procedimiento ADD_AUTO_CDR_COLUMN_GROUP en el paquete DBMS_GOLDENGATE_ADM.
-
Conéctese a la base de datos como administrador de Oracle GoldenGate.
-
Consulte la vista
ALL_GG_AUTO_CDR_COLUMN_GROUPS.
Ejemplo 9-35 Visualización de información sobre grupos de columnas
Esta consulta muestra la siguiente información sobre las tablas que están configuradas para la detección y resolución de conflictos:
-
Propietario de la tabla.
-
Nombre de la tabla.
-
Nombre del grupo de columnas.
-
Columna de registro de hora oculta utilizada para la resolución de conflictos para cada grupo de columnas.
COLUMN TABLE_OWNER FORMAT A15
COLUMN TABLE_NAME FORMAT A15
COLUMN COLUMN_GROUP_NAME FORMAT A20
COLUMN RESOLUTION_COLUMN FORMAT A25
SELECT TABLE_OWNER,
TABLE_NAME,
COLUMN_GROUP_NAME,
RESOLUTION_COLUMN
FROM ALL_GG_AUTO_CDR_COLUMN_GROUPS
ORDER BY TABLE_OWNER, TABLE_NAME;
El resultado tiene un aspecto similar al siguiente:
TABLE_OWNER TABLE_NAME COLUMN_GROUP_NAME RESOLUTION_COLUMN
--------------- --------------- -------------------- -------------------------
HR EMPLOYEES COMPENSATION_CG CDRTS$COMPENSATION_CG
HR EMPLOYEES JOB_IDENTIFIER_CG CDRTS$JOB_IDENTIFIER_CG