このセクションには、次に関する情報が含まれています。
- 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
が変更される可能性があります。
バージョン
Datastream は、次のバージョンの Oracle データベースをサポートしています。
- Oracle 11g、バージョン 11.2.0.4
- 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 データベースの構成をご覧ください。
既知の制限事項
Oracle データベースを移行元として使用する場合の既知の制限事項は次のとおりです。
- ストリームは 10,000 テーブルに制限されています。 ストリームに 10,000 を超えるテーブルが含まれている場合、エラーが発生する可能性があります。
- Datastream は Oracle マルチテナント アーキテクチャ(CDB/PDB)をサポートしていますが、ストリーム内に複製できるプラガブル データベースは 1 つだけです。
- Oracle Autonomous データベースはサポートされていません。
- 主キーのないテーブルの場合、Datastream は行の
ROWID
を使用して、コンシューマ側でマージ オペレーションを行います。ROWID
は一意ではない場合があります。たとえば、Oracle のエクスポート/インポート ユーティリティで行を削除して再度挿入すると、行のROWID
が変更される可能性があります。Oracle で行を削除した場合は、ROWID
を後で挿入される新しい行に割り当て直すことができます。 - 索引構成表(IOT)はサポートされていません。
- 一時テーブルはサポートされていません。
- データ型
ANYDATA
、BFILE
、INTERVAL DAY TO SECOND
、INTERVAL YEAR TO MONTH
、LONG/LONG RAW
、SDO_GEOMETRY
、UDT
、UROWID
、XMLTYPE
の列はサポートされておらず、NULL
値に置き換えられます。 - バイナリラージ オブジェクト(
BLOB
)、文字ラージ オブジェクト(CLOB
)国別文字ラージ オブジェクト(NCLOB
)などのラージ オブジェクト データ型の列をストリーミングするには、ストリームの構成にstreamLargeObjects
フラグを含める必要があります。このフラグを含めない場合、Datastream はこのような列をストリーミングせず、これらの列は宛先でNULL
値に置き換えられます。詳細については、Oracle ソースのラージ オブジェクトのストリーミングを有効にするをご覧ください。 - Oracle 11g では、データ型
ANYDATA
またはUDT
の列のあるテーブルはサポートされておらず、テーブル全体が複製されません。 - Oracle Label Security(OLS)は複製されません。
- Datastream は、イベントの処理中に移行元から最新のスキーマを定期的に取得します。スキーマが変更されると、古いスキーマが引き続き適用されている間に、新しいスキーマのイベントが読み取られることがあります。この場合、Datastream はスキーマの変更を検出し、スキーマの取得をトリガーして、失敗したイベントを再処理します。
- 移行元のスキーマに対するすべての変更を自動的に検出できない場合があります。その場合、データが破損する可能性があります。次のスキーマの変更により、データが破損したり、イベントのダウンストリームが処理されなかったりする可能性があります。
- 列をドロップする
- テーブルの中央に列を追加する
- 列のデータ型を変更する
- 列の並べ替え
- テーブルをドロップする(新しいデータを追加して同じテーブルを再作成する場合に関連)
- テーブルを切り捨てる
- Datastream はビューの複製をサポートしていません。
- Datastream は、マテリアライズド ビューをサポートしています。ただし、ライブ配信の実行中に作成された新しい視聴回数は自動的にバックフィルされません。
- Oracle LogMiner メソッドを使用する場合、
SAVEPOINT
ステートメントはサポートされておらず、ロールバックが発生するとデータの不一致が発生する可能性があります。 - Datastream は、Oracle データベース用に次の文字セット エンコードをサポートしています。
AL16UTF16
AL32UTF8
IN8ISCII
JA16SJIS
JA16SJISTILDE
US7ASCII
UTF8
WE8ISO8859P1
WE8ISO8859P9
WE8ISO8859P15
WE8MSWIN1252
ZHT16BIG5
- Datastream は、ゼロの日付値の複製をサポートしていません。このような日付は
NULL
値に置き換えられます。 - 非常に大きなログファイルを生成すると、Datastream がタイムアウトになり、ストリーム障害が発生する可能性があります。REDO ログファイルの推奨サイズは 1 GB 未満です。
- Datastream は、Oracle Real Application Clusters(RAC)環境の単一クライアント アクセス名(SCAN)機能を使用するデータベースへの直接接続をサポートしていません。考えられるソリューションについては、Oracle ソースの動作と制限事項をご覧ください。
- ソースが Oracle Active Data Guard スタンバイ データベースである場合、Datastream は暗号化されたデータの複製をサポートしていません。
バイナリ リーダーを使用する場合の追加の制限事項
バイナリ リーダーは、次の機能をサポートしていません。
- 透過的データベース暗号化(TDE)
- ハイブリッド列圧縮
- ファイルを保護する
- バイナリ リーダーの CDC メソッドは、ストリームの復元をサポートしていません。
- ASM は Amazon RDS ソースではサポートされていません。
次のステップ
- Datastream で使用する Oracle ソースの構成方法を学習する。