Quando você migra dados de um banco de dados de origem Oracle, o Relational Migrator verifica automaticamente seu banco de dados em busca das alterações de configuração necessárias e gera um script SQL para implementá-las. Tenha um administrador do banco de dados (DBA) para revisar o roteiro e executar os comandos no servidor do banco de dados .
A configuração do Oracle depende do tipo de tarefa de migração:
As tarefas de migração de snapshots migram todos os dados uma vez e depois param.
As tarefas de migração contínua executam uma migração de snapshot e, em seguida, entram em um estágio de CDC, que replica continuamente as alterações de dados.
Para obter detalhes sobre as versões compatíveis do Oracle, consulte Bancos de dados e versões compatíveis.
Sobre esta tarefa
Se você estiver migrando de uma instância do Oracle 12c, deverá executar comandos como a role SYSDBA.
O Oracle 12c introduziu o conceito de um banco de dados conectável (PDB). Alguns comandos podem ser executados em um PDB, enquanto comandos como habilitar o
ARCHIVELOG
devem ser executados no contêiner/ banco de dados mestre (CDB). Para obter detalhes sobre cada arquitetura, consulte Visão geral de bancos de dados de contêineres e bancos de dados conectáveis.Alguns comandos diferem com base no fato de o banco de dados ser único ou multilocatário. Em um banco de dados multilocatário, as permissões devem incluir o sufixo
CONTAINER=ALL
. Para verificar se o banco de dados é multilocatário ou não, execute a seguinte query SQL:SELECT cdb AS is_multitenant FROM v$database; Você não pode executar um tarefa de migração contínua no Oracle Database Express Edition (XE), porque o XE não suporta os logs necessários.
Passos
Configurar permissões de usuário
O código a seguir cria uma nova conta de serviço do Oracle para o Relational Migrator se conectar à instância do Oracle. Como alternativa, você pode usar uma conta de serviço Oracle existente para se conectar ao Relational Migrator com as permissões apropriadas.
Dica
Para migrar dados de um banco de dados de contêiner multilocatário, crie espaços de tabela e um Usuário Comum.
Criar uma conta de serviço:
CREATE USER <user> IDENTIFIED BY "<password>"; Confirme que a conta de serviço possui as tabelas no tarefa de migração.
As permissões necessárias dependem se a conta de serviço possui as tabelas usadas no tarefa de migração. Para verificar a propriedade da tabela, execute a seguinte query:
SELECT TABLE_NAME, OWNER FROM ALL_TABLES WHERE TABLE_NAME ='<table_name>' ORDER BY OWNER, TABLE_NAME; Conceda permissões à conta de serviço.
Importante
Se você estiver migrando um banco de dados de container multilocatário como um usuário comum, acrescente
CONTAINER=ALL
ao conceder permissões. Por exemplo:GRANT CREATE SESSION TO <user> CONTAINER=ALL; Se a conta de serviço for o proprietário da tabela:
GRANT CREATE SESSION TO <user>; GRANT SELECT ON V_$DATABASE TO <user>; Se a conta de serviço não for a proprietário da tabela:
GRANT CREATE SESSION TO <user>; GRANT SELECT_CATALOG_ROLE TO <user>; GRANT SELECT ANY TABLE TO <user>; GRANT SELECT ON V_$DATABASE TO <user>; GRANT FLASHBACK ANY TABLE TO <user>;
Configurar permissões de usuário
O código a seguir cria uma nova conta de serviço do Oracle para o Relational Migrator se conectar à instância do Oracle. Como alternativa, você pode usar uma conta de serviço Oracle existente para se conectar ao Relational Migrator com as permissões apropriadas.
Dica
Para migrar dados de um banco de dados de contêiner multilocatário, crie espaços de tabela e um Usuário Comum.
Criar uma conta de serviço:
CREATE USER <user> IDENTIFIED BY "<password>"; Confirme que a conta de serviço possui as tabelas no tarefa de migração.
As permissões necessárias dependem se a conta de serviço possui as tabelas usadas no tarefa de migração. Para verificar a propriedade da tabela, execute a seguinte query:
SELECT TABLE_NAME, OWNER FROM ALL_TABLES WHERE TABLE_NAME ='<table_name>' ORDER BY OWNER, TABLE_NAME; Conceda permissões à conta de serviço.
Importante
Se você estiver migrando um banco de dados de container multilocatário como um usuário comum, acrescente
CONTAINER=ALL
ao conceder permissões. Por exemplo:GRANT CREATE SESSION TO <user> CONTAINER=ALL; Se a conta de serviço for o proprietário da tabela:
GRANT CREATE SESSION TO <user>; GRANT SELECT ON V_$DATABASE TO <user>; Se a conta de serviço não for a proprietário da tabela:
GRANT CREATE SESSION TO <user>; GRANT SELECT_CATALOG_ROLE TO <user>; GRANT SELECT ANY TABLE TO <user>; GRANT SELECT ON V_$DATABASE TO <user>; GRANT FLASHBACK ANY TABLE TO <user>;
Conceda permissões adicionais à conta de serviço para executar trabalhos de migração contínuos.
Anexe
CONTAINER=ALL
se estiver migrando um banco de dados container multilocatário.GRANT SET CONTAINER TO <user>; GRANT EXECUTE_CATALOG_ROLE TO <user>; GRANT SELECT ANY TRANSACTION TO <user>; GRANT LOGMINING TO <user>; GRANT CREATE TABLE TO <user>; GRANT LOCK ANY TABLE TO <user>; GRANT CREATE SEQUENCE TO <user>; GRANT SELECT ON DBA_TABLESPACES TO <user>; GRANT EXECUTE ON DBMS_LOGMNR TO <user>; GRANT EXECUTE ON DBMS_LOGMNR_D TO <user>; GRANT SELECT ON V_$LOG TO <user>; GRANT SELECT ON V_$LOG_HISTORY TO <user>; GRANT SELECT ON V_$LOGMNR_LOGS TO <user>; GRANT SELECT ON V_$LOGMNR_CONTENTS TO <user>; GRANT SELECT ON V_$LOGMNR_PARAMETERS TO <user>; GRANT SELECT ON V_$LOGFILE TO <user>; GRANT SELECT ON V_$ARCHIVED_LOG TO <user>; GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO <user>; GRANT SELECT ON V_$TRANSACTION TO <user>; GRANT SELECT ON V_$MYSTAT TO <user>; GRANT SELECT ON V_$STATNAME TO <user>;
Ativar registro de arquivamento
Para verificar se o registro de arquivo já está ativado, execute a seguinte query:
SELECT LOG_MODE FROM V$DATABASE; Isso produz
ARCHIVELOG
se o registro estiver habilitado ouNOARCHIVELOG
se não estiver.Se o registro de arquivo ainda não estiver habilitado, habilite-o.
O Relational Migrator pode gerar automaticamente código para habilitar o registro. O seguinte código é um exemplo. Se você estiver migrando um banco de dados de vários inquilinos, execute estes comandos no contêiner/ banco de dados mestre.
ALTER SYSTEM SET db_recovery_file_dest_size = 10G; ALTER SYSTEM SET db_recovery_file_dest = '/opt/oracle/oradata/recovery_area' scope=spfile; SHUTDOWN IMMEDIATE; STARTUP MOUNT ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;
Criar espaços de tabela
Crie os espaços de tabela necessários:
CONNECT sys/oraclepw@PDB_NAME as sysdba; CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/CDB_NAME/PDB_NAME/logminer_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED CONNECT sys/password@CDB_NAME as sysdba; CREATE TABLESPACE logminer_tbs DATAFILE '/opt/oracle/oradata/CDB_NAME/logminer_tbs.dbf' SIZE 25M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED; Uma migração contínua em uma arquitetura de vários inquilinos requer um espaço de tabela em cada banco de dados conectável e no banco de dados de contêiner.
Atribuir cota para os espaços de tabela ao usuário do serviço:
ALTER USER <user> DEFAULT TABLESPACE LOGMINER_TBS QUOTA UNLIMITED ON LOGMINER_TBS CONTAINER=ALL;
Importante
Este procedimento se aplica a instâncias do Oracle hospedadas no Amazon RDS.
Configurar permissões de usuário
O código a seguir cria uma nova conta de serviço do Oracle para o Relational Migrator se conectar à instância do Oracle. Como alternativa, você pode usar uma conta de serviço Oracle existente para se conectar ao Relational Migrator com as permissões apropriadas.
Dica
Para migrar dados de um banco de dados de contêiner multilocatário, crie espaços de tabela e um Usuário Comum.
Criar uma conta de serviço:
CREATE USER <user> IDENTIFIED BY "<password>"; Confirme que a conta de serviço possui as tabelas no tarefa de migração.
As permissões necessárias dependem se a conta de serviço possui as tabelas usadas no tarefa de migração. Para verificar a propriedade da tabela, execute a seguinte query:
SELECT TABLE_NAME, OWNER FROM ALL_TABLES WHERE TABLE_NAME ='<table_name>' ORDER BY OWNER, TABLE_NAME; Conceda permissões à conta de serviço.
Importante
Se você estiver migrando um banco de dados de container multilocatário como um usuário comum, acrescente
CONTAINER=ALL
ao conceder permissões. Por exemplo:GRANT CREATE SESSION TO <user> CONTAINER=ALL; Se a conta de serviço for o proprietário da tabela:
GRANT CREATE SESSION TO <user>; GRANT SELECT ON V_$DATABASE TO <user>; Se a conta de serviço não for a proprietário da tabela:
GRANT CREATE SESSION TO <user>; GRANT SELECT_CATALOG_ROLE TO <user>; GRANT SELECT ANY TABLE TO <user>; GRANT SELECT ON V_$DATABASE TO <user>; GRANT FLASHBACK ANY TABLE TO <user>;
Conceda permissões adicionais à conta de serviço para executar trabalhos de migração contínuos.
Anexe
CONTAINER=ALL
se estiver migrando um banco de dados container multilocatário.GRANT FLASHBACK ANY TABLE TO <user>; GRANT EXECUTE_CATALOG_ROLE TO <user>; GRANT SELECT ANY TRANSACTION TO <user>; GRANT LOGMINING TO <user>; GRANT CREATE TABLE TO <user>; GRANT LOCK ANY TABLE TO <user>; GRANT CREATE SEQUENCE TO <user>; CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE', '<user>', 'SELECT'); CALL rdsadmin.rdsadmin_util.grant_sys_object('DBA_LOG_GROUPS', '<user>', 'SELECT'); CALL rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR', '<user>', 'EXECUTE'); CALL rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR_D', '<user>', 'EXECUTE'); CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG', '<user>', 'SELECT'); CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG_HISTORY', '<user>', 'SELECT'); CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS', '<user>', 'SELECT'); CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS', '<user>', 'SELECT'); CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_PARAMETERS', '<user>', 'SELECT'); CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE', '<user>', 'SELECT'); CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG', '<user>', 'SELECT'); CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVE_DEST_STATUS', '<user>', 'SELECT'); CALL rdsadmin.rdsadmin_util.grant_sys_object('V_$TRANSACTION', '<user>', 'SELECT'); Se uma instância RDS for de vários inquilinos, uma permissão adicional será necessária para os espaços de tabela:
CALL rdsadmin.rdsadmin_util.grant_sys_object('DBA_TABLESPACES', '<user>', 'SELECT');
Ativar registro de arquivamento
Para verificar se o registro de arquivo já está ativado, execute a seguinte query:
SELECT LOG_MODE FROM V$DATABASE; Isso produz
ARCHIVELOG
se o registro estiver habilitado ouNOARCHIVELOG
se não estiver.Se o registro de arquivo ainda não estiver habilitado, habilite-o.
O Relational Migrator pode gerar automaticamente código para habilitar o registro. O seguinte código é um exemplo. Se você estiver migrando um banco de dados de vários inquilinos, execute estes comandos no contêiner/ banco de dados mestre.
CALL rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours', 24);
Habilitar registro complementar
Habilitar registro complementar no banco de dados:
CALL rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD'); Ative o registro complementar para cada tabela na migração:
ALTER TABLE schemaName.tableName ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; /* Additional ALTER TABLE STATEMENTS... */
Criar espaços de tabela
Crie os espaços de tabela necessários:
CREATE TABLESPACE logminer_tbs; CALL rdsadmin.rdsadmin_util.alter_default_tablespace(tablespace_name => 'logminer_tbs');
Uma migração contínua em uma arquitetura de vários inquilinos requer um espaço de tabela em cada banco de dados conectável e no banco de dados de contêiner. Atribua ao usuário do serviço uma cota nesses espaços de tabela.
Saiba mais
O Relational Migrator depende do conector Debezium de código aberto para capturar alterações no nível da linha. Para obter mais detalhes, consulte Debezium Oracle
Para obter detalhes sobre como ativar o registro de arquivo, consulte Gerenciamento de registros de Redo arquivados.
Para obter informações adicionais sobre solução de problemas e depuração, consulte o blog post de ajuda do Debezium Oracle.