Oracle の移行前提条件の構成
Oracle ソース データベースから同期ジョブを実行するには、データベースの構成変更が必要になる場合があります。 Relational Migrator でデータベースの構成変更が必要と判断された場合は、必要な変更を伴う SQL スクリプトが自動的に生成されます。 データベース管理者(DBA)にこのスクリプト内のコマンドを確認し、データベース サーバー上で実行することをお勧めします。 Oracle の構成は 同期ジョブ の種類によって異なります。
スナップショット同期ジョブはすべてのデータを移行し、その後停止します。
継続的な同期ジョブはスナップショットを実行し、その後 CDC ステージに入り、データ変更を継続的に複製します。
サポートされているバージョンの Oracle の詳細については、 サポートされているデータベースとバージョン を参照してください。
このタスクについて
Oracle 12c インスタンスから移行する場合は、 SYSDBA ロールとして コマンドを実行する必要があります。
Oracle 12 c では、プラグ可能なデータベースの概念が導入されました。 これらのコマンドの一部は PDB(プラグ可能なデータベース)で実行できますが、
ARCHIVELOG
を有効にするなどのコマンドは CDB(コンテナ/マスター データベース)で実行する必要があります。 各アーキテクチャの詳細については、「 コンテナ データベースとプラグ可能なデータベースの概要 」を参照してください。Oracle Express エディションでは、追加のログは許可されていません。
手順
ユーザー権限を設定する
次のコードでは、Oracle インスタンスに接続するための Relational Migrator 用の新しい Oracle サービス アカウントが作成されます。 あるいは、既存の Oracle サービス アカウントを使用して、適切な権限で Relational Migrator に接続することもできます。
サービス アカウントを作成します。
CREATE USER '<user>'@'localhost' IDENTIFIED BY '<password>'; サービス アカウントに選択した権限を付与します。
サービス アカウントに必要な権限は、同期ジョブの実行に使用されるサービス アカウントがテーブルを所有するかどうかによって異なります。 テーブルの所有権を確認するには、次のクエリを実行します。
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>;
ユーザー権限を設定する
次のコードでは、Oracle インスタンスに接続するための Relational Migrator 用の新しい Oracle サービス アカウントが作成されます。 あるいは、既存の Oracle サービス アカウントを使用して、適切な権限で Relational Migrator に接続することもできます。
サービス アカウントを作成します。
CREATE USER '<user>'@'localhost' IDENTIFIED BY '<password>'; サービス アカウントに選択した権限を付与します。
サービス アカウントに必要な権限は、同期ジョブの実行に使用されるサービス アカウントがテーブルを所有するかどうかによって異なります。 テーブルの所有権を確認するには、次のクエリを実行します。
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>;
継続的な同期ジョブを実行するために、サービス アカウントに追加の権限を付与します。
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>;
データベースレベルでLogMiner
をオンにする
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;
詳細
Relational Migrator は、行レベルの変更をキャプチャするためにオープンソースの Debezium コネクターに依存しています。 詳細については、「 Debezium Oracle 」を参照してください
アーカイブ ロギングを有効にする方法の詳細については、「 アーカイブ済み Redo ログの管理 」を参照してください。
追加のトラブルシューティングとデバッグ情報については、 Debezium Oracle ヘルプ記事を参照してください。