変更データ キャプチャ(CDC)の更新をプラグイン可能な Oracle データベースから BigQuery や Cloud Storage などのサポートされている宛先にストリーミングするには、データベースを Datastream に接続します。各プラガブル データベースは、マルチテナント コンテナ データベース(CDB)内で実行されます。ソースを準備するには、CDB で ARCHIVELOG モードとログ保持を構成し、両方のコンテナでサプリメンタル ロギングとユーザー権限を構成します。
バイナリログ リーダー用にプラグイン対応 Oracle データベースを構成する
バイナリログ リーダー CDC メソッドで使用するようにプラグイン対応の Oracle データベースを構成するには、次の手順を行います。
次のいずれかの方法でログファイルにアクセスします。
自動ストレージ管理(ASM): このオプションを選択した場合は、専用の ASM 接続を作成し、接続プロファイルの作成時にその詳細を指定する必要があります。ASM 接続に使用するユーザー アカウントには、
SYSASM権限が必要です。SYSASM権限を持つ新しい ASM ユーザーを作成するには、次のコマンドを実行します。CREATE USER ASM_USER_NAME IDENTIFIED BY ASM_PASSWORD; GRANT SYSASM TO ASM_USER_NAME;
次のように置き換えます。
- ASM_USER_NAME: ASM ユーザーの名前。
- ASM_PASSWORD: ASM ユーザーのパスワード。
データベース ディレクトリ: このオプションを選択する場合は、REDO ログファイルとアーカイブ ログファイルを指すデータベース ディレクトリ オブジェクトを作成し、データベース ユーザーにディレクトリへの
READアクセス権を付与する必要があります。
CREATE DIRECTORY DIRECTORY_NAME_1 as 'ONLINE_REDO_LOGS_PATH'; CREATE DIRECTORY DIRECTORY_NAME_2 as 'ARCHIVED_REDO_LOGS_PATH'; GRANT READ ON DIRECTORY DIRECTORY_NAME_1 to USER_NAME; GRANT READ ON DIRECTORY DIRECTORY_NAME_2 to USER_NAME;
次のように置き換えます。
- DIRECTORY_NAME_1: オンライン REDO ログファイルのディレクトリの名前。
- DIRECTORY_NAME_2: アーカイブされた redo ログファイルのディレクトリの名前。
- ONLINE_REDO_LOGS_PATH: オンライン REDO ログファイルを保存するディレクトリのパス。
- ARCHIVED_REDO_LOGS_PATH: アーカイブされたログファイルを保存するディレクトリのパス。
- USER_NAME:
READアクセス権を付与するデータベース ユーザーの名前。
バイナリログ リーダー メソッドを選択し、データベース ディレクトリを使用する場合は、ストリームの作成時に redo ログとアーカイブ ログのディレクトリ名を指定する必要があります。
データベースが
ARCHIVELOGモードで実行中であることを確認します。これを行うには、Oracle データベースにログインし、SQL プロンプトで次のコマンドを実行します。
SELECT LOG_MODE FROM V$DATABASE;- 結果が
ARCHIVELOGの場合は、次のステップに進みます。 - 結果が
NOARCHIVELOGの場合は、データベースでARCHIVELOGモードを有効にする必要があります。 SYSDBAとしてログインした場合は、次のコマンドを実行します。SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;
アーカイブされたログファイルはディスク容量を消費するため、データベースに
DB_RECOVERY_FILE_DEST_SIZEパラメータを構成されることをおすすめします。このパラメータを使用して、ターゲット データベースの復元ファイルで使用される合計容量のハードリミット(バイト単位)を指定します。このパラメータを設定すると、ディスク容量が不足しないようにデータベースを保護する場合と、ログ位置の損失が原因でストリームが失敗する場合のトレードオフを管理できます。
- 結果が
次の Oracle Recovery Manager(RMAN)コマンドを実行して、データベースのデータ保持ポリシーを定義します。
TARGET / CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;
バックアップとアーカイブのログは少なくとも 4 日間保持し、7 日間保持することをおすすめします。
Oracle ログファイルのローテーション ポリシーの構成に使用しているデータベース ツールの SQL プロンプトに戻ります。ログファイルの最大サイズは 512 MB までに設定することをおすすめします。
追加ログデータを有効にします。これを行うには、次のコマンドを実行して、まず、データベース レベルの最小限の補足ロギングを有効にします。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
次に、特定のテーブルまたはデータベース全体のロギングを有効にするかどうかを選択します。
特定のテーブルの変更のみをログに記録するには、複製するテーブルごとに次のコマンドを実行します。
ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
以下を置き換えます。
- SCHEMA: テーブルを含むスキーマの名前。
- TABLE: 変更を記録するテーブルの名前。
データベース内のほとんどまたはすべてのテーブルを複製するには、データベース全体でロギングを有効にすることを検討してください。次のコマンドを実行して、データベース全体で補足ログデータを有効にします。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
プラガブル データベースへの接続に使用されるユーザー アカウントに、適切な権限を付与します。これを行うには、次のコマンドを実行します。
GRANT SELECT ON GV_$LOG TO USER_NAME; GRANT SELECT ON GV_$LOGFILE TO USER_NAME; GRANT SELECT ON GV_$ARCHIVED_LOG TO USER_NAME; GRANT SELECT ON GV_$INSTANCE TO USER_NAME; GRANT SELECT ON GV_$STANDBY_LOG TO USER_NAME; GRANT SELECT ON V_$INSTANCE TO USER_NAME; GRANT SELECT ON V_$PDBS TO USER_NAME; GRANT SELECT ON V_$TRANSPORTABLE_PLATFORM TO USER_NAME; GRANT SELECT ON V_$DATABASE TO USER_NAME; GRANT SELECT ON V_$PARAMETER TO USER_NAME; GRANT SELECT ON COL$ TO USER_NAME; GRANT SELECT ON DBA_OBJECTS TO USER_NAME; GRANT SELECT ON DBA_TABLESPACES TO USER_NAME; GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME; GRANT SELECT ON DBA_EXTENTS TO USER_NAME; GRANT SELECT ON DBA_SUPPLEMENTAL_LOGGING TO USER_NAME; GRANT CONNECT TO USER_NAME; GRANT CREATE SESSION TO USER_NAME; GRANT SELECT ANY TABLE TO USER_NAME; GRANT READ ON DIRECTORY ONLINELOG_DIR TO USER_NAME; GRANT READ ON DIRECTORY ARCHIVELOG_DIR TO USER_NAME;
USER_NAME は、データベースへの接続に使用するユーザー アカウントの名前に置き換えます。
LogMiner 用にプラグイン対応 Oracle データベースを構成する
自己ホスト型の Oracle プラグイン対応データベースを構成して LogMiner API で使用できるようにするには、次の手順を行います。
データベースが
ARCHIVELOGモードで実行中であることを確認します。この操作を行うには、CDB$ROOTコンテナから次のコマンドを実行します。SELECT LOG_MODE FROM V$DATABASE;- 結果が
ARCHIVELOGの場合は、ステップ 2 に進みます。 - 結果が
NOARCHIVELOGの場合は、データベースでARCHIVELOGモードを有効にする必要があります。 SYSDBAとしてログインした場合は、次のコマンドを実行します。SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;アーカイブされたログファイルはディスク容量を消費するため、データベースに
DB_RECOVERY_FILE_DEST_SIZEパラメータを構成されることをおすすめします。このパラメータを使用して、ターゲット データベースの復元ファイルで使用される合計容量のハードリミット(バイト単位)を指定します。このパラメータを設定すると、ディスク容量が不足しないようにデータベースを保護する場合と、ログ位置の損失が原因でストリームが失敗する場合のトレードオフを管理できます。
- 結果が
CDB$ROOTコンテナから次の Oracle Recovery Manager(RMAN)コマンドを実行して、データベースのデータ保持ポリシーを定義します。CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;このコマンドは、コンテナ データベース内のすべてのプラグイン対応データベースのデータ保持ポリシーを定義します。
バックアップとアーカイブのログは少なくとも 4 日間保持し、7 日間保持することをおすすめします。
Oracle ログファイルのローテーション ポリシーの構成に使用しているデータベース ツールの SQL プロンプトに戻ります。ログファイルの最大サイズは 512 MB までに設定することをおすすめします。
追加ログデータを有効にします。これを行うには、まず、次のコマンドを実行して、
CDB$ROOTコンテナレベルでデータベースのサプリメンタル ロギングを有効にします。ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;次に、特定のテーブルまたはプラグイン対応データベース全体のロギングを有効にするかどうかを選択します。
特定のテーブルの変更のみをログに記録するには、プラグイン対応データベース コンテナに接続し、複製するテーブルごとに次のコマンドを実行します。
ALTER TABLE SCHEMA.TABLE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;以下を置き換えます。
- SCHEMA: テーブルを含むスキーマの名前。
- TABLE: 変更を記録するテーブルの名前。
データベース内の複数のテーブルまたはすべてのテーブルを複製するには、データベース全体でロギングを有効にすることを検討してください。
次のコマンドを実行して、データベース全体で補足ログデータを有効にします。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;共通ユーザーを作成します。共通ユーザーは、
CDB$ROOTコンテナとプラガブル データベースで同じ ID を持ちます。共通ユーザーは、CDB$ROOTコンテナに接続し、コンテナ内、および権限があるプラグイン対応データベース内で操作できます。共通ユーザー名はC##またはc##で始まる必要があります。データベースへの接続に使用される共通ユーザーに、適切な権限を付与します。
CDB$ROOTコンテナレベルとプラグイン対応データベース レベルでは、異なる権限が必要です。CDB$ROOTコンテナに接続し、次のコマンドを実行します。
GRANT CREATE SESSION TO USER_NAME; GRANT SET CONTAINER TO USER_NAME; GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME; GRANT SELECT ON SYS.V_$LOGMNR_CONTENTS TO USER_NAME; GRANT EXECUTE ON DBMS_LOGMNR TO USER_NAME; GRANT EXECUTE ON DBMS_LOGMNR_D TO USER_NAME; GRANT LOGMINING TO USER_NAME; GRANT EXECUTE_CATALOG_ROLE TO USER_NAME;- プラグイン対応データベースに接続し、次のコマンドを実行します。
GRANT CREATE SESSION TO USER_NAME; GRANT SET CONTAINER TO USER_NAME; GRANT SELECT ANY TABLE TO USER_NAME; GRANT SELECT ON SYS.V_$DATABASE TO USER_NAME; GRANT SELECT ON V_$PDBS TO USER_NAME; GRANT SELECT ON SYS.V_$LOG TO USER_NAME; -- for primary databases GRANT SELECT ON SYS.V_$STANDBY_LOG TO USER_NAME; -- for standby databases GRANT SELECT ON SYS.V_$LOGFILE TO USER_NAME; GRANT SELECT ON SYS.V_$ARCHIVED_LOG TO USER_NAME; GRANT SELECT ON DBA_SUPPLEMENTAL_LOGGING TO USER_NAME; GRANT SELECT ON SYS.V_$PARAMETER TO USER_NAME;共通ユーザーにデータベースの
DBA_EXTENTSビューに対するSELECTアクセス権を付与します。この権限により、Oracle ソースのROWIDベースのバックフィルを使用できます。GRANT SELECT ON DBA_EXTENTS TO USER_NAME;
データベースで透過的データ暗号化(TDE)を使用している場合は、次の権限を付与します。
GRANT SELECT ON DBA_TABLESPACES TO USER_NAME; GRANT SELECT ON DBA_ENCRYPTED_COLUMNS TO USER_NAME;
次のステップ
- Datastream が Oracle ソースと連携する仕組みについて学習します。