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

Oracle の移行前提条件の構成

Oracleソースデータベースからデータを移行すると、 Relational Migrator はデータベースで必要な構成変更を自動的にチェックし、それらを実装するためのSQLスクリプトを生成します。 データベース管理者(DBA)にスクリプトを確認し、データベースサーバー上で コマンドを実行させます。

Oracle の構成は移行ジョブの種類によって異なります。

  • スナップショット移行ジョブはすべてのデータを一度だけ移行し、その後停止します。

  • 継続的な移行ジョブはスナップショット移行を実行し、データ変更を継続的に複製する CDC ステージに入ります。

サポートされているバージョンの Oracle の詳細については、 サポートされているデータベースとバージョン を参照してください。

  • Oracle 12c インスタンスから移行する場合は、 SYSDBA ロールとして コマンドを実行する必要があります。

  • Oracle 12c はプラグ可能なデータベース(PDB)の概念を導入しました。 一部のコマンドは PDB で実行できますが、ARCHIVELOG を有効にするようなコマンドは、コンテナとマスターデータベース(CDB)で実行する必要があります。 各アーキテクチャの詳細については、「 コンテナ データベースとプラグ可能なデータベースの概要 」を参照してください。

  • 一部のコマンドは、データベースが単一テナントかマルチテナントかによって異なります。マルチテナントデータベースでは、権限にサフィックス CONTAINER=ALL が含まれている必要があります。データベースがマルチテナントであるかどうかを確認するには、次のSQLクエリを実行します。

    SELECT cdb AS is_multitenant FROM v$database;
  • Oracle Database Express Edition(XE)に対して継続的な移行ジョブを実行することはできません。XE は必要なログをサポートしていないためです。

1

次のコードでは、Oracle インスタンスに接続するための Relational Migrator 用の新しい Oracle サービス アカウントが作成されます。 あるいは、既存の Oracle サービス アカウントを使用して、適切な権限で Relational Migrator に接続することもできます。

Tip

  1. サービス アカウントを作成します。

    CREATE USER <user> IDENTIFIED BY "<password>";
  2. サービス アカウントが移行ジョブのテーブルを所有していることを確認します。

    必要な権限は、移行ジョブで使用されるテーブルをサービス アカウントが所有しているかどうかによって異なります。 テーブルの所有権を確認するには、次のクエリを実行します。

    SELECT TABLE_NAME, OWNER
    FROM ALL_TABLES
    WHERE TABLE_NAME ='<table_name>'
    ORDER BY OWNER, TABLE_NAME;
  3. サービス アカウントに権限を付与します。

    重要

    マルチテナントコンテナデータベースを一般的なユーザーとして移行する場合は、権限を付与するときに CONTAINER=ALL を追加します。 (例: )。

    GRANT CREATE SESSION TO <user> CONTAINER=ALL;

    サービス アカウントテーブル所有者の場合:

    GRANT CREATE SESSION TO <user>;
    GRANT SELECT ON V_$DATABASE TO <user>;

    サービス アカウントがテーブル所有者でない場合

    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

次のコードでは、Oracle インスタンスに接続するための Relational Migrator 用の新しい Oracle サービス アカウントが作成されます。 あるいは、既存の Oracle サービス アカウントを使用して、適切な権限で Relational Migrator に接続することもできます。

  1. サービス アカウントを作成します。

    CREATE USER <user> IDENTIFIED BY "<password>";
  2. サービス アカウントが移行ジョブのテーブルを所有していることを確認します。

    必要な権限は、移行ジョブで使用されるテーブルをサービス アカウントが所有しているかどうかによって異なります。 テーブルの所有権を確認するには、次のクエリを実行します。

    SELECT TABLE_NAME, OWNER
    FROM ALL_TABLES
    WHERE TABLE_NAME ='<table_name>'
    ORDER BY OWNER, TABLE_NAME;
  3. サービス アカウントに権限を付与します。

    重要

    マルチテナントコンテナデータベースを一般的なユーザーとして移行する場合は、権限を付与するときに CONTAINER=ALL を追加します。 (例: )。

    GRANT CREATE SESSION TO <user> CONTAINER=ALL;

    サービス アカウントテーブル所有者の場合:

    GRANT CREATE SESSION TO <user>;
    GRANT SELECT ON V_$DATABASE TO <user>;

    サービス アカウントがテーブル所有者でない場合

    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. 継続的な移行ジョブを実行するために、サービス アカウントに追加の権限を付与します。

    マルチテナントコンテナデータベースを移行する 場合は、CONTAINER=ALL を追加します。

    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. アーカイブ ログがすでに有効になっているかどうかを確認するには、次のクエリを実行します。

    SELECT LOG_MODE FROM V$DATABASE;

    この出力では、ログ記録が有効になっている場合は ARCHIVELOG が出力され、そうでない場合は NOARCHIVELOG が出力されます。

  2. アーカイブ ログがまだ有効になっていない場合は、有効にします。

    Relational Migrator は、ログを有効にするコードを自動的に生成できます。 次のコードは の例です。 マルチテナントデータベースを移行する場合は、コンテナまたは マスターデータベースでこれらのコマンドを実行します。

    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. データベースで追加ログを有効にします。

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
  2. 移行内のすべてのテーブルの追加ログを有効にします。

    ALTER TABLE schemaName.tableName ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
    /* Additional ALTER TABLE STATEMENTS... */
4
  1. 必要なテーブルスペースを作成します。

    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;

    マルチテナント アーキテクチャで継続的な移行には、各プラグ可能なデータベースとコンテナデータベースにテーブルスペースが必要です。

  2. サービスユーザーにテーブルスペースの割り当てを割り当てます。

    ALTER USER <user> DEFAULT TABLESPACE LOGMINER_TBS QUOTA UNLIMITED ON LOGMINER_TBS CONTAINER=ALL;

重要

この手順は、 Amazon RDS でホストされているOracleインスタンスに適用されます。

1

次のコードでは、Oracle インスタンスに接続するための Relational Migrator 用の新しい Oracle サービス アカウントが作成されます。 あるいは、既存の Oracle サービス アカウントを使用して、適切な権限で Relational Migrator に接続することもできます。

  1. サービス アカウントを作成します。

    CREATE USER <user> IDENTIFIED BY "<password>";
  2. サービス アカウントが移行ジョブのテーブルを所有していることを確認します。

    必要な権限は、移行ジョブで使用されるテーブルをサービス アカウントが所有しているかどうかによって異なります。 テーブルの所有権を確認するには、次のクエリを実行します。

    SELECT TABLE_NAME, OWNER
    FROM ALL_TABLES
    WHERE TABLE_NAME ='<table_name>'
    ORDER BY OWNER, TABLE_NAME;
  3. サービス アカウントに権限を付与します。

    重要

    マルチテナントコンテナデータベースを一般的なユーザーとして移行する場合は、権限を付与するときに CONTAINER=ALL を追加します。 (例: )。

    GRANT CREATE SESSION TO <user> CONTAINER=ALL;

    サービス アカウントテーブル所有者の場合:

    GRANT CREATE SESSION TO <user>;
    GRANT SELECT ON V_$DATABASE TO <user>;

    サービス アカウントがテーブル所有者でない場合

    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. 継続的な移行ジョブを実行するために、サービス アカウントに追加の権限を付与します。

    マルチテナントコンテナデータベースを移行する 場合は、CONTAINER=ALL を追加します。

    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');

    RDSインスタンスがマルチテナントの場合は、テーブル空間に対して追加の権限が必要です。

    CALL rdsadmin.rdsadmin_util.grant_sys_object('DBA_TABLESPACES', '<user>', 'SELECT');
2
  1. アーカイブ ログがすでに有効になっているかどうかを確認するには、次のクエリを実行します。

    SELECT LOG_MODE FROM V$DATABASE;

    この出力では、ログ記録が有効になっている場合は ARCHIVELOG が出力され、そうでない場合は NOARCHIVELOG が出力されます。

  2. アーカイブ ログがまだ有効になっていない場合は、有効にします。

    Relational Migrator は、ログを有効にするコードを自動的に生成できます。 次のコードは の例です。 マルチテナントデータベースを移行する場合は、コンテナまたは マスターデータベースでこれらのコマンドを実行します。

    CALL rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours', 24);
3
  1. データベースで追加ログを有効にします。

    CALL rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
  2. 移行内のすべてのテーブルの追加ログを有効にします。

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

必要なテーブルスペースを作成します。

CREATE TABLESPACE logminer_tbs;
CALL rdsadmin.rdsadmin_util.alter_default_tablespace(tablespace_name => 'logminer_tbs');

マルチテナント アーキテクチャで継続的な移行には、各プラグ可能なデータベースとコンテナデータベースにテーブルスペースが必要です。それらのテーブルスペースの割り当てをサービスユーザーに割り当てます。

戻る

Oracle

項目一覧