このセクションには、次に関する情報が含まれています。
- Datastream が移行元 Oracle データベースから pull されているデータを処理する方法の動作
- Datastream でサポートされている Oracle データベースのバージョン
- データが移行先にストリーミングできるように移行元 Oracle データベースを設定する方法の概要
- Oracle データベースを移行元として使用する場合の既知の制限事項
行動
Datastream は、オンライン REDO ログファイルからデータへの変更を抽出する 2 つの方法(Oracle バイナリログ リーダー(プレビュー)と Oracle LogMiner)をサポートしています。
バイナリログ リーダー方式 (プレビュー)では、次の動作 が確認されます。
オンライン ログファイルから変更を抽出する際に読み取り遅延が発生した場合、Datastream はアーカイブ ログファイルから変更を抽出します。
Datastream は、commit された変更のみを移行先に複製します。 commit されていないトランザクションまたはロールバックされたトランザクションは複製されません。
バイナリ リーダーは、4,000 文字を超える Oracle
VARCHAR2列の複製をサポートしています。
Datastream は、データへの変更を公開する Oracle LogMiner 機能もサポートしています。このメソッドの動作は次のとおりです。
- 特定のデータベースのすべてのスキーマまたは特定のスキーマ、およびスキーマまたは特定のテーブルのすべてのテーブルを選択できます。
- 履歴データはすべて複製されます。
- 指定したデータベースとテーブルからの挿入、更新、削除など、すべてのデータ操作言語(DML)の変更が複製されます。
- Datastream は、commit された変更と、場合によっては commit されていない変更を移行先に複製します。Datastream は、commit されていない変更を読み取ります。ロールバックの場合、Datastream の出力レコードには反対のオペレーションも含まれます。たとえば、ロールバックの
INSERTオペレーションがある場合、出力レコードには対応するDELETEオペレーションも含まれます。この場合、イベントはROWIDのみを含むDELETEイベントとして表示されます。
ROWID ベースのバックフィル
Oracle では、ROWID はテーブル内の行の一意の識別子を格納する疑似列です。Datastream は、バックフィル オペレーションに ROWID 値を使用します。このため、バックフィル オペレーションが完了するまで、ソース Oracle データベースの ROWID 値を変更するようなアクションは行わないことをおすすめします。
ROWID 値を変更できるアクションは次のとおりです。
行の物理的な移動:
- エクスポートとインポートのオペレーション: テーブルをエクスポートしてからインポートすると、行の物理的な位置が変わり、新しい
ROWID値が生成される可能性があります。 ALTER TABLE (...) MOVEコマンド: テーブルを別の表領域に移動すると、物理ストレージが変更され、ROWIDが変更される可能性があります。ALTER TABLE (...) SHRINK SPACEコマンド: このコマンドはテーブルを圧縮します。これにより、行を移動してROWID値に影響を与える可能性があります。- パーティショニング オペレーション: パーティションの分割、マージ、移動により、行の物理的な配置とその
ROWID値を変更できます。
- エクスポートとインポートのオペレーション: テーブルをエクスポートしてからインポートすると、行の物理的な位置が変わり、新しい
フラッシュバック オペレーション:
FLASHBACK TABLEコマンド: テーブルを以前の状態に復元するには、行を削除して再挿入するため、新しいROWID値が作成されます。FLASHBACK_TRANSACTION_QUERY:FLASHBACK TABLEに類似しています。トランザクション内で行が削除または更新された場合、トランザクションをロールバックするとROWIDが変更される可能性があります。
Oracle 11.2.0.4 パーティション テーブルのバックフィルのトラブルシューティング
Oracle 11.2.0.4 のパーティション テーブルで、予期しないフェッチ エラー(インデックスが範囲外)でバックフィルが失敗する場合は、ALL_OBJECTS へのクエリがサブパーティションを返さない Oracle メタデータのバグが原因です。
- 回避策: Datastream ユーザーから
SELECT ON DBA_EXTENTS権限を一時的に取り消します(例:REVOKE SELECT ON sys.dba_extents FROM USER_NAME;)。これにより、Datastream はインデックス ベースのバックフィルを使用し、メタデータの問題を回避します。
スタンバイ データベース
Oracle Active Data Guard スタンバイ データベースをソースとして使用する場合、Datastream はアーカイブされた REDO ログを読み取ります。Datastream がスタンバイ データベースに正常に適用された REDO ログのみを処理するようにするには、`V$ARCHIVED_LOG`V$ARCHIVED_LOG や `GV$ARCHIVED_LOG`GV$ARCHIVED_LOG などの標準の Oracle ビューをフィルタして、`APPLIED = 'YES'`APPLIED = 'YES' フィルタを含むレコードのみを含める必要があります。
これは、カスタムビューを作成することで実現できます。Datastream ユーザーにこれらのビューへの適切なアクセス権を付与してください。次に例を示します。
CREATE OR REPLACE VIEW USER_NAME.local_v$archived_log AS
SELECT * FROM sys.v_$ARCHIVED_LOG
WHERE RESETLOGS_CHANGE# = (SELECT resetlogs_change# FROM v$database)
AND APPLIED = 'YES';
CREATE OR REPLACE VIEW USER_NAME.local_gv$archived_log AS
SELECT * FROM sys.gv_$ARCHIVED_LOG
WHERE RESETLOGS_CHANGE# = (SELECT resetlogs_change# FROM v$database)
AND APPLIED = 'YES';
CREATE SYNONYM USER_NAME.v$archived_log FOR USER_NAME.local_v$archived_log;
CREATE SYNONYM USER_NAME.gv$archived_log FOR USER_NAME.local_gv$archived_log;
APPLIED = 'YES' フィルタを使用すると、データの更新速度に影響します。Datastream は、スタンバイ データベースの Managed Recovery Process(MRP)がログを適用し、APPLIED 列を YES に更新するまで、変更を抽出しません。MRP プロセスが遅延または一時停止した場合(スタンバイ適用プロセスを一時停止した場合など)、複製されたデータの鮮度に直接影響します。Datastream は再試行ループに入り、新しく適用されたアーカイブ ログが使用可能になるまで処理を遅延させます。
この構成は、ラージ オブジェクト(LOB)列を含むテーブルを複製する場合に非常に重要です。UPDATE オペレーションの場合、REDO ログに LOB 列の詳細な値は存在しないため、Datastream はデータベースにクエリを実行して関連する行を取得する必要があります。Datastream が適用されていない REDO ログを処理し、スタンバイ データベースから LOB 値を取得しようとすると、誤った古い値が取得される可能性があります。ログをフィルタして最初に完全に適用することで、Datastream は正しいデータを取得します。
バージョン
Datastream は、次のバージョンの Oracle データベースをサポートしています。
- Oracle 11g、バージョン 11.2.0.4(Logminer CDC メソッドでのみサポート)
- Oracle 12c、バージョン 12.1.0.2
- Oracle 12c、バージョン 12.2.0.1
- Oracle 18c
- Oracle 19c
- Oracle 21c
Datastream は、次の種類の Oracle データベースをサポートしています。
- オンプレミスまたはクラウド プロバイダのいずれかでセルフホスト
- Oracle 用の Amazon RDS
- Oracle Cloud
- Oracle Exadata
- Oracle RAC
- Oracle Active Data Guard スタンバイ データベース
設定
移行元 Oracle データベースを設定して、そのデータが移行先にストリーミングできるようにするには、アクセス権の付与、ロギングの設定、保持ポリシーの定義のために、データベースを構成する必要があります。
Datastream がデータを移行先に pull できるようにこのデータベースを構成する方法については、移行元 Oracle データベースの構成をご覧ください。
ベスト プラクティス
このセクションでは、Datastream で使用する Oracle ソースを構成する際の推奨されるベスト プラクティスについて説明します。
バイナリ リーダーの大文字と小文字の区別
バイナリ リーダー CDC メソッドで Oracle ソースを構成し、REDO ログとアーカイブログのディレクトリ名を指定する場合は、名前で大文字と小文字が区別されることに注意してください。Datastream 接続プロファイルで指定するディレクトリ名が、Oracle データベースのディレクトリ名と完全に一致していることを確認してください。
CDC の同時実行
レプリケーションの遅延を最小限に抑えるには、Datastream が Oracle ソースで作成される REDO ログをできるだけ早く処理できるようにします。バイナリ リーダー CDC メソッドを使用する場合、Datastream の同時実行は REDO ログファイル レベルで行われます。maxConcurrentCdcTasks で定義された各タスクは、一度に 1 つのファイルを処理します。
次の方法を使用することをおすすめします。
- Datastream の同時実行を調整する: ビジネスのピーク時の
REDO ログの切り替えの平均数を特定し、
maxConcurrentCdcTasksパラメータを適切に構成します。詳細については、 CDC タスクの最大数をご覧ください。 - Oracle ログの切り替えを構成する: Oracle を構成して、ログを頻繁に切り替えます(10 ~ 20 分ごとなど)。これにより、より小さなワークユニットの安定したストリームが作成され、Datastream の同時実行タスクを効果的に並行して実行できます。
Oracle からの小さな REDO ログの頻繁な作成を処理するのに十分な数の同時実行タスクが Datastream に存在するように、設定を最適化することをおすすめします。詳細については、 ストリームの同時実行制御をご覧ください。
既知の制限事項
Oracle データベースを移行元として使用する場合の既知の制限事項は次のとおりです。
- ストリームは 10,000 テーブルに制限されています。 ストリームに 10,000 個を超えるテーブルが含まれている場合、エラーが発生する可能性があります。
- Datastream は Oracle マルチテナント アーキテクチャ(CDB/PDB)をサポートしていますが、ストリーム内に複製できるプラガブル データベースは 1 つだけです。
- Oracle Autonomous データベースはサポートされていません。
- 主キーのないテーブルの場合、Datastream は行の
ROWIDを使用して、コンシューマ側でマージ オペレーションを行います。ROWIDは一意ではない場合があります。たとえば、Oracle のエクスポート/インポート ユーティリティで行を削除して再度挿入すると、行のROWIDが変更される可能性があります。Oracle で行を削除した場合は、ROWIDを後で挿入される新しい行に割り当て直すことができます。 - 索引構成表(IOT)はサポートされていません。
- 一時テーブルはサポートされていません。
- 次の Oracle データ型はサポートされておらず 、複製されません。これらの型の列は、移行先で
NULL値として複製されます。ANYDATA、ANYDATASET、ANYTYPEVARRAY(Oracle 配列)BFILE、BFILENAMEINTERVAL DAY TO SECOND、INTERVAL YEAR TO MONTHLONG、LONG RAWUROWIDUDT- メディア型と空間型:
ORDAUDIO、ORDDATASOURCE、ORDDICOM、ORDDOC、ORDIMAGE、ORDVIDEO、SDO_GEOMETRY(その他すべてのMDSYS.SDO_*型)。
XMLTYPE、バイナリラージ オブジェクト(BLOB)、文字ラージ オブジェクト(CLOB)国別文字ラージ オブジェクト(NCLOB)などのラージ オブジェクト データ型の列をストリーミングするには、ストリームの構成にstreamLargeObjectsフラグを含める必要があります。このフラグを含めない場合、Datastream はこのような列をストリーミングせず、これらの列は宛先でNULL値に置き換えられます。詳細については、Oracle ソースのラージ オブジェクトのストリーミングを有効にするをご覧ください。 これらのデータ型をストリーミングする場合、Datastream はソース データベースにクエリを実行して、欠落している LOB 値を特定の時点(補足と呼ばれるアクティブなルックアップ プロセス)で取得する必要があります。これは、次のような場合に発生します。UPDATE中に、変更されていない LOB ペイロードが REDO ログから削除された場合- バイナリ XML 型を含む DML オペレーション中
- ストリームが LogMiner メソッドを使用している場合、LOB を含むテーブルに対する解析済み DML 中
Datastream はデータベースにクエリを実行してこれらの列をストリーミングするため、連続する更新や挿入後の迅速な削除など、迅速な更新を伴うシナリオでは、中間変更がキャプチャされない可能性があります。
DELETEオペレーションでは補足はトリガーされません。この制限は、すべての中間変更がキャプチャされることを想定している追記専用書き込みモードを使用する場合に特に重要です。Oracle 11g では、データ型
ANYDATAまたはUDTの列のあるテーブルはサポートされておらず、テーブル全体が複製されません。Oracle Label Security(OLS)は複製されません。
Datastream は、イベントの処理中に移行元から最新のスキーマを定期的に取得します。スキーマが変更されると、古いスキーマが引き続き適用されている間に、新しいスキーマのイベントが読み取られることがあります。この場合、Datastream はスキーマの変更を検出し、スキーマの取得をトリガーして、失敗したイベントを再処理します。
移行元のスキーマに対するすべての変更を自動的に検出できない場合があります。その場合、データが破損する可能性があります。次のスキーマの変更により、データが破損したり、イベントのダウンストリームが処理されなかったりする可能性があります。
- 列をドロップする
- テーブルの中央に列を追加する
- 列のデータ型を変更する
- 列の並べ替え
- テーブルをドロップする(新しいデータを追加して同じテーブルを再作成する場合に関連)
- テーブルを切り捨てる
Datastream はビューの複製をサポートしていません。
Datastream は、マテリアライズド ビューをサポートしています。ただし、ストリームの実行中に作成された新しいビューは自動的にバックフィルされません。
Oracle LogMiner メソッドを使用する場合、
SAVEPOINTステートメントはサポートされておらず、ロールバック時にデータの不一致が発生する可能性があります。バイナリ リーダー メソッドを使用する場合、動的にパーティション化されたテーブルはサポートされていません。
Oracle LogMiner メソッドを使用する場合、Datastream は名前が 30 文字を超えるテーブルと列の複製をサポートしていません。
Datastream は、Oracle データベース用に次の文字セット エンコードをサポートしています。
AL16UTF16AL32UTF8IN8ISCIIIW8ISO8859P8JA16SJISJA16SJISTILDEKO16MSWIN949US7ASCIIUTF8WE8ISO8859P1WE8ISO8859P9WE8ISO8859P15WE8MSWIN1252ZHT16BIG5
Datastream は、ゼロの日付値の複製をサポートしていません。このような日付は
NULL値に置き換えられます。Datastream は、Oracle Real Application Clusters(RAC)環境の単一クライアント アクセス名(SCAN)機能を使用するデータベースへの直接接続をサポートしていません。考えられるソリューションについては、Oracle ソースの動作と制限事項をご覧ください。
ソースが Oracle Active Data Guard スタンバイ データベースの場合、Datastream は表領域レベルの暗号化のみをサポートし、列レベルの暗号化はサポートしていません。
バイナリ リーダーを使用する場合の追加の制限事項
高性能バイナリ リーダー メソッドは、Oracle 12c 以降でのみサポートされています。Oracle 11g 以前のバージョンでは、LogMiner を使用する必要があります。
バイナリ リーダーは、次の機能をサポートしていません。
- Transparent Database Encryption(TDE)
- ハイブリッド列圧縮
- ファイルを保護する
- Amazon RDS ソースでは ASM はサポートされていません。
- バイナリ リーダー CDC メソッドは、Oracle 11g 以前のバージョンをサポートしていません。
次のステップ
- Datastream で使用する Oracle ソースの構成方法 を学習する。