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:
Configurar o período de retenção para logs de repetição arquivados
Configurar o usuário de conexão do servidor de saída do XStream
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:
Para mais informações, consulte Retenção de logs de repetição arquivados. |
AWS RDS personalizado |
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:
Habilite a replicação do XStream:
ALTER SYSTEM SET enable_goldengate_replication=TRUE SCOPE=BOTH;
ALTER SYSTEM SET STREAMS_POOL_SIZE = 2560M;
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:
Confirme se o banco de dados está no modo ARCHIVELOG, conforme mostrado no exemplo a seguir:
SELECT LOG_MODE, FORCE_LOGGING FROM V$DATABASE;
O Snowflake recomenda forçar o registro no nível do banco de dados ou do espaço de tabela.
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;
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;
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;
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
Conecte como SYSDBA ou um usuário com privilégios apropriados.
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; /
Para Oracle Database 23c
Conecte como SYSDBA ou um usuário com privilégios apropriados.
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;
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;
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;
/
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;
/
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;
/
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;
/
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, criexstreamadminem vez dec##xstreamadmineconnectuserem vez dec##connectuser. O prefixoC##é necessário somente em ambientes multilocatários.Não inclua
CONTAINER=ALLnemcontainer => '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.