Configurar o Oracle para ingestão no Databricks
Beta
Este recurso está em Beta. Os administradores do workspace podem controlar o acesso a esse recurso na página Pré-visualizações . Consulte Gerenciar prévias do Databricks.
Esta página descreve as tarefas de banco de dados de origem necessárias para a ingestão do Oracle no Databricks Lakeflow Connect.
O conector Oracle usa o LogMiner no modo de transação não confirmada para ler alterações de redo logs online e logs de arquivo.
Requisitos
- Versão do Oracle 12c ou acima (12c, 18c, 19c, 21c, 23ai e 26ai).
- Modo de log de arquivo habilitado.
- Log suplementar habilitado para as tabelas que você deseja replicar. O log suplementar de key primária é o mínimo; o log suplementar completo é necessário para tabelas que recebem instruções
UPDATEem colunas de key primária ou key exclusiva. O log suplementar mínimo por si só não é suficiente. Consulte Qual método de log suplementar devo escolher?. - Um banco de dados primário (não em espera). Oracle RAC e dados criptografados com Transparent Data Encryption (TDE) com uma carteira fechada não são suportados.
- Para bancos de dados multi-tenant, um usuário comum em
CDB$ROOTcom os privilégios necessários.
Visão geral da configuração da fonte
Conclua as seguintes tarefas no Oracle antes de ingerir dados no Databricks. Faça a execução de cada passo como o usuário SYSDBA, ou como o usuário ADMIN para bancos de dados Amazon RDS.
[[ ## completed ##]]
- Verificar o modo de log de arquivo e a retenção de log.
- Ativar registros suplementares.
- Criar um usuário de replicação usando o script de configuração.
- Observe os detalhes da conexão, incluindo o nome do serviço e o domínio do banco de dados.
O passo 1: Verificar o modo de Logs de arquivo e a retenção de Logs [[ ## completed ##]]
O conector CDC integrado do Oracle lê logs de arquivo. A seguinte query deve retornar ARCHIVELOG:
SELECT LOG_MODE FROM V$DATABASE;
Se a query retornar NOARCHIVELOG, habilite o modo de log de arquivo antes de continuar.
os passos para habilitar Logs de arquivo
- Non-RDS database
- Amazon RDS database
Para bancos de dados Oracle padrão:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
Para Oracle no AWS RDS, habilite backups automáticos.
Garantir a retenção de Logs de arquivo
A Databricks recomenda reter logs de arquivo por pelo menos 48 horas. Se o Oracle limpar os logs de arquivo antes que o pipeline possa processá-los, você deve realizar um refresh completo nas tabelas afetadas. Planeje sua capacidade de disco adequadamente para armazenar os arquivos de log de arquivo retidos.
- Non-RDS database
- Amazon RDS database
Faça a execução do seguinte no Recovery Manager (RMAN). [[ ## completed ##]]
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS;
Para Oracle no AWS RDS, consulte a documentação da AWS.
BEGIN
rdsadmin.rdsadmin_util.set_configuration(
name => 'archivelog retention hours',
value => '48');
END;
o passo 2: Ativar o log suplementar
O conector requer pelo menos registro suplementar de key primária em cada tabela que você replicar. Registro suplementar completo é necessário para tabelas que recebem instruções UPDATE em colunas de key primária ou key exclusiva. Para obter detalhes, consulte Qual método de registro suplementar devo escolher?.
Você pode habilitar o log suplementar em cada tabela ou no nível do banco de dados para que todas as tabelas o herdem. Os comandos diferem dependendo se a execução do seu banco de dados ocorre no Amazon RDS.
Para habilitar o registro suplementar de key primária no nível da tabela: [[ ## completed ##]]
ALTER TABLE <schema>.<table> ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
Para habilitar o log suplementar completo no nível da tabela:
ALTER TABLE <schema>.<table> ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
Para habilitar o log suplementar de key primária no nível do banco de dados (opcional; cada tabela o herda):
- Non-RDS database
- Amazon RDS database
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
BEGIN
rdsadmin.rdsadmin_util.alter_supplemental_logging(
p_action => 'ADD',
p_type => 'PRIMARY KEY'
);
END;
Consulte a documentação da AWS para obter mais detalhes.
O passo 3: Criar um usuário de replicação usando o script de configuração
O Databricks fornece uma ferramenta de configuração Oracle PL/SQL (dbx_oracle_setup_util) que automatiza a criação de usuários e a concessão de privilégios para CDC. O pacote expõe os seguintes procedimentos:
Procedimento | Descrição |
|---|---|
| Cria um usuário de replicação CDC com um tablespace default especificado, um tablespace temporário e cota ilimitada no tablespace default. |
| Concede os privilégios de sistema e de objeto necessários para o CDC do LogMiner. Consulte requisitos de usuário do banco de dados Oracle. |
| Concede |
| Concede |
| Valida o ambiente de banco de dados, a configuração de banco de dados necessária, o usuário de replicação e os privilégios necessários. |
| Remove um usuário de replicação criado anteriormente. Use isto para limpar ou recriar o usuário. |
Instalar a ferramenta de configuração
-
Faça o download da ferramenta de configuração: dbx-oracle-setup-pacote.sql. [[ ## completed ##]]
-
Faça a execução do script para criar o pacote PL/SQL
dbx_oracle_setup_util. Execute-o com privilégiosSYSDBA(ou como o usuárioADMINno Amazon RDS).Para um banco de dados multi-tenant, faça a execução do script no contêiner
CDB$ROOT.
Criar o usuário de replicação
Crie um usuário de replicação dedicado. O nome de usuário deve estar em maiúsculas. Para um banco de dados multi-tenant (CDB), o nome de usuário deve começar com C## para que um usuário comum seja criado. Para um banco de dados não CDB, não use o prefixo C##.
O exemplo a seguir cria um usuário denominado C##CDCREPL com tablespace default USERS e tablespace temporário TEMP:
BEGIN
DBX_ORACLE_SETUP_UTIL.CREATE_USER('C##CDCREPL', '<password>', 'USERS', 'TEMP');
END;
/
Não use o usuário SYS ou SYSTEM para replicação.
Conceder privilégios em nível de banco de dados
Conceda ao usuário de replicação os privilégios necessários para o CDC do LogMiner. A ferramenta escolhe automaticamente o método de concessão correto para o seu ambiente (concessões padrão ou concessões do Amazon RDS rdsadmin) e define CONTAINER_DATA=ALL para bancos de dados multi-tenant.
BEGIN
DBX_ORACLE_SETUP_UTIL.GRANT_PERMISSIONS('C##CDCREPL');
END;
/
Para a lista completa de privilégios que a ferramenta concede, consulte Requisitos de usuário do Oracle database.
Conceder privilégios SELECT em tabelas
Conceda ao usuário de replicação SELECT em todas as tabelas que você replicar. A ferramenta de configuração fornece dois procedimentos para isso:
BEGIN
-- to grant SELECT on all tables in a schema
DBX_ORACLE_SETUP_UTIL.GRANT_SELECT_PERMISSIONS('C##CDCREPL', '<schema_to_replicate>', '<container_name>');
-- to grant SELECT on specific tables in the schema
DBX_ORACLE_SETUP_UTIL.GRANT_SELECT_ON_TABLE('C##CDCREPL', '<schema_to_replicate>', '<table_name>', '<container_name>');
END;
/
Para um banco de dados não CDB, omita o argumento <container_name>.
Você também pode conceder SELECT manualmente em tabelas individuais:
GRANT SELECT ON <schema>.<table> TO C##CDCREPL;
A interface do usuário só pode mostrar tabelas nas quais o usuário de replicação tem a permissão SELECT.
O privilégio SELECT ANY TABLE do Oracle concede acesso de leitura a todas as tabelas no banco de dados em uma única instrução. Evite isso fora de um banco de dados de desenvolvimento, pois ele expõe tabelas que você talvez não queira que o usuário de replicação leia.
Validar a configuração
Valide o ambiente de banco de dados, a configuração de banco de dados necessária, o usuário de replicação e os privilégios necessários:
BEGIN
DBX_ORACLE_SETUP_UTIL.VALIDATE_SETUP('C##CDCREPL');
END;
/
o passo 4: anotar os detalhes da conexão
Ao criar a conexão do Unity Catalog, você precisará dos seguintes detalhes sobre seu banco de dados Oracle. Consulte Criar uma conexão Oracle.
Nome do serviço
O conector conecta-se ao Oracle usando um nome de serviço .
- Para uma base de dados single-tenant (não CDB) , use o nome do serviço da base de dados.
- Para um banco de dados multi-tenant (CDB) , use o nome de serviço
CDB$ROOT. O conector conecta-se aoCDB$ROOTpara ler alterações de todos os bancos de dados plugáveis (PDBs) e, em seguida, resolve os nomes de serviço PDB automaticamente. Consulte Bancos de dados multi-tenant (CDB).
Domínio do banco de dados
Se o seu banco de dados estiver com o parâmetro de inicialização DB_DOMAIN definido, o Oracle registrará cada serviço no listener usando um nome qualificado por domínio (por exemplo, FREEPDB1.example.com em vez de FREEPDB1). Isso é comum em ambientes gerenciados pelo Oracle Connection Manager (CMAN).
Quando DB_DOMAIN estiver definido, o nome do serviço CDB$ROOT que você fornecer na conexão do Unity Catalog deverá incluir o sufixo de domínio (por exemplo, newcorp.example.com). Para verificar o valor atual:
SELECT value FROM v$parameter WHERE name = 'db_domain';
O conector anexa automaticamente o DB_DOMAIN descoberto aos nomes de serviço PDB. Você só precisa fornecer o nome de serviço CDB$ROOT qualificado por domínio na conexão. Para obter detalhes, consulte Criar uma conexão Oracle.
Bancos de dados multi-tenant (CDB)
Para um banco de dados multi-tenant:
- Faça a execução do script no contêiner
CDB$ROOT. - O usuário de replicação deve ser um usuário comum (o prefixo
C##). - A ferramenta de configuração define
CONTAINER_DATA=ALLno usuário para que ele possa ler dados de alteração em todos os contêineres. - Na conexão do Unity Catalog, use o nome do serviço
CDB$ROOT(qualificado por domínio seDB_DOMAINestiver definido).
Instâncias multi-tenant do Amazon RDS para Oracle não são suportadas.
Diferenciação entre maiúsculas e minúsculas
Por default, a Oracle trata identificadores sem aspas como não diferenciam maiúsculas de minúsculas e os converte para maiúsculas. Se um identificador for delimitado entre aspas duplas durante a criação, o Oracle preserva o uso de maiúsculas e minúsculas.
Ao criar a conexão do Unity Catalog, use um nome de usuário em letras maiúsculas, a menos que o banco de dados o armazene em letras minúsculas. Ao especificar nomes de esquema, tabela e coluna em seu pipeline, o uso de maiúsculas e minúsculas deve corresponder à forma como o Oracle armazena o identificador.
Limitações do LogMiner
O LogMiner não oferece suporte aos seguintes tipos de dados e atributos de armazenamento. Se uma tabela contiver qualquer um destes, o LogMiner ignora a tabela inteira:
BFILE- Tabelas aninhadas e coleções
VARRAY - Objetos com tabelas aninhadas
- Tabelas com colunas de identidade
- Colunas de validade temporal
PKREFColunasPKOIDcolunas (colunas do tipo object)- Atributos de tabelas aninhadas e colunas de tabelas aninhadas autônomas
Além disso:
- Os nomes de tabela e coluna não podem exceder 30 caracteres.
- Tipos de dados e recursos adicionados após o Oracle Database 12c Release 2 (12.2) não são compatíveis. Isso inclui
BOOLEAN,VECTOReJSON.
Mapeamentos de tipos de dados
Para o mapeamento de tipos de dados Oracle para tipos Databricks, consulte referência do conector CDC integrado do Oracle.
Passos seguintes
- Revise os requisitos de privilégio.
- Criar uma conexão Oracle.