Databricks への取り込み用に Oracle を構成する
ベータ版
この機能はベータ版です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。Databricksのプレビューを管理するを参照してください。
このページでは、Oracle から Databricks Lakeflow Connect に取り込むために必要なソース データベースのタスクについて説明します。
Oracle コネクタは、オンラインの Redo Logs およびアーカイブLogsから変更を読み取るために、コミットされていないトランザクションモードで LogMiner を使用します。
要件
- Oracleバージョン 12c以降(12c、18c、19c、21c、23ai、および26ai)。
- アーカイブLogsモード が有効になっています。
- レプリケートするテーブルに対して 補足ロギング が有効化されています。主キーの補足ロギングが最小要件です。主キーまたは一意キーのカラムに対して
UPDATEステートメントが実行されるテーブルには、完全な補足ロギングが必要です。最小限の補足ロギングだけでは不十分です。どの補足ロギング方法を選択すべきかを参照してください。 - プライマリ(スタンバイではない)データベース。Oracle RAC およびクローズドウォレットを使用した Transparent Data Encryption(TDE)で暗号化されたデータはサポートされていません。
- マルチテナントデータベースの場合は、必要な権限を持つ
CDB$ROOTの共通ユーザーを使用します。
ソース設定の概要
Databricksにデータを取り込む前に、Oracleで以下のタスクを完了してください。各ステップをSYSDBAユーザーとしてランするか、Amazon RDSデータベースの場合はADMINユーザーとして実行してください。
- アーカイブログモードとログ保持をご確認ください。
- 補足ロギングを有効にする。
- セットアップスクリプトを使用してレプリケーションユーザーを作成します。
- 接続の詳細に注意してください(サービス名やデータベースドメインなど)。
ステップ 1: アーカイブ Logs モードと Logs 保持期間を確認する [[ ## completed ##]]
Oracle 統合 CDC コネクターはアーカイブ Logs から読み取ります。次のクエリーは ARCHIVELOG を返す必要があります:
SELECT LOG_MODE FROM V$DATABASE;
クエリーがNOARCHIVELOGを返す場合は、続行する前にアーカイブLogsモードを有効にしてください。
アーカイブ Logsを有効にするステップ
- Non-RDS database
- Amazon RDS database
標準のOracleデータベースの場合:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
AWS RDS 上の Oracle については、自動バックアップを有効にします。
アーカイブLogsの保持を確実にする
Databricksでは、アーカイブLogsを少なくとも48時間保持することを推奨しています。パイプラインが処理する前にOracleがアーカイブLogsをパージした場合、影響を受けるテーブルに対して完全な更新を実行する必要があります。保持されるアーカイブLogsファイルを保存するために、それに応じてディスク容量を計画してください。
- Non-RDS database
- Amazon RDS database
Recovery Manager (RMAN) で以下をランします。
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 2 DAYS;
AWS RDS 上の Oracle については、AWS ドキュメントを参照してください。
BEGIN
rdsadmin.rdsadmin_util.set_configuration(
name => 'archivelog retention hours',
value => '48');
END;
ステップ 2: 補足ログ記録を有効にする
コネクタには、レプリケートする各テーブルで少なくとも 主キーの補足ロギング が必要です。主キー列または一意キー列に対して UPDATE ステートメントが実行されるテーブルには、 完全な補足ロギング が必要です。詳細については、「どの補足ロギング方法を選択すべきか?」を参照してください。
各テーブルで補足的なログ記録を有効にするか、データベースレベルで有効にしてすべてのテーブルに継承させることができます。コマンドは、データベースがAmazon RDS上でランしているかどうかによって異なります。 [[ ## completed ##]]
テーブルレベルでプライマリキーの補足ログ記録を有効にするには:
ALTER TABLE <schema>.<table> ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
テーブルレベルで完全な補足ログを有効にするには:
ALTER TABLE <schema>.<table> ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
データベースレベルでプライマリーキーの補足ログを有効にするには(オプション。すべてのテーブルが継承します):
- Non-RDS database
- Amazon RDS database
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
BEGIN
rdsadmin.rdsadmin_util.alter_supplemental_logging(
p_action => 'ADD',
p_type => 'PRIMARY KEY'
);
END;
詳細については、AWSドキュメントを参照してください。
ステップ 3: セットアップスクリプトを使用してレプリケーションユーザーを作成する
Databricks は、CDC のためのユーザー作成と権限付与を自動化する Oracle PL/SQL セットアップツール (dbx_oracle_setup_util) を提供しています。このパッケージは、以下のプロシージャを公開します。
手順 | 説明 |
|---|---|
| 指定されたデフォルトテーブルスペース、一時テーブルスペース、およびデフォルトテーブルスペースでの無制限のクォータを持つCDCレプリケーションユーザーを作成します。 |
| LogMiner CDC に必要なシステム権限およびオブジェクト権限を付与します。Oracle データベース ユーザーの要件を参照してください。 |
| スキーマ内のすべてのテーブルに対する |
| 特定のテーブルに対して |
| データベース環境、必要なデータベース構成、レプリケーション ユーザー、および必要な権限を検証します。 |
| 以前に作成されたレプリケーションユーザーを削除します。これを使用して、ユーザーのクリーンアップまたは再作成を行います。 |
セットアップツールをインストールする
-
セットアップツールをdownloadします: dbx-oracle-setup-package.sql。
-
スクリプトをランして
dbx_oracle_setup_utilPL/SQL パッケージを作成します。SYSDBA権限で (または Amazon RDS 上のADMINユーザーとして) ランします。マルチテナントデータベースの場合は、
CDB$ROOTコンテナー内でスクリプトをランします。
レプリケーションユーザーを作成します
専用のレプリケーションユーザーを作成します。ユーザー名は大文字である必要があります。マルチテナントデータベース(CDB)の場合、共通ユーザーが作成されるように、ユーザー名は C## で起動する必要があります。非CDBデータベースの場合、C##プレフィックスは使用しないでください。
次の例では、defaultのテーブルスペース USERS と一時テーブルスペース TEMP を持つ C##CDCREPL という名前のユーザーを作成します:
BEGIN
DBX_ORACLE_SETUP_UTIL.CREATE_USER('C##CDCREPL', '<password>', 'USERS', 'TEMP');
END;
/
レプリケーションには、SYSまたはSYSTEMユーザーを使用しないでください。
データベースレベルの権限を付与する
LogMiner CDCに必要な権限をレプリケーションユーザーに付与します。このツールは、環境に適した権限付与方法(標準的な権限付与、またはAmazon RDS rdsadmin権限付与)を自動的に選択し、マルチテナントデータベース用に CONTAINER_DATA=ALL を設定します。
BEGIN
DBX_ORACLE_SETUP_UTIL.GRANT_PERMISSIONS('C##CDCREPL');
END;
/
このツールが付与する権限の完全なリストについては、「Oracle データベースのユーザー要件」を参照してください。
テーブルに対する SELECT 権限を付与する
複製するすべてのテーブルに対して、レプリケーションユーザーにSELECTを付与します。セットアップツールには、これを行うための2つの手順が用意されています:
BEGIN
-- to grant SELECT on all tables in a schema
DBX_ORACLE_SETUP_UTIL.GRANT_SELECT_PERMISSIONS('C##CDCREPL', '<schema_to_replicate>', '<container_name>');
-- to grant SELECT on specific tables in the schema
DBX_ORACLE_SETUP_UTIL.GRANT_SELECT_ON_TABLE('C##CDCREPL', '<schema_to_replicate>', '<table_name>', '<container_name>');
END;
/
非CDBデータベースの場合は、<container_name>引数を省略します。
個々のテーブルに対して手動で SELECT を付与することもできます:
GRANT SELECT ON <schema>.<table> TO C##CDCREPL;
UIには、レプリケーションユーザーがSELECT権限を持つテーブルのみが表示されます。
Oracleの SELECT ANY TABLE 特権は、1つのステートメントでデータベース内のすべてのテーブルへの読み取りアクセスを許可します。レプリケーションユーザーに読み取らせたくないテーブルが公開される可能性があるため、開発データベース以外では避けてください。
設定を検証する
データベース環境、必要なデータベース構成、レプリケーションユーザー、および必要な権限を検証します:
BEGIN
DBX_ORACLE_SETUP_UTIL.VALIDATE_SETUP('C##CDCREPL');
END;
/
ステップ 4: 接続の詳細を記録する
Unity Catalog 接続を作成する際は、Oracle データベースに関する以下の詳細情報が必要です。Oracle 接続の作成を参照してください。
サービス名
このコネクタは、 サービス名 を使用してOracleに接続します。
- シングルテナント(非CDB) データベースの場合は、データベースのサービス名を使用します。
- マルチテナント (CDB) データベースの場合は、
CDB$ROOTサービス名を使用してください。コネクタはCDB$ROOTに接続してすべてのプラガブルデータベース (PDB) の変更を読み取り、PDBサービス名を自動的に解決します。「マルチテナント (CDB) データベース」を参照してください。
データベース ドメイン
データベースに DB_DOMAIN 初期化パラメーターが設定されている場合、Oracle はドメイン修飾名を使用して各サービスをリスナーに登録します(例:FREEPDB1 ではなく FREEPDB1.example.com)。これは、Oracle Connection Manager(CMAN)をフロントエンドとする環境で一般的です。
DB_DOMAIN が設定されている場合、Unity Catalog 接続で指定する CDB$ROOT サービス名には、ドメインサフィックスを含める必要があります(例:newcorp.example.com)。現在の値を確認するには:
SELECT value FROM v$parameter WHERE name = 'db_domain';
コネクターは、検出された DB_DOMAIN を PDB サービス名に自動的に付加します。接続には、ドメイン修飾された CDB$ROOT サービス名のみを指定する必要があります。詳細については、「Oracle 接続の作成」を参照してください。
マルチテナント (CDB) データベース
マルチテナントデータベースの場合:
CDB$ROOTコンテナー内でランします。- レプリケーションユーザーは共通ユーザー (
C##プレフィックス) である必要があります。 - セットアップツールは、すべてのコンテナ間で変更データを読み取れるように、ユーザーに対して
CONTAINER_DATA=ALLを設定します。 - Unity Catalog 接続では、
CDB$ROOTサービス名を使用します(DB_DOMAINが設定されている場合はドメイン修飾されます)。
マルチテナントの Amazon RDS for Oracle インスタンスはサポートされていません。
大文字と小文字の区別
デフォルトでは、Oracle は引用符なしの識別子を大文字と小文字を区別しないものとして扱い、大文字に変換します。識別子を作成時に二重引用符で囲むと、Oracle は大文字と小文字を保持します。
Unity Catalog 接続を作成する際は、データベースで小文字として保存されている場合を除き、大文字のユーザー名を使用してください。パイプラインでスキーマ、テーブル、および列名を指定する場合、大文字と小文字の区別が Oracle での識別子の保存方法と一致している必要があります。
ログマイナーの制限事項:
LogMiner は、以下のデータ型およびストレージ属性をサポートしていません。テーブルにこれらが含まれている場合、LogMiner はテーブル全体を無視します:
BFILE- ネストされたテーブルと
VARRAYコレクション - 入れ子テーブルを持つオブジェクト
- ID 列を持つテーブル
- 時間的有効性列
PKREF列PKOID列(オブジェクトタイプの列)- ネストされたテーブル属性とスタンドアロンのネストされたテーブル列
加えて:
- テーブル名と列名は30文字を超えないようにしてください。
- Oracle Database 12c Release 2 (12.2) 以降に追加されたデータ型と機能はサポートされていません。これには
BOOLEAN、VECTOR、 およびJSONが含まれます。
データ型のマッピング
Oracle データ型から Databricks 型へのマッピングについては、「Oracle 統合 CDC コネクターのリファレンス」を参照してください。
次のステップ
- 特権要件を確認してください。
- Oracle 接続を作成します。