Openflow Connector for Oracle: configurar o banco de dados Oracle

Nota

O conector está sujeito aos Termos do conector Snowflake.

Nota

O Openflow Connector for Oracle também está sujeito a termos de serviço adicionais além dos termos de serviço padrão do conector. Para obter mais informações, consulte o Adendo do Openflow Connector para Oracle.

Este tópico descreve como configurar o banco de dados Oracle para o Openflow Connector for Oracle.

Nota

A configuração do seu banco de dados Oracle depende das políticas de segurança e da arquitetura de banco de dados da sua organização. Por exemplo, se as tabelas residem em um banco de dados de contêiner (Container Database, CDB), um banco de dados conectável (Pluggable Database, PDB), vários PDBs, ou uma combinação deles.

As etapas fornecidas neste tópico são apenas exemplos. Modifique-as conforme necessário para o seu ambiente.

Como administrador de banco de dados Oracle, execute os seguintes procedimentos em seu banco de dados de origem:

  1. Configurar o período de retenção para logs de repetição arquivados

  2. Habilitar XStream e registro em log complementar

  3. Criar a o usuário administrador do XStream

  4. Conceder privilégios de administrador do XStream

  5. Configurar o usuário de conexão ao servidor do XStream

  6. Criar servidor de saída do XStream

  7. Configurar o usuário de conexão do servidor de saída do XStream

  8. Configurar o usuário de captura do servidor de saída do XStream

Nota

As etapas neste tópico foram escritas para uma arquitetura multilocatário com um CDB e um ou mais PDBs. Caso seu banco de dados Oracle use uma arquitetura unilocatário, consulte Configurar o XStream para bancos de dados unilocatários.

Configurar o período de retenção para logs de repetição arquivados

Ative o modo ARCHIVELOG para garantir que os dados das alterações estejam disponíveis para replicação.

Se você usa o AWS RDS para Oracle, configure também o período de retenção para logs de redo arquivados. Determine esse período com base no volume de alterações no banco de dados de origem e na sua capacidade de armazenamento.

Para definir o período de retenção, por exemplo, para 24 horas, siga os procedimentos da tabela a seguir:

Versão do banco de dados

Procedimento

AWS RDS (padrão)

Execute o seguinte:

begin
    rdsadmin.rdsadmin_util.set_configuration(
        name  => 'archivelog retention hours',
        value => '24');
end;
/
commit;
Copy

Para mais informações, consulte Retenção de logs de repetição arquivados.

AWS RDS personalizado

  1. Crie um arquivo de texto com o nome /opt/aws/rdscustomagent/config/redo_logs_custom_configuration.json.

  2. Adicione um objeto JSON para esse arquivo no seguinte formato: {"archivedLogRetentionHours" : "24"}.

Para mais informações, consulte Restaurando um RDS personalizado para instância Oracle.

Habilitar XStream e registro em log complementar

Nota

O XStream está incluído no Oracle Database e não requer nenhum software adicional.

Para habilitar e configurar a replicação do XStream para capturar dados de alteração de fluxo, execute os seguintes comandos:

  1. Habilite a replicação do XStream:

ALTER SYSTEM SET enable_goldengate_replication=TRUE SCOPE=BOTH;

ALTER SYSTEM SET STREAMS_POOL_SIZE = 2560M;
Copy

Nota

O Snowflake recomenda definir o tamanho do pool de fluxos como 2,5 GB. Essa alocação abrange o seguinte:

  • 1 GB para captura

  • 1 GB para aplicação

  • Um buffer adicional de 25%

Para habilitar o registro complementar para garantir que os logs de repetição capturem as informações necessárias para replicação lógica, execute os seguintes comandos:

  1. Confirme se o banco de dados está no modo ARCHIVELOG, conforme mostrado no exemplo a seguir:

    SELECT LOG_MODE, FORCE_LOGGING FROM V$DATABASE;
    
    Copy

    O Snowflake recomenda forçar o registro no nível do banco de dados ou do espaço de tabela.

  2. Defina o contêiner como o contêiner raiz e adicione o registro complementar ao banco de dados:

    ALTER SESSION SET CONTAINER = CDB$ROOT;
    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    
    Copy

    Como alternativa, habilite o registro apenas em tabelas específicas, conforme mostrado no exemplo a seguir:

    ALTER TABLE schema_name.table_name ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    
    Copy

Criar a o usuário administrador do XStream

É necessário um administrador do XStream para gerenciar os componentes do XStream, incluindo a criação e a alteração dos servidores de saída. Você pode criar um usuário dedicado para essa finalidade ou usar um usuário existente, desde que os privilégios de administração do XStream necessários sejam concedidos (consulte a próxima seção).

O exemplo a seguir detalha a configuração de um usuário administrador do XStream dedicado no contêiner raiz de um CDB.

Nota

O exemplo a seguir pressupõe que o banco de dados também tem um PDB contendo tabelas a serem replicadas.

Conecte como SYSDBA ou um usuário com privilégios apropriados e execute os seguintes comandos:

-- Switch to the root container.
ALTER SESSION SET CONTAINER = CDB$ROOT;

--  Create a tablespace for the XStream administrator user.
CREATE TABLESPACE xstream_adm_tbs DATAFILE '/path/to/your/cdb/xstream_adm_tbs.dbf'
   SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

-- Switch to the Pluggable Database (PDB) and create a tablespace there.
ALTER SESSION SET CONTAINER = YOUR_PDB_NAME;

CREATE TABLESPACE xstream_adm_tbs DATAFILE '/path/to/your/pdb/xstream_adm_tbs.dbf'
   SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

-- Switch back to the root container to create the common user.
ALTER SESSION SET CONTAINER = CDB$ROOT;

-- Create the XStream administrator user.
-- Note  'c##' prefix indicates a common user in a CDB environment, and CONTAINER=ALL grants privileges across all containers.
-- Replace "YOUR_XSTREAM_ADMIN_PASSWORD" with a strong, secure password.

CREATE USER c##xstreamadmin IDENTIFIED BY "YOUR_XSTREAM_ADMIN_PASSWORD"
   DEFAULT TABLESPACE xstream_adm_tbs
   QUOTA UNLIMITED ON xstream_adm_tbs
   CONTAINER=ALL;
Copy

Conceder privilégios de administrador do XStream

Conceda os privilégios necessários ao usuário administrador do XStream com base na sua versão do banco de dados Oracle.

  • Para Oracle Database 19c e 21c

    1. Conecte como SYSDBA ou um usuário com privilégios apropriados.

    2. Conceda os privilégios de sistema necessários ao administrador do XStream executando o seguinte comando:

      GRANT CREATE SESSION, SET CONTAINER, EXECUTE ANY PROCEDURE, LOGMINING TO c##xstreamadmin CONTAINER=ALL;
      
      -- Grant XStream administration privileges using DBMS_XSTREAM_AUTH.
      -- This procedure grants the necessary permissions to manage XStream capture processes across all containers.
      
      BEGIN
        DBMS_XSTREAM_AUTH.GRANT_ADMIN_PRIVILEGE(
          grantee                 => 'c##xstreamadmin',
          privilege_type          => 'CAPTURE',
          grant_select_privileges => TRUE,
          container               => 'ALL');
      END;
      /
      
      Copy
  • Para Oracle Database 23c

    1. Conecte como SYSDBA ou um usuário com privilégios apropriados.

    2. Conceda os privilégios de sistema e as funções do XStream necessários para o Oracle Database 23c executando o seguinte comando:

      GRANT CREATE SESSION, SET CONTAINER, EXECUTE ANY PROCEDURE, LOGMINING, XSTREAM_CAPTURE
        TO c##xstreamadmin CONTAINER=ALL;
      
      Copy

Configurar o usuário de conexão ao servidor do XStream

O Conector Snowflake Openflow utiliza um usuário de conexão dedicado para estabelecer uma conexão com o servidor de saída do XStream e receber dados de alterações. Esse usuário requer privilégios específicos para facilitar a replicação:

  • Lido do servidor de saída do XStream: o usuário deve ser capaz de acessar o fluxo de dados de alteração do servidor de saída do XStream configurado.

  • Selecione nas exibições de dicionário de dados: o usuário de conexão precisa do acesso SELECT a várias exibições de dicionário de dados. Isto pode ser alcançado através da concessão de SELECT_CATALOG_ROLE ou SELECT ANY DICTIONARY. Se a política da empresa não permitir a concessão de SELECT ANY DICTIONARY, o usuário precisa especificamente de acesso SELECT às seguintes visualizações:

    • ALL_USERS

    • ALL_TABLES

    • ALL_TAB_COLS

    • ALL_CONS_COLUMNS

    • ALL_CONSTRAINTS

    • V$DATABASE

  • Selecionar nas tabelas de origem: O usuário deve ter privilégios SELECT em todas as tabelas destinadas à replicação.

A seguir está um exemplo de como configurar esse usuário no contêiner raiz do CDB. O exemplo pressupõe que o banco de dados também tem um PDB contendo tabelas a serem replicadas.

-- Connect as SYSDBA or a user with appropriate privileges
-- Switch to the root container.

ALTER SESSION SET CONTAINER = CDB$ROOT;

-- Create the connect user.
-- Replace "YOUR_CAPTURE_USER_PASSWORD" with a strong, secure password.
CREATE USER c##connectuser IDENTIFIED BY "YOUR_CAPTURE_USER_PASSWORD"
    CONTAINER=ALL;

-- Grant necessary privileges to the connect user.
-- You can choose to grant access to specific tables
-- instead of SELECT ANY TABLE for more granular control,
-- for example, GRANT SELECT ON schema.table TO c##connectuser;
GRANT CREATE SESSION, SELECT_CATALOG_ROLE TO c##connectuser CONTAINER=ALL;
GRANT SELECT ANY TABLE TO c##connectuser CONTAINER=ALL;
GRANT LOCK ANY TABLE TO c##connectuser CONTAINER=ALL;
Copy

Criar servidor de saída do XStream

O servidor de saída XStream captura as alterações de logs de repetição para consumo pelo conector Openflow. Defina quais esquemas ou tabelas devem ser replicados. Para obter mais informações, consulte DBMS_XSTREAM_ADMCREATE_OUTBOUND. Documentação.

Considerações importantes para o escopo da replicação:

  • Se uma tabela estiver incluída no comando de regras de filtragem de saída do XStream, ela não será replicada.

  • Uma tabela ou esquema incluído aqui também deve ser definido nos parâmetros do conector para que seja replicado. Também é possível incluir um esquema inteiro nas regras de filtragem do servidor e mais tarde, nos parâmetros do conector, especificar apenas determinadas tabelas dentro desse esquema para replicação.

Nota

O servidor de saída do XStream só pode ser criado a partir do contêiner raiz. No entanto, a partir da versão Oracle Database 23ai, ele também pode ser criado no nível do PDB.

Apresentamos a seguir três exemplos de como configurar o servidor de saída do XStream com base em diferentes necessidades de replicação. Na prática, ao configurar seu servidor de saída do XStream no ambiente de produção, é recomendável ser seletivo sobre quais alterações captura. Capturar tudo pode ter graves consequências para o desempenho e o uso de recursos do seu banco de dados. Para evitar um impacto significativo em sua CPU e rede, e para evitar que suas filas fiquem cheias de dados irrelevantes, é essencial usar uma abordagem granular. A melhor maneira de fazer isso é com o procedimento DBMS_XSTREAM_ADM.ADD_TABLE_RULES, que permite especificar apenas as tabelas necessárias.

Consulte mais informações sobre como configurar o servidor de saída do XStream na documentação da Oracle: Configuração do XStream.

Exemplo 1: capturar todas as tabelas de todos os esquemas no contêiner raiz e todos os PDBs

-- Connect as a user with XStream admin privileges to the root container.
-- Ensure serveroutput is enabled to see messages from the PL/SQL block.
SET SERVEROUTPUT ON;

DECLARE
    tables  DBMS_UTILITY.UNCL_ARRAY;
    schemas DBMS_UTILITY.UNCL_ARRAY;
BEGIN
   -- To replicate all tables in all schemas across all containers, set both to NULL.
   tables(1) := NULL;
   schemas(1) := NULL;
   DBMS_XSTREAM_ADM.CREATE_OUTBOUND(
       server_name => 'XOUT1',
       table_names => tables,
       schema_names => schemas,
       include_ddl => TRUE
   );
   DBMS_OUTPUT.PUT_LINE('XStream Outbound Server created.');
   EXCEPTION
   WHEN OTHERS THEN
       DBMS_OUTPUT.PUT_LINE('Error creating XStream Outbound Server: ' || SQLERRM);
       RAISE;
END;
/
Copy

Exemplo 2: capturar todas as tabelas de um único esquema em um PDB

-- Connect as a user with XStream admin privileges to the root container.
-- Ensure serveroutput is enabled to see messages from the PL/SQL block.
SET SERVEROUTPUT ON;

DECLARE
    tables  DBMS_UTILITY.UNCL_ARRAY;
    schemas DBMS_UTILITY.UNCL_ARRAY;
BEGIN
    -- To replicate all tables in a schemas in the single PDB, set source_container_name.
    tables(1) := NULL;
    schemas(1) := 'schema_name';
    DBMS_XSTREAM_ADM.CREATE_OUTBOUND(
        server_name => 'XOUT1',
        table_names => tables,
        schema_names => schemas,
        include_ddl => TRUE,
        source_container_name => 'YOUR_PDB_NAME'
    );
    DBMS_OUTPUT.PUT_LINE('XStream Outbound Server created.');
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error creating XStream Outbound Server: ' || SQLERRM);
      RAISE;
END;
/
Copy

Configurar o usuário de conexão do servidor de saída do XStream

Defina o usuário de conexão no servidor de saída do XStream. Isso garante que o usuário conectado criado anteriormente esteja associado ao servidor de saída do XStream (XOUT1), permitindo que receba dados de alteração.

Nota

O exemplo a seguir assume que o usuário de conexão é c##connectuser.

BEGIN
    DBMS_XSTREAM_ADM.ALTER_OUTBOUND(
        server_name  => 'XOUT1',
        connect_user => 'c##connectuser');
   END;
/
Copy

Configurar o usuário de captura do servidor de saída do XStream

Se você configurou um usuário de captura separado, configure o servidor de saída do XStream para usá-lo. Isso garante que o usuário de captura dedicado esteja associado ao servidor de saída do XStream (XOUT1), permitindo que ele capture dados de alteração.

Se quiser que os dados sejam capturados pelo mesmo usuário que criou o servidor (o administrador), pule esta etapa.

BEGIN
    DBMS_XSTREAM_ADM.ALTER_OUTBOUND(
        server_name  => 'XOUT1',
      capture_user => 'yourcaptureuser');
END;
/
Copy

Configurar o XStream para bancos de dados unilocatários

A arquitetura padrão para Oracle 12c e posterior é uma arquitetura multilocatária com um banco de dados de contêiner (CDB) e um ou mais bancos de dados conectáveis (PDB).

Se seu banco de dados Oracle usa uma arquitetura unilocatária, observe as seguintes diferenças na configuração do XStream:

  • Não use comandos ALTER SESSION SET CONTAINER. Em um banco de dados unilocatário, há apenas uma instância, portanto, a troca de contêiner não se aplica.

  • Crie apenas um espaço de tabela xstream_adm_tbs. Não crie um segundo espaço de tabela em um PDB.

  • Não use o prefixo C## em nomes de usuários. Por exemplo, crie xstreamadmin em vez de c##xstreamadmin e connectuser em vez de c##connectuser. O prefixo C## é necessário somente em ambientes multilocatários.

  • Não inclua CONTAINER=ALL nem container => 'ALL' em qualquer comando. Essas cláusulas concedem privilégios em vários contêineres e não se aplicam em um banco de dados unilocatário.

Próximos passos

Configure o conector.