次の方法で共有


Oracle CDC データベース

Von Bedeutung

Change Data Capture for Oracle by Attunity は現在非推奨となりました。 詳細については、お知らせを参照してください。

Oracle CDC インスタンスは、ターゲット SQL Server インスタンス上の同じ名前で SQL Server データベースに関連付けられます。 このデータベースは、Oracle CDC データベース (または CDC データベース) と呼ばれます。

CDC データベースは Oracle CDC Designer コンソールを使用して作成および構成され、次の要素が含まれています。

  • SQL Server CDC のデータベースを有効にして作成された cdc スキーマ。

  • Oracle CDC インスタンスによって使用される cdc.xdbcdc_xxxx テーブルのセット。

  • Tuphe Source Oracle データベース内のキャプチャされたテーブルの定義を含む空のミラー テーブルのセット。

  • SQL Server CDC メカニズムによって生成され、通常の Oracle 以外の SQL Server CDC で使用されるものと同じ変更テーブルと変更アクセス関数のセット。

cdc スキーマには、最初は dbowner 固定データベース ロールのメンバーのみがアクセスできます。 変更テーブルと変更関数へのアクセスは、SQL Server CDC と同じセキュリティ モデルによって決定されます。 セキュリティ モデルの詳細については、「 セキュリティ モデル」を参照してください。

CDC データベースの作成

ほとんどの場合、CDC データベースは CDC デザイナー コンソールを使用して作成されますが、CDC デザイナー コンソールを使用して生成される CDC 配置スクリプトを使用して作成することもできます。 SQL Server システム管理者は、必要に応じて (ストレージ、セキュリティ、可用性などの項目に対して) データベース設定を変更できます。

CDC デザイナー コンソールを使用してデータベース テーブルと必要なスクリプトを作成する方法の詳細については、「 インスタンスの新規作成ウィザードを使用する」を参照してください。

CDC データベース ユーザー ロール

CDC データベースが作成され、CDC に対して有効になると、 cdc_service というデータベース ユーザーが CDC データベースに作成され、Oracle CDC Service が構成された SQL Server ログインに関連付けられます。 このユーザーは、 db_datareader、db_datawriter、および db_ddladminデータベース ロール メンバーになります。 SQL Server ログインが dbo ユーザーにも関連付けられている場合、 cdc_service は作成されません。

このロールの割り当てにより、Oracle CDC Service は、キャプチャされたデータと制御情報を使用して、 cdc スキーマのテーブルを更新できます。

CDC データベースが作成され、CDC ソース Oracle テーブルが設定されると、CDC データベース所有者はミラー テーブルの SELECT アクセス許可を付与し、SQL Server CDC ゲーティング ロールを定義して、変更データにアクセスするユーザーを制御できます。

ミラー テーブル

キャプチャされたテーブルごとに、 <schema-name>.<table-name> Oracle ソース データベースでは、同じスキーマとテーブル名を持つ同様の空のテーブルが CDC Database に作成されます。 SQL Server のcdc スキーマは SQL Server CDC 用に予約されているため、スキーマ名cdc (大文字と小文字は区別されません) を持つ Oracle ソース テーブルをキャプチャできません。

ミラー テーブルは空です。データは格納されません。 これらは、Oracle CDC インスタンスによって使用される標準の SQL Server CDC インフラストラクチャを有効にするために使用されます。 ミラー テーブルにデータが挿入または更新されないようにするために、PUBLIC に対するすべての UPDATE、DELETE、および INSERT 操作は拒否されます。 これにより、変更できなくなります。

変更データへのアクセス

キャプチャ インスタンスに関連付けられている変更データへのアクセスを取得するために使用される SQL Server セキュリティ モデルのため、関連付けられているミラー テーブルのすべてのキャプチャ列へのアクセス select ユーザーに付与する必要があります (元の Oracle テーブルへのアクセス許可は、SQL Server の変更テーブルへのアクセスを提供しません)。 SQL Server セキュリティ モデルの詳細については、「 セキュリティ モデル」を参照してください。

さらに、キャプチャ インスタンスの作成時にゲーティング ロールを指定する場合、呼び出し元も指定されたゲーティング ロールのメンバーである必要があります。 メタデータにアクセスするためのその他の一般的な変更データ キャプチャ関数には、PUBLIC ロールを介してすべてのデータベース ユーザーがアクセスできますが、通常、返されるメタデータへのアクセスは、基になるソース テーブルへの選択アクセスと、定義されたゲーティング ロールのメンバーシップによって制限されます。

変更データは、キャプチャ インスタンスの作成時に SQL Server CDC コンポーネントによって生成された特別なテーブル ベースの関数を呼び出すことによって読み取られる場合があります。 この関数の詳細については、「 Change Data Capture Functions (Transact-SQL)」を参照してください。

Integration Services CDC ソース コンポーネントを介した CDC データへのアクセスには、同じ規則が適用されます。

CDC データベース テーブル

このセクションでは、CDC データベースの次の表について説明します。

テーブルの変更 (_CT)

変更テーブルはミラー テーブルから作成されます。 Oracle データベースからキャプチャされた変更データが含まれています。 テーブルには、次の規則に従って名前が付けられます。

[cdc][<capture-instance>_CT]

テーブル <schema-name>.<table-name>に対してキャプチャが最初に有効になっている場合、既定のキャプチャ インスタンス名は <schema-name>_<table-name>。 たとえば、Oracle HR の EMPLOYEES テーブルの既定のキャプチャ インスタンス名は HR_EMPLOYEES で、関連付けられている変更テーブルは [cdc] です。 [HR_EMPLOYEES_CT]。

キャプチャ テーブルは、Oracle CDC インスタンスによって書き込まれます。 これらは、キャプチャ インスタンスの作成時に SQL Server によって生成される特別なテーブル値関数を使用して読み取られます。 たとえば、fn_cdc_get_all_changes_HR_EMPLOYEES のようにします。 これらの CDC 関数の詳細については、「 Change Data Capture Functions (Transact-SQL)」を参照してください。

cdc.lsn_time_mapping

[cdc].[lsn_time_mapping] テーブルは、SQL Server CDC コンポーネントによって生成されます。 Oracle CDC の場合の使用は、通常の使用とは異なります。

Oracle CDC の場合、このテーブルに格納されている LSN 値は、変更に関連付けられている Oracle システム変更番号 (SCN) 値に基づいています。 LSN 値の最初の 6 バイトは、元の Oracle SCN 番号です。

また、Oracle CDC を使用する場合、時刻列 (tran_begin_timetran_end_time) には、通常の SQL Server CDC の場合と同様に、現地時刻ではなく、変更の UTC 時刻が格納されます。 これにより、夏時間の変更が、lsn_time_mappingに格納されているデータに影響を与えないようにします。

cdc.xdbcdc_config

このテーブルには、Oracle CDC インスタンスの構成データが含まれています。 CDC デザイナー コンソールを使用して更新されます。 このテーブルの行は 1 つだけです。

次の表では、 cdc.xdbcdc_config テーブルの列について説明します。

アイテム 説明
バージョン これにより、CDC インスタンス構成のバージョンが追跡されます。 テーブルが更新されるたびに更新され、新しいキャプチャ インスタンスが追加されるか、既存のキャプチャ インスタンスが削除されるたびに更新されます。
接続文字列 (connect_string) Oracle 接続文字列。 基本的な例を次に示します。

<server>:<port>/<instance> (たとえば、 erp.contoso.com:1521/orcl)。

接続文字列では、 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=erp.contoso.com) (PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=orcl)))など、Oracle Net 接続記述子を指定することもできます。

ディレクトリ サーバーまたは tnsname を使用する場合、接続文字列は接続の名前にすることができます。

Oracle 接続文字列の詳細については、Oracle CDC Service で使用される Oracle インスタント クライアントの Oracle データベース接続文字列の詳細については、 https://go.microsoft.com/fwlink/?LinkId=231153 を参照してください。
Windows認証を使用 次の値を指定できるブール値。

0: 認証用に Oracle ユーザー名とパスワードが指定されている (既定)

1: Windows 認証を使用して Oracle データベースに接続します。 このオプションは、Oracle データベースが Windows 認証で動作するように構成されている場合にのみ使用できます。
ユーザー名 ログ マイニング Oracle データベース ユーザーの名前。 これは、 use_windows_authentication = 0 の場合にのみ必須です。
パスワード ログ マイニング Oracle データベース ユーザーのパスワード。 これは、 use_windows_authentication = 0 の場合にのみ必須です。
トランザクションステージングタイムアウト コミットされていない Oracle トランザクションがメモリ内に保持されてから、 cdc.xdbcdc_staged_transactions テーブルに書き込まれる時間 (秒単位)。 既定値は 120 秒です。
メモリ制限 メモリ内のデータのキャッシュに使用できるメモリ量の制限 (Mb 単位)。 設定を小さくすると、 cdc.xdbcdc_staged_transactions テーブルに書き込まれるトランザクションが増えます。 既定値は 50 Mb です。
オプション name[=value][; ] の形式のオプションの一覧 - セカンダリ オプション (トレース、チューニングなど) を指定するために使用されます。 使用可能なオプションの説明については、次の表を参照してください。

次の表では、使用可能なオプションについて説明しています。

名前 既定値 マックス スタティック 説明
痕跡 いいえ - - いいえ 使用可能な値は次のとおりです。

正しい

いいえ

オン

オフ
CDC_状態更新間隔 10 1 120 いいえ トランザクションに割り当てられたメモリ チャンクのサイズ (KB 単位) (トランザクションは複数のチャンクを割り当てることができます)。 cdc.xdbcdc_config表のmemory_limit列 参照してください。
ターゲット最大バッチ化されたトランザクション 100 1 1000 正しい SQL Server CT テーブルの 1 つのトランザクションとして処理できる Oracle トランザクションの最大数が更新されます。
ターゲットアイドルLSN更新間隔 10 0 1 いいえ キャプチャされたテーブルにアクティビティがない場合に lsn_time_mapping テーブルを更新するための間隔 (秒単位)。
トレース保持期間 二十四 1 24*31 いいえ 時間 (トレース テーブルにメッセージを保持する時間単位)。
sql_reconnect_interval 2 2 3600 いいえ SQL Server に再接続するまでに待機する時間 (秒単位)。 この間隔は、SQL Server クライアントの接続タイムアウトに加えて使用されます。
SQL再接続制限限度 -1 -1 -1 いいえ SQL Server の再接続の最大数。 既定の -1 は、プロセスが停止するまで再接続を試行することを意味します。
cdc_restart_limit 6 -1 3600 いいえ ほとんどの場合、CDC サービスは異常終了した CDC インスタンスを自動的に再起動します。 このプロパティは、サービスがインスタンスの再起動を停止した 1 時間あたりのエラー数を定義します。 -1 値は、インスタンスを常に再起動する必要があることを意味します。

サービスは、構成テーブルの更新後にインスタンスを再起動するために戻ります。
CDCメモリレポート 0 0 1000 いいえ パラメーターの値が変更された場合、CDC インスタンスはそのメモリ レポートをトレース テーブルに出力します。
ターゲットコマンドタイムアウト 600 1 3600 いいえ SQL Server でのコマンド タイムアウト。
ソース文字セット - - - 正しい Oracle データベースのコード ページの代わりに使用する特定の Oracle エンコードに設定できます。 これは、文字データが使用している実際のエンコードが Oracle データベースのコードページで表されるエンコードと異なる場合に使用できます。
ソースエラー再試行間隔 30 1 3600 いいえ 接続エラーやシステム テーブル間の一時的な同期の欠如など、いくつかのエラーで再試行する前に使用されます。
source_prefetch_size (ソースプリフェッチサイズ) 100 1 1万 正しい プリフェッチ バッチのサイズ。
クエリ内の最大テーブル数のソース 100 1 1万 正しい テーブル のフィルター処理を行わずに Oracle ログを読み取る前の WHERE 句のテーブルの最大数。
ソース読み取り再試行間隔 2 1 3600 いいえ ソースが EOF 上の Oracle トランザクション ログを再度読み取る前に待機する時間。
source_reconnect_interval(ソース再接続間隔) 30 1 3600 いいえ ソース データベースへの再接続を試行するまでに待機する時間 (秒単位)。
ソース再接続制限 -1 -1 いいえ ソース データベースの再接続の最大数。 既定の -1 は、プロセスが停止するまで再接続を試行することを意味します。
ソースコマンドタイムアウト 30 1 3600 いいえ Oracle での接続タイムアウト。
接続元タイムアウト 30 1 3600 いいえ SQL Server での接続タイムアウトが発生しました。
トレースデータエラー 正しい - - いいえ ブール値。 True は、データ変換と切り捨てエラーをログに記録することを示します。
スキーマ変更時の停止を指示するCDC設定 いいえ - - いいえ ブール値。 True は 、スキーマの破壊的変更が検出されたときに停止することを示します。

False は、ミラー テーブルとキャプチャ インスタンスを削除することを示します。
source_oracle_home - - いいえ 特定の Oracle ホーム パスまたは CDC インスタンスが Oracle への接続に使用する Oracle ホーム名に設定できます。

cdc.xdbcdc_state

この表には、Oracle CDC インスタンスの永続化された状態に関する情報が含まれています。 キャプチャ状態は、復旧とフェールオーバーのシナリオや正常性の監視に使用されます。

次の表では、 cdc.xdbcdc_state テーブルの列について説明します。

アイテム 説明
ステータス 現在の Oracle CDC インスタンスの現在の状態コード。 状態は、CDC の現在の状態を示します。
サブステータス 現在の状態に関する追加情報を提供する 2 番目のレベルの状態。
活動中 次の値を指定できるブール値。

0: Oracle CDC インスタンス プロセスがアクティブではありません。

1: Oracle CDC インスタンス プロセスがアクティブです。
エラー 次の値を指定できるブール値。

0: Oracle CDC インスタンス プロセスがエラー状態ではありません。

1: Oracle CDC インスタンスがエラー状態です。
ステータスメッセージ エラーまたは状態の説明を提供する文字列。
タイムスタンプ(時刻印) キャプチャ状態が最後に更新された時刻 (UTC) のタイムスタンプ。
作動中のキャプチャノード 現在 Oracle CDC Service と Oracle CDC インスタンス (Oracle トランザクション ログを処理している) を実行しているホストの名前 (ホストはクラスター上のノードにすることができます)。
最終取引タイムスタンプ 変更テーブルに書き込まれた最後のトランザクションの時刻 (UTC) を示すタイムスタンプ。
最終変更タイムスタンプ 最新の変更レコードがソース Oracle トランザクション ログから読み取られた時刻 (UTC) のタイムスタンプ。 このタイムスタンプは、CDC プロセスの現在の待機時間を識別するのに役立ちます。
トランザクションログヘッド_cn Oracle トランザクション ログから読み取られた最新の変更番号 (CN)。
トランザクションログの末尾_cn Oracle CDC インスタンスが再起動または復旧の場合に再配置される Oracle トランザクション ログの変更番号 (CN)。
current_cn ソース データベースにあることがわかっている最新の変更番号 (CN)。
ソフトウェア バージョン Oracle CDC Service の内部バージョン。
完了した取引 CDC が最後にリセットされてから処理されたトランザクションの数。
記述変更 SQL Server 変更テーブルに書き込まれた変更レコードの数。
変更点を読む ソース Oracle トランザクション ログから読み取られた変更レコードの数。
準備中の取引 cdc.xdbcdc_staged_transactions テーブルでステージングされている現在アクティブなトランザクションの数。

cdc.xdbcdc_trace

この表には、CDC インスタンスの操作に関する情報が含まれています。 このテーブルに格納されている情報には、エラー レコード、注目すべき状態の変更、およびトレース レコードが含まれます。 エラー情報も Windows イベント ログに書き込まれ、 cdc.xcbcdc_trace テーブルが使用できない場合に情報が使用可能になります。

次の表では、cdc.xdbcdc_traceテーブルの列について説明します。

アイテム 説明
タイムスタンプ(時刻印) トレース レコードが書き込まれた正確な UTC タイムスタンプ。
種類 次のいずれかの値が含まれます。

エラー

情報

ノード レコードが書き込まれたノードの名前。
ステータス 状態テーブルによって使用される状態コード。
サブステータス 状態テーブルで使用されるサブ状態コード。
ステータスメッセージ 状態テーブルによって使用されるステータス メッセージ。
データ エラーまたはトレース レコードにペイロード (破損したログ レコードなど) が含まれている場合の追加データ。

cdc.xdbcdc_staged_transactions

このテーブルには、トランザクションのコミットまたはロールバック イベントがキャプチャされるまで、大規模なトランザクションまたは実行時間の長いトランザクションの変更レコードが格納されます。 Oracle CDC Service は、キャプチャされたログ レコードをトランザクションコミット時間別に並べ替え、次に各トランザクションの時系列順に並べ替える。 同じトランザクションのログ レコードは、トランザクションが終了するまでメモリに格納され、ターゲット変更テーブルに書き込まれるか、または破棄されます (ロールバックの場合)。 使用可能なメモリ量が限られているため、大きなトランザクションはトランザクションが完了するまでcdc.xdbcdc_staged_transactionsテーブルに書き込まれます。 トランザクションは、実行時間が長い場合にもステージング テーブルに書き込まれます。 そのため、Oracle CDC インスタンスを再起動するときに、古い変更を Oracle トランザクション ログから再読み取りする必要はありません。

次の表では、 cdc.xdbcdc_staged_transactions テーブルの列について説明します。

アイテム 説明
取引ID ステージングされるトランザクションの一意のトランザクション識別子。
seq_num 現在のトランザクションの xcbcdc_staged_transactions 行の数 (0 から始まる)。
data_start_cn この行のデータの最初の変更の変更番号 (CN)。
data_end_cn この行のデータの最後の変更の変更番号 (CN)。
データ トランザクションのために準備された変更をBLOB形式で。

こちらもご覧ください

アトゥニティによるOracle向けのデータ変更キャプチャデザイナー