重要
Change Data Capture for Oracle by Attunity は現在非推奨です。 詳細については、お知らせを参照してください。
Oracle CDC インスタンスは、ターゲット SQL Server インスタンスの同名の SQL Server データベースに関連付けられます。 このデータベースは、Oracle CDC データベース (または CDC データベース) と呼ばれます。
CDC データベースは、Oracle CDC デザイナー コンソールを使用して作成および構成されます。このデータベースには次の要素が含まれています。
データベースで SQL Server CDC を有効にすると作成される
cdc
スキーマ。Oracle CDC インスタンスによって使用される一連の cdc.xdbcdc_xxxx テーブル。
ソース 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 データベースに cdc_service という名前のデータベース ユーザーが作成され、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 ゲーティング ロールを定義したりして、変更データにアクセスできるユーザーを制御できます。
ミラー テーブル
Oracle ソース データベースの各キャプチャ対象テーブル (<schema-name>.<table-name>) に対して、同じスキーマ名とテーブル名を持つ同様の空のテーブルが CDC データベースに作成されます。 スキーマ名が cdc
(大文字と小文字は区別されません) の Oracle ソース テーブルはキャプチャできません。 cdc
の SQL Server スキーマは SQL Server CDC のために予約されているためです。
ミラー テーブルは空です。データは格納されていません。 ミラー テーブルは、Oracle CDC インスタンスによって使用される標準の SQL Server CDC インフラストラクチャを有効にするために使用されます。 ミラー テーブルに対してデータの挿入や更新が行われないようにするために、UPDATE、DELETE、および INSERT のすべての操作が PUBLIC に対して拒否されます。 これにより、ミラー テーブルを変更できないことが保証されます。
変更データへのアクセス
キャプチャ インスタンスに関連付けられている変更データへのアクセスは、 SQL Server のセキュリティ モデルによって制御されます。このセキュリティ モデルでは、ユーザーが変更データにアクセスするには、関連付けられているミラー テーブルのすべてのキャプチャ対象列に対する select
アクセスが許可されている必要があります (元の Oracle テーブルへのアクセスが許可されていても、 SQL Serverの変更テーブルにはアクセスできません)。 SQL Server のセキュリティ モデルについては、「 セキュリティ モデル」を参照してください。
また、キャプチャ インスタンスの作成時にゲーティング ロールが指定されている場合、呼び出し元は、指定されたゲーティング ロールのメンバーである必要もあります。 メタデータにアクセスするためのその他の一般的な変更データ キャプチャ関数には、PUBLIC ロールですべてのデータベース ユーザーがアクセスできます。ただし、通常、返されるメタデータへのアクセスは、基になるソース テーブルに対する select アクセス、および定義されたすべてのゲーティング ロールのメンバーシップに基づいて制限されます。
変更データを読み取るには、キャプチャ インスタンスの作成時に SQL Server の CDC コンポーネントによって生成される特殊なテーブル ベース関数を呼び出します。 この関数の詳細については、「 変更データ キャプチャの関数 (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 関数の詳細については、「 変更データ キャプチャの関数 (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_time
および tran_end_time
) に格納される変更の時刻が UTC 時刻になります (通常の SQL Server CDC ではローカル時刻が格納されます)。 これにより、lsn_time_mapping に格納されているデータが夏時間の変化による影響を受けないことが保証されます。
cdc.xdbcdc_config
このテーブルには、Oracle CDC インスタンスの構成データが含まれています。 このテーブルは、CDC デザイナー コンソールを使用して更新されます。 このテーブルに含まれる行は 1 つだけです。
次の表に、 cdc.xdbcdc_config テーブルの列を示します。
アイテム | 説明 |
---|---|
version | CDC インスタンスの構成のバージョンを追跡します。 このテーブルが更新されたり、キャプチャ インスタンスが追加または削除されたりするたびに更新されます。 |
connect_string | Oracle の接続文字列です。 基本的な例を以下に示します。<server>:<port>/<instance> (例: erp.contoso.com:1521/orcl )接続文字列で Oracle Net 接続記述子を指定することもできます (例: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=erp.contoso.com) (PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=orcl))) )。ディレクトリ サーバーまたは tnsnames を使用している場合は、接続文字列を接続の名前にすることができます。 Oracle の接続文字列の詳細については、https://go.microsoft.com/fwlink/?LinkId=231153 を参照してください。Oracle CDC Service によって使用される Oracle Instant Client の Oracle データベース接続文字列について詳しく説明されています。 |
use_windows_authentication | 次のいずれかのブール値です。 0: 認証のために Oracle のユーザー名とパスワードを指定します (既定値)。 1: Windows 認証を使用して Oracle データベースに接続します。 このオプションは、Oracle データベースが Windows 認証と連動するように構成されている場合にのみ使用できます。 |
username | ログ マイニング Oracle データベース ユーザーの名前です。 use_windows_authentication = 0の場合のみ必須です。 |
パスワード | ログ マイニング Oracle データベース ユーザーのパスワードです。 use_windows_authentication = 0の場合のみ必須です。 |
transaction_staging_timeout | メモリに保持されている、コミットされていない Oracle トランザクションが cdc.xdbcdc_staged_transactions テーブルに書き込まれるまでの時間 (秒) です。 既定値は 120 秒です。 |
memory_limit | データをメモリにキャッシュするために使用できるメモリの量の上限 (MB) です。 この値を低くすると、 cdc.xdbcdc_staged_transactions テーブルに書き込まれるトランザクションが増加します。 既定値は 50 MB です。 |
options | name[=value][; ] という形式のオプションのリストです。二次的なオプション (トレース、チューニングなど) を指定するために使用されます。 使用できるオプションについては、次の表を参照してください。 |
次の表では、使用可能なオプションについて説明しています。
Name | Default | Min | Max | 静的 | 説明 |
---|---|---|---|---|---|
trace | False | - | - | False | 使用できる値は次のとおりです。 True False on オフ |
cdc_update_state_interval | 10 | 1 | 120 | False | トランザクションに割り当てられるメモリのチャンクのサイズ (KB) です (トランザクションは複数のチャンクを割り当てることができます)。 cdc.xdbcdc_config テーブルの memory_limit 列を参照してください。 |
target_max_batched_transactions | 100 | 1 | 1000 | True | SQL Server の CT テーブルの更新で 1 つのトランザクションとして処理できる Oracle トランザクションの最大数です。 |
target_idle_lsn_update_interval | 10 | 0 | 1 | False | キャプチャ対象テーブルで操作が行われていない場合に lsn_time_mapping テーブルを更新する間隔 (秒) です。 |
trace_retention_period | 24 | 1 | 24*31 | False | メッセージをトレース テーブルに保持する時間 (時間) です。 |
sql_reconnect_interval | 2 | 2 | 3600 | False | SQL Serverへの再接続が行われるまでの時間 (秒) です。 SQL Server クライアントの接続のタイムアウトに加えて使用されます。 |
sql_reconnect_limit | -1 | -1 | -1 | False | SQL Server への再接続の最大回数です。 既定値 -1 は、プロセスが停止するまで再接続しようとすることを意味します。 |
cdc_restart_limit | 6 | -1 | 3600 | False | ほとんどの場合、CDC サービスは、異常終了した CDC インスタンスを自動的に再起動します。 このプロパティは、1 時間に何回失敗したらインスタンスの再起動を中止するかを定義します。 値 -1 は、インスタンスが常に再起動されることを意味します。 構成テーブルが更新された場合は、インスタンスの再起動が再開されます。 |
cdc_memory_report | 0 | 0 | 1000 | False | パラメーターの値が変更された場合、CDC インスタンスは、トレース テーブルにそのメモリのレポートを出力します。 |
target_command_timeout | 600 | 1 | 3600 | False | SQL Serverを操作するコマンドのタイムアウトです。 |
source_character_set | - | - | - | True | Oracle データベースのコード ページの代わりに使用する特定の Oracle エンコードを設定できます。 文字データで使用されている実際のエンコードが Oracle データベースのコード ページのエンコードと異なる場合に便利です。 |
source_error_retry_interval | 30 | 1 | 3600 | False | 接続エラー、システム テーブル間の同期の一時的な喪失など、いくつかのエラーで再試行の前に使用されます。 |
source_prefetch_size | 100 | 1 | 10000 | True | プリフェッチ バッチのサイズです。 |
source_max_tables_in_query | 100 | 1 | 10000 | True | WHERE 句のテーブルの最大数です。この数を超えると、テーブルをフィルター処理せずに Oracle ログが読み取られます。 |
source_read_retry_interval | 2 | 1 | 3600 | False | ソースが Oracle トランザクション ログの読み取りを EOF で再試行するまでの時間です。 |
source_reconnect_interval | 30 | 1 | 3600 | False | ソース データベースへの再接続が試行されるまでの時間 (秒) です。 |
source_reconnect_limit | -1 | -1 | False | ソース データベースへの再接続の最大回数です。 既定値 -1 は、プロセスが停止するまで再接続しようとすることを意味します。 | |
source_command_timeout | 30 | 1 | 3600 | False | Oracle を操作する接続のタイムアウトです。 |
source_connection_timeout | 30 | 1 | 3600 | False | SQL Serverを操作する接続のタイムアウトです。 |
trace_data_errors | True | - | - | False | Boolean です。 True は、データの変換と切り捨てのエラーをログに記録することを示します。 |
CDC_stop_on_breaking_schema_changes | False | - | - | False | Boolean です。 True は、重大なスキーマ変更が検出されたときに停止することを示します。 False は、ミラー テーブルとキャプチャ インスタンスを削除することを示します。 |
source_oracle_home | - | - | False | 特定の Oracle ホーム パスか、CDC インスタンスが Oracle への接続に使用する Oracle ホーム名に設定できます。 |
cdc.xdbcdc_state
このテーブルには、Oracle CDC インスタンスの永続化された状態に関する情報が含まれています。 キャプチャ状態は、復旧およびフェールオーバーのシナリオで使用されるほか、状態の監視にも使用されます。
次の表に、 cdc.xdbcdc_state テーブルの列を示します。
アイテム | 説明 |
---|---|
status | 現在の Oracle CDC インスタンスの現在の状態コードです。 CDC の現在の状態を表します。 |
sub_status | 現在の状態に関する追加情報を提供する二次的な状態です。 |
active | 次のいずれかのブール値です。 0: Oracle CDC インスタンス プロセスはアクティブではありません。 1: Oracle CDC インスタンス プロセスはアクティブです。 |
error | 次のいずれかのブール値です。 0: Oracle CDC インスタンス プロセスはエラー状態ではありません。 1: Oracle CDC インスタンスはエラー状態です。 |
status_message | エラーまたは状態の説明を表す文字列です。 |
timestamp | キャプチャ状態が最後に更新された時刻 (UTC) のタイムスタンプです。 |
active_capture_node | 現在 Oracle CDC Service と (Oracle トランザクション ログを処理している) Oracle CDC インスタンスを実行しているホストの名前です (クラスターのノードの場合があります)。 |
last_transaction_timestamp | 変更テーブルに最後のトランザクションが書き込まれた時刻 (UTC) のタイムスタンプです。 |
last_change_timestamp | 最新の変更レコードがソース Oracle トランザクション ログから読み取られた時刻 (UTC) のタイムスタンプです。 このタイムスタンプは、CDC プロセスの現在の待機時間を識別するのに役立ちます。 |
transaction_log_head_cn | Oracle トランザクション ログから読み取られた最新の変更番号 (CN) です。 |
transaction_log_tail_cn | 再起動や復旧が行われた場合に Oracle CDC インスタンスが戻される Oracle トランザクション ログの変更番号 (CN) です。 |
current_cn | ソース データベースで確認されている最新の変更番号 (CN) です。 |
software_version | Oracle CDC Service の内部バージョンです。 |
completed_transactions | CDC が最後にリセットされた後に処理されたトランザクションの数です。 |
written_changes | SQL Server の変更テーブルに書き込まれた変更レコードの数です。 |
read_changes | ソース Oracle トランザクション ログから読み取られた変更レコードの数です。 |
staged_transactions | cdc.xdbcdc_staged_transactions テーブルにステージングされている、現在アクティブなトランザクションの数です。 |
cdc.xdbcdc_trace
このテーブルには、CDC インスタンスの操作に関する情報が含まれています。 このテーブルに格納される情報には、エラー レコード、重要な状態変更、トレース レコードが含まれます。 エラーの情報は、 cdc.xcbcdc_trace テーブルを使用できない場合にも使用できるように、Windows イベント ログにも書き込まれます。
次の表に、cdc.xdbcdc_trace テーブルの列を示します。
アイテム | 説明 |
---|---|
timestamp | トレース レコードが書き込まれたときの正確な UTC タイムスタンプ。 |
type | 次のいずれかの値が格納されます。 ERROR INFO TRACE |
node | レコードが書き込まれたノードの名前。 |
status | 状態テーブルで使用される状態コード。 |
sub_status | 状態テーブルで使用される副状態コード。 |
status_message | 状態テーブルで使用される状態メッセージ。 |
data | エラー レコードまたはトレース レコードにペイロードが含まれている場合の追加データ (壊れたログ レコードなど)。 |
cdc.xdbcdc_staged_transactions
このテーブルには、大きなトランザクションや実行時間の長いトランザクションの変更レコードが、トランザクションのコミットまたはロールバックのイベントがキャプチャされるまで格納されます。 キャプチャされたログ レコードは、まずトランザクションのコミット時間順に並べ替えられ、さらにトランザクションの発生順に並べ替えられます。 同じトランザクションのログ レコードは、トランザクションが終了するまでメモリに格納された後、ターゲット変更テーブルに書き込まれるか、破棄されます (ロールバックの場合)。 使用できるメモリの量は限られているため、大きなトランザクションは、完了するまで cdc.xdbcdc_staged_transactions テーブルに書き込まれます。 トランザクションは、実行時間が長い場合にもこのステージング テーブルに書き込まれます。 したがって、Oracle CDC インスタンスが再起動しても、Oracle トランザクション ログから古い変更を再び読み取る必要はありません。
次の表に、 cdc.xdbcdc_staged_transactions テーブルの列を示します。
アイテム | 説明 |
---|---|
transaction_id | ステージングされるトランザクションの一意なトランザクション識別子です。 |
seq_num | 現在のトランザクションの xcbcdc_staged_transactions 行の (0 から始まる) 番号です。 |
data_start_cn | この行のデータの最初の変更の変更番号 (CN) です。 |
data_end_cn | この行のデータの最後の変更の変更番号 (CN) です。 |
data | トランザクションのステージングされた変更です (BLOB 形式)。 |