Oracle の移行前提条件の構成
Oracleソースデータベースからデータを移行すると、 Relational Migrator はデータベースで必要な構成変更を自動的にチェックし、それらを実装するためのSQLスクリプトを生成します。データベース管理者(DBA)にスクリプトを確認し、データベースサーバー上で コマンドを実行させます。
Oracle の構成は移行ジョブの種類によって異なります。
スナップショット移行ジョブはすべてのデータを一度だけ移行し、その後停止します。
継続的な移行ジョブではスナップショット移行が実行され、その後 CDC ステージに入り、データ変更が継続的に複製されます。
サポートされているバージョンの Oracle の詳細については、 サポートされているデータベースとバージョン を参照してください。
このタスクについて
Oracle 12c インスタンスから移行する場合は、 SYSDBA ロールとして コマンドを実行する必要があります。
Oracle12 c はプラグ可能なデータベース(PDB)の概念を導入しました。一部のコマンドは PDB で実行できますが、
ARCHIVELOG
を有効にするようなコマンドは、コンテナとマスターデータベース(CDB)で実行する必要があります。各アーキテクチャの詳細については、「 コンテナ データベースとプラグ可能なデータベースの概要 」を参照してください。一部のコマンドは、データベースが単一テナントかマルチテナントかによって異なります。マルチテナントデータベースでは、権限にサフィックス
CONTAINER=ALL
が含まれている必要があります。Oracle Database Express Edition(XE)に対して継続的な移行ジョブを実行することはできません。XE は必要なログをサポートしていないためです。
手順
ユーザー権限を設定する
次のコードでは、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; サービス アカウントに権限を付与します。
重要
マルチテナントコンテナデータベースを一般的なユーザーとして移行する場合は、権限を付与するときに
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>;
ユーザー権限を設定する
次のコードでは、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; サービス アカウントに権限を付与します。
重要
マルチテナントコンテナデータベースを一般的なユーザーとして移行する場合は、権限を付与するときに
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>;
継続的な移行ジョブを実行するために、サービス アカウントに追加の権限を付与します。
マルチテナントコンテナデータベースを移行する 場合は、
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>;
アーカイブ ログを有効にする
アーカイブ ログがすでに有効になっているかどうかを確認するには、次のクエリを実行します。
SELECT LOG_MODE FROM V$DATABASE; この出力では、ログ記録が有効になっている場合は
ARCHIVELOG
が出力され、そうでない場合はNOARCHIVELOG
が出力されます。アーカイブ ログがまだ有効になっていない場合は、有効にします。
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;
詳細
Relational Migrator は、行レベルの変更をキャプチャするためにオープンソースの Debezium コネクターに依存しています。 詳細については、「 Debezium Oracle 」を参照してください
アーカイブ ロギングを有効にする方法の詳細については、「 アーカイブ済み Redo ログの管理 」を参照してください。
追加のトラブルシューティングとデバッグ情報については、 Debezium Oracle ヘルプ記事を参照してください。