Descubra o OCI GoldenGate Data Transforms

Saiba como usar as implantações OCI GoldenGate Data Replication e Data Transforms para carregar e transformar dados entre dois Autonomous AI Databases.

Antes de começar

Para concluir com sucesso esse início rápido, você precisa:

Tarefa 1: Configurar o ambiente

  1. Crie uma implantação de Replicação de Dados.

  2. Crie uma conexão OracleAutonomous AI Transaction Processing(ATP) de origem.

  3. Crie uma conexão ALK (targetAutonomous AI Lakehouse).

  4. Atribua uma conexão à implantação.

  5. Use a ferramenta SQL para ativar o log complementar:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
  6. Execute a seguinte consulta na ferramenta SQL para garantir que support_mode=FULL seja usado em todas as tabelas do banco de dados de origem:

    select * from DBA_GOLDENGATE_SUPPORT_MODE where owner = 'SRC_OCIGGLL';

Tarefa 2: Criar o Extract Integrado

Um Extract Integrado captura alterações contínuas no banco de dados de origem.

  1. Na página Detalhes da implantação, selecione Iniciar console.

  2. Se necessário, informe oggadmin para o Nome do usuário e a senha que você usou ao criar a implantação e selecione Acessar.

  3. Adicionar Dados da Transação e uma Tabela de Checkpoint:

    1. Abra o menu de navegação para depois selecionar Conexões de BD.

    2. Selecione Conectar-se ao banco de dados SourceDB.

    3. No menu de navegação, selecione Trandata e, em seguida, Adicionar Trandata (ícone de mais).

    4. Para Nome do Esquema, digite SRC_OCIGGLL e selecione Enviar.

    5. Para verificar, digite SRC_OCIGGLL no campo Pesquisar e selecione Pesquisar.

    6. Abra o menu de navegação para depois selecionar Conexões de BD.

    7. Selecione Conectar-se ao banco de dados TargetDB.

    8. No menu de navegação, selecione Checkpoint e, em seguida, Add Checkpoint (ícone de mais).

    9. Para Tabela de Checkpoint, digite "SRCMIRROR_OCIGGLL"."CHECKTABLE" e selecione Submeter.

  4. Adicione um processo de Extract.

    Observação: Consulte opções de parâmetro de extração adicionais para obter mais informações sobre parâmetros que você pode usar para especificar tabelas de origem.

    Na página Parâmetros da Extração, anexe as seguintes linhas em EXTTRAIL <trail-name>:

    -- Capture DDL operations for listed schema tables
    ddl include mapped
    
    -- Add step-by-step history of
    -- 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 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. Verifique transações de longa execução. Execute o seguinte script no seu banco de dados de origem:

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

    Se a consulta retornar linhas, localize o SCN da transação e, em seguida, confirme ou reverta a transação.

Tarefa 3: Exportar dados usando o Oracle Data Pump (ExpDP)

Use o Oracle Data Pump (ExpDP) para exportar dados do banco de dados de origem para o Oracle Object Store.

  1. Crie um bucket do Oracle Object Store.

    Anote o namespace e o nome do bucket para uso com os scripts de Exportação e Importação.

  2. Crie um Token de Autenticação e copie e cole a string de token em um editor de texto para uso posterior.

  3. Crie uma credencial em seu banco de dados de origem, substituindo <user-name> e <token> pelo nome de usuário da sua conta do Oracle Cloud e pela string de token criada na etapa anterior:

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'ADB_OBJECTSTORE',
        username => '<user-name>',
        password => '<token>'
      );
    END;
  4. Execute o script a seguir em seu banco de dados de origem para criar o job Exportar Dados. Certifique-se de substituir corretamente <region>, <namespace> e <bucket-name> no URI do Object Store. SRC_OCIGGLL.dmp é um arquivo que será criado quando esse script for executado.

    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;

Tarefa 4: Instanciar o banco de dados de destino usando o Oracle Data Pump (ImpDP)

Use o Oracle Data Pump (ImpDP) para importar dados para o banco de dados de destino do SRC_OCIGGLL.dmp que foi exportado do banco de dados de origem.

  1. Crie uma credencial em seu banco de dados de destino para acessar o Oracle Object Store (usando as mesmas informações na seção anterior).

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name => 'ADB_OBJECTSTORE',
        username => '<user-name>',
        password => '<token>'
      );
    END;
  2. Execute o script a seguir no banco de dados de destino para importar dados do SRC_OCIGGLL.dmp. Certifique-se de substituir corretamente <region>, <namespace> e <bucket-name> no URI do Object Store:

    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;

Tarefa 5: Adicionar e executar um processo de Replicat Não Integrado

  1. Adicionar e executar um processo Replicat.

    Na tela Arquivo de Parâmetro, substitua MAP *.*, TARGET *.*; pelo seguinte 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.*;

    Observação: DBOPTIONS ENABLE_INSTANTIATION_FILTERING ativa a filtragem de CSN em tabelas importadas usando o Oracle Data Pump. Para obter mais informações, consulte Referência de DBOPTIONS.

  2. Executar Inserções no banco de dados de origem:

    1. Retorne à console do Oracle Cloud e use o menu de navegação para navegar de volta para o Oracle AI Database, Autonomous AI Transaction Processing e, em seguida, SourceDB.

    2. Na página Detalhes do SourceDB, selecione Database actions e, em seguida, selecione SQL.

    3. Informe as seguintes inserções e selecione Executar 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. Na Console de Implantação do OCI GoldenGate, selecione o Nome da extração (UAEXT) e selecione Estatísticas. Verifique se SRC_OCIGGLL.SRC_CITY está listada com 10 inserções.

    5. Volte para a tela Visão Geral, selecione o Nome do replicador (REP) e, em seguida, selecione Estatísticas. Verifique se SRCMIRROR_OCIGGLL.SRC_CITY está listada com 10 inserções

Tarefa 6: Criar os recursos de Transformação de Dados

  1. Criar uma implantação de Transformações de Dados.

  2. Criar uma conexão Genérica.

    Observação: Por exemplo, para Autonomous AI Databases no Leste dos EUA (Ashburn), use os seguintes valores:

    • Para Host, digite adb.us-ashburn-1.oraclecloud.com:1522.

    • Para Sub-rede, selecione a mesma sub-rede da implantação na lista drop-down.

  3. Designe a conexão Genérica à implantação.

  4. Crie TRG_CUSTOMER em SRCMIRROR_OCIGGLL na sua instância do Autonomous AI Lakehouse (ADW):

    1. No console do Oracle Cloud, abra o menu de navegação, navegue até o Oracle AI Database e selecione Autonomous AI Lakehouse.

    2. Na página Autonomous Databases, selecione na sua instância do ADW.

    3. Na página de detalhes do ADW Autonomous AI Database, selecione Database actions e, em seguida, selecione SQL na lista drop-down. Se o menu Database actions demorar muito para ser carregado, você poderá selecionar Database actions diretamente e, em seguida, selecionar SQL na página Database actions.

    4. Insira o seguinte texto na Planilha e selecione Executar Demonstrativo.

      create table SRCMIRROR_OCIGGLL.TRG_CUSTOMER (
         CUST_ID              NUMBER(10,0)     not null,
         DEAR                 VARCHAR2(4 BYTE),
         CUST_NAME            VARCHAR2(50 BYTE),
         ADDRESS              VARCHAR2(100 BYTE),
         CITY_ID              NUMBER(10,0),
         PHONE                VARCHAR2(50 BYTE),
         AGE                  NUMBER(3,0),
         AGE_RANGE            VARCHAR2(50 BYTE),
         SALES_PERS           VARCHAR2(50 BYTE),
         CRE_DATE             DATE,
         UPD_DATE             DATE,
         constraint PK_TRG_CUSTOMER primary key (CUST_ID)
      );
  5. Inicie a console de implantação do Data Transforms:

    1. Navegue de volta para a página Implantações e selecione a implantação criada na Tarefa 6.

    2. Na página de detalhes da Implantação, selecione Iniciar console.

    3. Faça log-in na console de implantação do Data Transforms.

  6. Criar Conexão do ADW:

    1. Abra o menu de navegação, selecione Conexões e, em seguida, Criar Conexão.

    2. Na página Selecionar Tipo, em Bancos de Dados, selecione Oracle e, em seguida, Próximo.

    3. Na página Detalhes da conexão, preencha os campos do formulário da seguinte forma e selecione Criar:

      1. Para Nome, digite ADW_IAD.

      2. Selecione Usar Arquivo de Credenciais.

      3. Para Arquivo de Wallet, faça upload do arquivo de wallet (ADW).

        Observação: Para fazer download do arquivo da wallet do ADW, selecione Conexão do Banco de Dados na página de detalhes do ADW.

      4. No menu suspenso Serviços, selecione <name>_low.

      5. Para Usuário, informe ADMIN.

      6. Para Senha, digite sua senha do ADW.

  7. Importar Entidade de Dados:

    1. Abra o menu de navegação, selecione Entidades de Dados e Importar Entidade de Dados.

    2. Para Conexão, selecione ADW_IAD na lista drop-down.

    3. Para Esquema, selecione SRCMIRROR_OCIGGLL na lista drop-down.

    4. Selecione Iniciar.

  8. Criar Projeto:

    1. Abra o menu de navegação e selecione Projetos.

    2. Na página Projetos, selecione Criar Projeto.

    3. Na caixa de diálogo Criar Projeto, para Nome, informe pipeline de demonstração e selecione Criar.

Tarefa 7: Criar e executar um workflow

  1. Criar Fluxo de Dados:

    Observação: Saiba mais sobre o Editor de Fluxo de Dados.

    1. Selecione o nome do seu projeto.

    2. Na página Detalhes do Projeto, em Recursos, selecione Fluxos de Dados e, em seguida, Criar Fluxo de Dados.

    3. Na caixa de diálogo Criar Fluxo de Dados, para Nome, informe Carregar TRG_CUSTOMER e, opcionalmente, uma descrição. Selecione Criar. A tela de design é aberta.

    4. Na caixa de diálogo Adicionar um Esquema, preencha os campos do formulário da seguinte forma e selecione OK:

      1. Para Conexão, selecione ADW_IAD na lista drop-down.

      2. Para Esquema, selecione SRCMIRROR_OCIGGLL na lista drop-down.

    5. Arraste as seguintes entidades de dados e componentes para a tela de design:

      1. No painel Entidades de Dados, expanda o esquema SRCMIRROR_OCIGGLL. Arraste a entidade de dados SRC_AGE_GROUP para a tela de design.

      2. No painel Entidades de Dados, expanda o esquema SRCMIRROR_OCIGGLL. Arraste a entidade de dados SRC_SALES_PERSON para a tela de design.

      3. Na barra de ferramentas Transformação de Dados, arraste o componente Pesquisa para a tela de design.

      4. Na barra de ferramentas Transformação de Dados, arraste o componente Participar para a tela de design.

      5. No painel Entidades de Dados, em SRCMIRROR_OCIGGLL, arraste a entidade de dados SRC_CUSTOMER para a tela de design.

    6. Conecte as seguintes entidades de dados ao componente Lookup:

      1. Selecione no ícone do Conector SRC_AGE_GROUP e arraste o ícone para o componente Pesquisa.

      2. Selecione no ícone do Conector SRC_CUSTOMER e arraste o ícone para o componente Pesquisa.

    7. Na tela de design, selecione Pesquisa para abrir o painel Pesquisa. No painel Pesquisa, alterne para a guia Atributos e cole a seguinte consulta em Condição de Pesquisa:

      SRC_CUSTOMER.AGE between SRC_AGE_GROUP.AGE_MIN and SRC_AGE_GROUP.AGE_MAX
    8. Conecte os seguintes componentes ao componente Juntar:

      1. Selecione no ícone do Conector SRC_SALES_PERSON e arraste o ícone para o componente Unir.

      2. Selecione no ícone do Conector de Pesquisa e arraste o ícone para o componente de Associação.

    9. Na tela de design, selecione Associar para abrir o painel Associar. No painel Associar, alterne para a guia Atributos e cole a seguinte consulta em Condição de Junção:

      SRC_CUSTOMER.SALES_PERS_ID=SRC_SALES_PERSON.SALES_PERS_ID
    10. Arraste a seguinte entidade de dados e componente para a tela de design:

      1. No painel Entidades de Dados, em SRCMIRROR_OCIGGLL, arraste a entidade de dados TRG_CUSTOMER para a tela de design.

      2. Selecione no ícone do Conector de Junção e arraste o ícone para a entidade de dados TRG_CUSTOMER.

      3. Na tela de design, selecione TRG_CUSTOMER e expanda a entidade de dados.

    11. Na guia Atributos, ative a Chave para CUST_ID, desative Atualizar para CRE_DATE e desative Inserir para UPD_DATE.

    12. Na guia Mapeamento de Colunas, certifique-se de que o Nome corresponda à Expressão:

      1. ID_CLIENTE

        SRC_CUSTOMER.CUSTID
      2. DEAR

        CASE WHEN SRC_CUSTOMER.DEAR = 0 THEN 'Mr' WHEN SRC_CUSTOMER.DEAR = 1 THEN 'Mrs' ELSE 'Ms' END
      3. NOME_CLIENTE

        SRC_CUSTOMER.FIRST_NAME \|\| ' ' \|\| UPPER(SRC_CUSTOMER.LAST_NAME)
      4. VENDAS_PERS

        SRC_SALES_PERSON.FIRST_NAME \|\| ' ' \|\|UPPER(SRC_SALES_PERSON.LAST_NAME)
      5. CRE_DATA

        SYSDATE
      6. ATUALIZAR_DATA

        SYSDATE
      7. Usar outros mapeamentos no estado em que se encontram.

    13. Na guia Opções, para Modo, selecione Atualização Incremental no menu suspenso.

    14. Recolher TRG_CUSTOMER.

    15. Selecione Salvar Fluxo de Dados.

  2. Criar Workflow:

    1. Selecione o nome do seu projeto, selecione Workflows e, em seguida, Criar Workflow.

    2. Para o nome, informe Orquestrar Carga do Data Warehouse. Selecione Criar.

    3. Arraste o ícone SQL na tela de design.

    4. Selecione duas vezes a etapa SQL no editor para abrir a página de propriedades da etapa.

    5. Na guia Geral, para nome, informe Limpeza de Dados.

    6. Selecione a guia Atributos para Conexão e selecione ADW_IAD na lista drop-down.

    7. Para SQL, copie a seguinte consulta:

      delete from SRCMIRROR_OCIGGLL.TRG_CUSTOMER where CITY_ID > 110
    8. Recolher SQL.

    9. Em Fluxos de Dados, arraste o Fluxo de Dados TRG_CUSTOMER para a tela de design.

    10. Selecione na linha do workflow SQL Limpeza de Dados e arraste o ícone ok (seta verde) para o Fluxo de Dados TRG_CUSTOMER.

    11. Selecione Salvar Workflow e Iniciar Workflow.

  3. Criar e Gerenciar Jobs.