Docs Menu
Docs Home
/
Relational Migrator
/ /

Oracle の移行前提条件の構成

項目一覧

  • このタスクについて
  • 手順
  • 詳細

Oracle ソース データベースから同期ジョブを実行するには、データベースの構成変更が必要になる場合があります。 Relational Migrator でデータベースの構成変更が必要と判断された場合は、必要な変更を伴う SQL スクリプトが自動的に生成されます。 データベース管理者(DBA)にこのスクリプト内のコマンドを確認し、データベース サーバー上で実行することをお勧めします。 Oracle の構成は 同期ジョブ の種類によって異なります。

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

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

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

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

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

  • Oracle Express エディションでは、追加のログは許可されていません。

1

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

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

    CREATE USER '<user>'@'localhost' IDENTIFIED BY '<password>';
  2. サービス アカウントに選択した権限を付与します。

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

    SELECT TABLE_NAME, OWNER
    FROM ALL_TABLES
    WHERE TABLE_NAME ='<table_name>'
    ORDER BY OWNER, TABLE_NAME;

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

    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>'@'localhost' IDENTIFIED BY '<password>';
  2. サービス アカウントに選択した権限を付与します。

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

    SELECT TABLE_NAME, OWNER
    FROM ALL_TABLES
    WHERE TABLE_NAME ='<table_name>'
    ORDER BY OWNER, TABLE_NAME;

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

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

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

Oracle に対して継続的なジョブを実行するには、データベース レベルでLogMinerを有効にする必要があります。 次のコード ブロックは自動生成コードの例です。このコードは、データベース名を置き換えて手動で実行できます。

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;

Tip

LogMinerがすでに有効になっているかどうかを確認するには、次のクエリを実行します。

SELECT LOG_MODE FROM V$DATABASE;
3
  1. Oracle に対して継続的な同期ジョブを実行するには、データベース レベルで追加のログを有効にする必要があります。

    ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
  2. また、移行内のすべてのテーブルに対して追加のログを有効にする必要があります。

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

戻る

MySQL