Valide la coherencia de los datos con los despliegues de verificación de datos

Descubra cómo validar la consistencia de los datos entre las bases de datos de origen y destino mediante OCI GoldenGate.

Antes de empezar

Para completar correctamente este inicio rápido, debe tener:

Tarea 1: Configuración del entorno

  1. Creación de un despliegue de replicación de datos.

  2. Cree una conexión de origen de Oracle Autonomous AI Transaction Processing (ATP).

  3. Cree una conexión de destino de Autonomous AI Lakehouse (ALK).

  4. Asignar una conexión al despliegue.

  5. Utilice la herramienta SQL para activar el registro complementario:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
  6. Ejecute la siguiente consulta en la herramienta SQL para asegurarse de que support_mode=FULL para todas las tablas de la base datos de origen:

    select * from DBA_GOLDENGATE_SUPPORT_MODE where owner = 'SRC_OCIGGLL';

Tarea 2: Creación del Extract integrado

Un Extract integrado captura los cambios en curso en la base de datos de origen.

  1. En la página Detalles del despliegue, seleccione Iniciar consola.

  2. Si es necesario, introduzca oggadmin para el nombre de usuario y la contraseña que ha utilizado al crear el despliegue y, a continuación, seleccione Conectar.

  3. Agregar datos de transacción y una tabla de puntos de control:

    1. Abra el menú, seleccione Conexiones de base de datos y, a continuación, seleccione el menú.

    2. Seleccione Conectar a base de datos SourceDB.

    3. En el menú de navegación, seleccione Trandata (Datos de transacción) y, a continuación, Add Trandata (icono más).

    4. En Nombre de esquema, introduzca SRC_OCIGGLL y, a continuación, seleccione Enviar.

    5. Para verificarlo, introduzca SRC_OCIGGLL en el campo Buscar y seleccione Buscar.

    6. Abra el menú de navegación y, a continuación, seleccione Conexiones de base de datos.

    7. Seleccione Conectar a base de datos TargetDB.

    8. En el menú de navegación, seleccione Checkpoint (Punto de control) y, a continuación, Add Checkpoint (Agregar punto de control) (icono más).

    9. En Tabla de puntos de control, introduzca "SRCMIRROR_OCIGGLL"."CHECKTABLE" y, a continuación, seleccione Enviar.

  4. Agregue un Extract.

    Nota: Consulte opciones adicionales de parámetros de extracción para obtener más información sobre los parámetros que puede utilizar para especificar tablas de origen.

    En la página Parámetros de extracción, agregue las siguientes líneas en EXTTRAIL <trail-name>:

    -- Capture DDL operations for listed schema tables
    ddl include mapped
    
    -- Add step-by-step history of to the report file. Useful when troubleshooting.
    ddloptions report
    
    -- Write capture stats per table to the report file daily.
    report at 00:01
    
    -- Rollover the report file weekly. Useful when IE runs
    -- without being stopped/started for long periods of time to
    -- keep the report files from becoming too large.
    reportrollover at 00:01 on Sunday
    
    -- Report total operations captured, and operations per second
    -- every 10 minutes.
    reportcount every 10 minutes, rate
    
    -- Table list for capture
    table SRC_OCIGGLL.*;
  5. Compruebe si hay transacciones de larga duración. Ejecute el siguiente script en la base de datos de origen:

    select start_scn, start_time from gv$transaction where start_scn < (select max(start_scn) from dba_capture);

    Si la consulta devuelve alguna fila, debe buscar el SCN de la transacción y, a continuación, confirmar o realizar un rollback de la transacción.

Tarea 3: Exportación de datos mediante Oracle Data Pump (ExpDP)

Utilice Oracle Data Pump (ExpDP) para exportar datos de la base de datos de origen a Oracle Object Store.

  1. Cree un bucket de Oracle Object Store.

    Tome nota del espacio de nombres y del nombre del bucket para utilizarlos con los scripts de exportación e importación.

  2. Cree un token de autenticación y, a continuación, copie y pegue la cadena de token en un editor de texto para su uso posterior.

  3. Cree una credencial en la base de datos de origen, sustituyendo <user-name> y <token> por su nombre de usuario de cuenta de Oracle Cloud y la cadena de token que ha creado en el paso anterior:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'ADB_OBJECTSTORE',
        username => '<user-name>',
        password => '<token>'
      );
    END;
  4. Ejecute el siguiente script en la base de datos de origen para crear el trabajo Exportar datos. Asegúrese de sustituir <region>, <namespace> y <bucket-name> en el URI de Object Store según corresponda. SRC_OCIGGLL.dmp es un archivo que se creará cuando se ejecute este script.

    DECLARE
    ind NUMBER;              -- Loop index
    h1 NUMBER;               -- Data Pump job handle
    percent_done NUMBER;     -- Percentage of job complete
    job_state VARCHAR2(30);  -- To keep track of job state
    le ku$_LogEntry;         -- For WIP and error messages
    js ku$_JobStatus;        -- The job status from get_status
    jd ku$_JobDesc;          -- The job description from get_status
    sts ku$_Status;          -- The status object returned by get_status
    
    BEGIN
    
    -- Create a (user-named) Data Pump job to do a schema export.
    h1 := DBMS_DATAPUMP.OPEN('EXPORT','SCHEMA',NULL,'SRC_OCIGGLL_EXPORT','LATEST');
    
    -- Specify a single dump file for the job (using the handle just returned)
    -- and a directory object, which must already be defined and accessible
    -- to the user running this procedure.
    DBMS_DATAPUMP.ADD_FILE(h1,'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket-name>/o/SRC_OCIGGLL.dmp','ADB_OBJECTSTORE','100MB',DBMS_DATAPUMP.KU$_FILE_TYPE_URIDUMP_FILE,1);
    
    -- A metadata filter is used to specify the schema that will be exported.
    DBMS_DATAPUMP.METADATA_FILTER(h1,'SCHEMA_EXPR','IN (''SRC_OCIGGLL'')');
    
    -- Start the job. An exception will be generated if something is not set up properly.
    DBMS_DATAPUMP.START_JOB(h1);
    
    -- The export job should now be running. In the following loop, the job
    -- is monitored until it completes. In the meantime, progress information is displayed.
    percent_done := 0;
    job_state := 'UNDEFINED';
    while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop
      dbms_datapump.get_status(h1,dbms_datapump.ku$_status_job_error + dbms_datapump.ku$_status_job_status + dbms_datapump.ku$_status_wip,-1,job_state,sts);
      js := sts.job_status;
    
    -- If the percentage done changed, display the new value.
    if js.percent_done != percent_done
    then
      dbms_output.put_line('*** Job percent done = ' \|\| to_char(js.percent_done));
      percent_done := js.percent_done;
    end if;
    
    -- If any work-in-progress (WIP) or error messages were received for the job, display them.
    if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0)
    then
      le := sts.wip;
    else
      if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
      then
        le := sts.error;
      else
        le := null;
      end if;
    end if;
    if le is not null
    then
      ind := le.FIRST;
      while ind is not null loop
        dbms_output.put_line(le(ind).LogText);
        ind := le.NEXT(ind);
      end loop;
    end if;
      end loop;
    
      -- Indicate that the job finished and detach from it.
      dbms_output.put_line('Job has completed');
      dbms_output.put_line('Final job state = ' \|\| job_state);
      dbms_datapump.detach(h1);
    END;

Tarea 4: Instanciación de la base de datos de destino mediante Oracle Data Pump (ImpDP)

Utilice Oracle Data Pump (ImpDP) para importar datos a la base de datos de destino desde SRC_OCIGGLL.dmp que se ha exportado de la base de datos de origen.

  1. Cree una credencial en la base de datos de destino para acceder a Oracle Object Store (utilizando la misma información de la sección anterior).

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'ADB_OBJECTSTORE',
        username => '<user-name>',
        password => '<token>'
      );
    END;
  2. Ejecute el siguiente script en la base de datos de destino para importar datos desde SRC_OCIGGLL.dmp. Asegúrese de sustituir <region>, <namespace> y <bucket-name> en el URI de Object Store según corresponda:

    DECLARE
    ind NUMBER;  -- Loop index
    h1 NUMBER;  -- Data Pump job handle
    percent_done NUMBER;  -- Percentage of job complete
    job_state VARCHAR2(30);  -- To keep track of job state
    le ku$_LogEntry;  -- For WIP and error messages
    js ku$_JobStatus;  -- The job status from get_status
    jd ku$_JobDesc;  -- The job description from get_status
    sts ku$_Status;  -- The status object returned by get_status
    BEGIN
    
    -- Create a (user-named) Data Pump job to do a "full" import (everything
    
    -- in the dump file without filtering).
    h1 := DBMS_DATAPUMP.OPEN('IMPORT','FULL',NULL,'SRCMIRROR_OCIGGLL_IMPORT');
    
    -- Specify the single dump file for the job (using the handle just returned)
    -- and directory object, which must already be defined and accessible
    -- to the user running this procedure. This is the dump file created by
    -- the export operation in the first example.
    
    DBMS_DATAPUMP.ADD_FILE(h1,'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket-name>/o/SRC_OCIGGLL.dmp','ADB_OBJECTSTORE',null,DBMS_DATAPUMP.KU$_FILE_TYPE_URIDUMP_FILE);
    
    -- A metadata remap will map all schema objects from SRC_OCIGGLL to SRCMIRROR_OCIGGLL.
    DBMS_DATAPUMP.METADATA_REMAP(h1,'REMAP_SCHEMA','SRC_OCIGGLL','SRCMIRROR_OCIGGLL');
    
    -- If a table already exists in the destination schema, skip it (leave
    -- the preexisting table alone). This is the default, but it does not hurt
    -- to specify it explicitly.
    DBMS_DATAPUMP.SET_PARAMETER(h1,'TABLE_EXISTS_ACTION','SKIP');
    
    -- Start the job. An exception is returned if something is not set up properly.
    DBMS_DATAPUMP.START_JOB(h1);
    
    -- The import job should now be running. In the following loop, the job is
    
    -- monitored until it completes. In the meantime, progress information is
    
    -- displayed. Note: this is identical to the export example.
    percent_done := 0;
    job_state := 'UNDEFINED';
    while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop
      dbms_datapump.get_status(h1,
        dbms_datapump.ku$_status_job_error +
        dbms_datapump.ku$_status_job_status +
        dbms_datapump.ku$_status_wip,-1,job_state,sts);
        js := sts.job_status;
    
      -- If the percentage done changed, display the new value.
      if js.percent_done != percent_done
      then
        dbms_output.put_line('*** Job percent done = ' \|\|
        to_char(js.percent_done));
        percent_done := js.percent_done;
      end if;
    
      -- If any work-in-progress (WIP) or Error messages were received for the job, display them.
      if (bitand(sts.mask,dbms_datapump.ku$_status_wip) != 0)
      then
        le := sts.wip;
      else
        if (bitand(sts.mask,dbms_datapump.ku$_status_job_error) != 0)
        then
          le := sts.error;
        else
          le := null;
        end if;
      end if;
      if le is not null
      then
        ind := le.FIRST;
        while ind is not null loop
          dbms_output.put_line(le(ind).LogText);
          ind := le.NEXT(ind);
        end loop;
      end if;
    end loop;
    
    -- Indicate that the job finished and gracefully detach from it.
    dbms_output.put_line('Job has completed');
    dbms_output.put_line('Final job state = ' \|\| job_state);
    dbms_datapump.detach(h1);
    END;

Tarea 5: Adición y ejecución de un Replicat sin integrar

  1. Agregue y ejecute un Replicat.

    En la pantalla Archivo de parámetros, sustituya MAP *.*, TARGET *.*; por el siguiente script:

    -- Capture DDL operations for listed schema tables
    ddl include mapped
    
    -- Add step-by-step history of ddl operations captured
    -- to the report file. Very useful when troubleshooting.
    ddloptions report
    
    -- Write capture stats per table to the report file daily.
    report at 00:01
    
    -- Rollover the report file weekly. Useful when PR runs
    -- without being stopped/started for long periods of time to
    -- keep the report files from becoming too large.
    reportrollover at 00:01 on Sunday
    
    -- Report total operations captured, and operations per second
    -- every 10 minutes.
    reportcount every 10 minutes, rate
    
    -- Table map list for apply
    DBOPTIONS ENABLE_INSTANTIATION_FILTERING;
    MAP SRC_OCIGGLL.*, TARGET SRCMIRROR_OCIGGLL.*;

    Nota: DBOPTIONS ENABLE_INSTATIATION_FILTERING activa el filtrado de CSN en las tablas importadas mediante Oracle Data Pump. Para obtener más información, consulte la referencia de DBOPTIONS.

  2. Realice inserciones en la base de datos origen:

    1. Vuelva a la consola de Oracle Cloud y utilice el menú de navegación para volver a Oracle AI Database, Autonomous AI Transaction Processing y, a continuación, SourceDB.

    2. En la página Detalles de SourceDB, seleccione Acciones de base de datos y, a continuación, SQL.

    3. Introduzca las siguientes inserciones y, a continuación, seleccione Ejecutar script:

      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1000,'Houston',20,743113);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1001,'Dallas',20,822416);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1002,'San Francisco',21,157574);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1003,'Los Angeles',21,743878);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1004,'San Diego',21,840689);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1005,'Chicago',23,616472);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1006,'Memphis',23,580075);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1007,'New York City',22,124434);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1008,'Boston',22,275581);
      Insert into SRC_OCIGGLL.SRC_CITY (CITY_ID,CITY,REGION_ID,POPULATION) values (1009,'Washington D.C.',22,688002);
    4. En la consola de despliegue de OCI GoldenGate, seleccione el nombre de extracción (UAEXT) y, a continuación, seleccione Estadísticas. Verifique que SRC_OCIGGLL.SRC_CITY se muestra con 10 inserciones.

    5. Vuelva a la pantalla Visión general, seleccione el nombre de Replicat (REP) y, a continuación, seleccione Estadísticas. Verifique que SRCMIRROR_OCIGGLL.SRC_CITY se muestra con 10 inserciones

Tarea 6: Crear recursos de verificación de datos

  1. Crear un despliegue de servidor de verificación de datos.

  2. Cree 2 despliegues de agente de verificación de datos.

  3. Cree una conexión de GoldenGate.

  4. Asigne la conexión ATP creada en la tarea 1 a uno del despliegue de agente.

  5. Asigne la conexión ALK creada en la tarea 1 al otro despliegue de agente.

  6. Asigne la conexión de GoldenGate al despliegue del servidor.

  7. Después de que los despliegues se activen, revise los entornos de verificación de datos:

    1. En la página de detalles del despliegue del servidor, seleccione Iniciar consola.

    2. En el menú de navegación, seleccione Connections (Conexiones).

    3. En la página Connections, confirme que los agentes aparecen en la lista y que sus estados son Active.

Tarea 7: Creación de un grupo y comparación de pares

En el despliegue del servidor, cree una configuración de comparación:

  1. En el menú de navegación, seleccione Grupos y Pares de Comparación.

  2. En la página Grupos y Pares de Comparación, seleccione Crear.

  3. En la página Configuración Crear Grupo y Comparar Par, complete los campos de la siguiente manera y, a continuación, seleccione Siguiente:

    1. Introduzca un nombre.

    2. Seleccione las opciones Origen y Conexiones de destino en sus respectivas listas desplegables.

    3. Seleccione el origen y los catálogos de destino en sus respectivas listas desplegables.

    4. Agregar un par de comparación

  4. Revise las reglas de asignación y, a continuación, seleccione Siguiente.

  5. Revise la página Asignación y, a continuación, seleccione Generar pares de comparación.

  6. Guarde el grupo.

Tarea 8: Crear y ejecutar el trabajo de comparación

  1. En el menú de navegación, seleccione Trabajos.

  2. En la página Trabajos, seleccione Crear.

  3. En la página Crear trabajo, complete los campos como se indica a continuación y, a continuación, seleccione Enviar:

    1. Introduzca un nombre para el trabajo.

    2. Seleccione Agregar grupo, seleccione el grupo creado en la tarea 7 y, a continuación, seleccione Agregar y guardar.

  4. En el menú de navegación, seleccione Run Job.

  5. En la página Ejecutar trabajo, seleccione el trabajo creado en el paso 3 y el perfil por defecto y, a continuación, seleccione Ejecutar trabajo.

Tarea 9: Analizar resultados

  1. En el menú de navegación, seleccione Monitor Jobs.

  2. Seleccione Trabajos completados.

  3. Seleccione el trabajo para ver sus detalles y, a continuación, verifique lo siguiente:

    • Ninguna fila se marca como No sincronizada.
    • No se han notificado filas faltantes o adicionales

En esta etapa, las bases de datos de origen y destino se sincronizan.

Tarea 10: Introducir inconsistencias en los datos

En esta tarea, introducirá inconsistencias controladas en la base de datos de destino mediante la tabla SRCMIRROR_OCIGGLL.SRC_CITY.

  1. Verifique los datos existentes en el destino. En la hoja de trabajo SQL ALK de destino, introduzca lo siguiente:

    SELECT CITY_ID, CITY, REGION_ID, POPULATION
    FROM SRCMIRROR_OCIGGLL.SRC_CITY
    WHERE CITY_ID BETWEEN 1000 AND 1009
    ORDER BY CITY_ID;
  2. Borre la hoja de trabajo y, a continuación, introduzca lo siguiente para introducir una discrepancia de datos:

    UPDATE SRCMIRROR_OCIGGLL.SRC_CITY
    SET POPULATION = 999999
    WHERE CITY_ID = 1003;
    
    COMMIT;
  3. Borre la hoja de trabajo y, a continuación, introduzca lo siguiente para introducir una fila que falta:

    DELETE FROM SRCMIRROR_OCIGGLL.SRC_CITY
    WHERE CITY_ID = 1005;
    
    COMMIT;
  4. Borre la hoja de trabajo y, a continuación, introduzca lo siguiente para introducir una fila adicional:

    INSERT INTO SRCMIRROR_OCIGGLL.SRC_CITY (CITY_ID, CITY, REGION_ID, POPULATION)
    VALUES (1010, 'Test City', 99, 123456);
    
    COMMIT;
  5. Borre la hoja de trabajo y, a continuación, introduzca lo siguiente para validar las incidencias introducidas:

    SELECT CITY_ID, CITY, REGION_ID, POPULATION
    FROM SRCMIRROR_OCIGGLL.SRC_CITY
    WHERE CITY_ID BETWEEN 1000 AND 1010
    ORDER BY CITY_ID;

    Debe observar lo siguiente:

    • CITY_ID 1003 tiene relleno incorrecto
    • Falta CITY_ID 1005
    • CITY_ID 1010 solo existe en el destino

Tarea 11: Reparación de discrepancias de datos usando Veridata

Ahora que tiene algunas discrepancias de datos entre el origen y el destino, puede volver a ejecutar la comparación y repararlas.

  1. En el menú de navegación de la consola de despliegue del servidor, seleccione Run Jobs (Ejecutar trabajos).

  2. Seleccione el trabajo Comparar y, a continuación, seleccione Ejecutar trabajo.

  3. En el menú de navegación, seleccione Monitor Jobs.

  4. Seleccione su trabajo de comparación para ver sus detalles. Confirme lo siguiente:

    • Las filas se marcan como no sincronizadas
    • Las diferencias incluyen:
      • Filas faltantes
      • Filas adicionales
      • Discrepancia de columnas
  5. En la página Detalles del trabajo, busque SRC_CITY=SRC_CITY y, a continuación, seleccione el nombre del par de comparación para ver sus detalles.

  6. En los detalles del par de comparación, seleccione Filas no sincronizadas y, a continuación, revise las discrepancias.

  7. Seleccione Reparar.

  8. En el cuadro de diálogo Reparar Trabajo, seleccione Reparar Todas las Filas No Sincronizadas y, a continuación, seleccione Enviar.

    Esto crea un trabajo de reparación que sincroniza el destino con el origen.

  9. En el menú de navegación, seleccione Monitor Repair Job. Busque el trabajo de reparación y supervisarlo hasta que se complete.

  10. Una vez finalizado el trabajo de reparación, selecciónelo para ver sus detalles. Confirme lo siguiente:

    • Las filas se actualizaron, insertaron o suprimieron según fuera necesario.
    • No se han producido errores.
  11. Vuelva a ejecutar la comparación.

    1. En el menú de navegación, seleccione Trabajos.

    2. Seleccione el trabajo Comparar y, a continuación, seleccione Ejecutar trabajo.

    3. Vuelva a Supervisar trabajos y espere hasta que finalice el trabajo.

    4. Una vez finalizado el trabajo, consulte los detalles para confirmar lo siguiente:

      • Ninguna fila está marcada como no sincronizada
      • No faltan filas
      • No hay filas adicionales
      • No hay ninguna discrepancia de columnas

Los juegos de datos de origen y destino ahora están totalmente sincronizados.