Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/
Relational Migrator
/ /

Configurar pré-requisitos de migração para Oracle

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.

  • 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.

1

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.

  1. Criar uma conta de serviço:

    CREATE USER <user> IDENTIFIED BY "<password>";
  2. 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;
  3. 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>;
1

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.

  1. Criar uma conta de serviço:

    CREATE USER <user> IDENTIFIED BY "<password>";
  2. 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;
  3. 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>;
  1. 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>;
2
  1. 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 ou NOARCHIVELOG se não estiver.

  2. 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;
3
  1. Habilitar registro complementar no banco de dados:

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
  2. Ative o registro complementar para cada tabela na migração:

    ALTER TABLE schemaName.tableName ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    /* Additional ALTER TABLE STATEMENTS... */
4
  1. 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.

  2. 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.

1

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.

  1. Criar uma conta de serviço:

    CREATE USER <user> IDENTIFIED BY "<password>";
  2. 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;
  3. 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>;
  1. 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');
2
  1. 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 ou NOARCHIVELOG se não estiver.

  2. 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);
3
  1. Habilitar registro complementar no banco de dados:

    CALL rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
  2. Ative o registro complementar para cada tabela na migração:

    ALTER TABLE schemaName.tableName ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    /* Additional ALTER TABLE STATEMENTS... */
4

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.

Voltar

Oráculo

Nesta página