このセクションでは、Oracle CDC Service のいくつかの重要な概念について説明します。 このセクションに含まれる概念は次のとおりです。
-
このセクションでは、このデータベースに含まれるテーブルと、CDC にとってどのように重要であるかを説明します。
-
このセクションでは、CDC データベースについて簡単に説明します。 これらのデータベースは、Oracle CDC Designer コンソールを使用して作成されます。 CDC データベースの詳細については、CDC デザイナー コンソールのインストールに含まれているドキュメントを参照してください。
-
このセクションでは、Oracle CDC Service の構成に使用できるコマンド ライン コマンドについて説明します。
MSXDBCDC データベース
MSXDBCDC (Microsoft External-Database CDC) データベースは、SQL Server インスタンスで CDC Service for Oracle を使用する場合に必要な特殊なデータベースです。
このデータベースの名前は変更できません。 MSXDBCDC というデータベースがホスト SQL Server インスタンスに存在し、CDC Service for Oracle によって定義されたテーブル以外のテーブルが含まれている場合、ホスト SQL Server インスタンスは使用できません。
このデータベースの主な用途は次のとおりです。
SQL Server インスタンスに関連付けられている Oracle CDC Services のレジストリとして機能します。 この情報は、サービス構成および設計コンポーネントに使用され、アクティブなノードである異なるノード上の同じ名前による複数の CDC サービスの調整をサポートします。
SQL Server インスタンス、各インスタンスを処理する CDC サービス、および各インスタンスが使用する構成バージョンに含まれる Oracle CDC インスタンスのレジストリとして機能します。 この情報は、マスター データベースの sys.databases テーブルの is_cdc_enabled 列と同じです。 CDC サービスは、 dbo.xdbcdc_databases テーブルを定期的にスキャンして、CDC 構成またはキャプチャされたインスタンスの一覧に加えられた変更を識別します。
CDC インスタンスの作成と保守に役立つ sysadmin 所有のストアド プロシージャを保持します。 これらは、SQL Server CDC 機能の実装に使用されるシステム プロシージャに似ています。
MSXDBCDC データベースの作成
Oracle CDC Service を定義する前に、MSXDBCDC データベースを作成する必要があります。 SQL Server インスタンスに作成できる MSXDBCDC データベースは 1 つだけです。 MSXDBCDC データベースは、Oracle CDC 用に SQL Server データベースを準備するときに作成されます。 これを行うには、Oracle CDC Service 構成コンソールを使用するか、CDC Service 構成コンソールによって生成される作成スクリプトを実行します。
このデータベースの所有者は、SQL Server インスタンスでホストされているすべての Oracle CDC インスタンスを制御できる Oracle CDC サービス管理者です。
以下も参照してください。
MSXDBCDC データベース テーブル
このセクションでは、MSXDBCDC データベースの次の表について説明します。
dbo.xdbcdc_trace
次の表は、Oracle CDC Service のトレース情報を格納します。 このテーブルに格納されている情報には、重要な状態の変更とトレース レコードが含まれます。
Oracle CDC Service は、エラー レコードと一部の情報レコードを Windows イベント ログとトレース テーブルの両方に書き込みます。 場合によっては、トレース テーブルにアクセスできない場合があります。その場合、エラー情報にはイベント ログからアクセスできます。
次に、 dbo.xdbcdc_trace テーブルに含まれる項目について説明します。
| アイテム | 説明 |
|---|---|
| タイムスタンプ(時刻印) | トレース レコードが書き込まれた正確な UTC タイムスタンプ。 |
| 種類 | 次のいずれかの値が含まれます。 エラー 情報 跡 |
| ノード | レコードが書き込まれたノードの名前。 |
| ステータス | 状態テーブルによって使用される状態コード。 |
| サブステータス | 状態テーブルによって使用される副状態コード。 |
| ステータスメッセージ | 状態テーブルによって使用されるステータス メッセージ。 |
| ソース | トレース レコードを生成した Oracle CDC コンポーネントの名前。 |
| text_data | エラーまたはトレース レコードにテキスト ペイロードが含まれている場合の追加のテキスト データ。 |
| バイナリデータ | エラーまたはトレース レコードにバイナリ ペイロードが含まれている場合の追加のバイナリ データ。 |
Oracle CDC インスタンスは、変更テーブルの保持ポリシーに従って古いトレース テーブルの行を削除します。
dbo.xdbcdc_databases
このテーブルには、現在の SQL Server インスタンス内の CDC Service for Oracle CDC データベースの名前が含まれています。 各データベースは、Oracle CDC インスタンスに対応します。 Oracle CDC Service では、このテーブルを使用して、開始または停止するインスタンスと再構成するインスタンスを決定します。
次の表では、 dbo.xdbcdc_databases テーブルに含まれる項目について説明します。
| アイテム | 説明 |
|---|---|
| 名前 | SQL Server インスタンス内の Oracle データベースの名前。 |
| config_version | 対応する CDC データベース xdbcdc_config テーブルの最後の変更のタイムスタンプ (UTC)、またはこのテーブルの現在の行のタイムスタンプ (UTC)。 UPDATE トリガーは、この項目に GETUTCDATE() の値を適用します。 config_version を使用すると、CDC サービスは、構成の変更または有効化/無効化を確認する必要がある CDC インスタンスを識別できます。 |
| cdc_service_name | この項目は、選択した Oracle データベースを処理する Oracle CDC Service を決定します。 |
| 有効 | Oracle CDC インスタンスがアクティブ (1) か無効 (0) かを示します。 Oracle CDC Service が起動すると、有効化 (1) とマークされたインスタンスのみが開始されます。 注: Oracle CDC インスタンスは、再試行できないエラーが原因で無効になる可能性があります。 この場合、エラーが解決された後、インスタンスを手動で再起動する必要があります。 |
dbo.xdbcdc_services
次の表に、ホスト SQL Server インスタンスに関連付けられている CDC サービスの一覧を示します。 このテーブルは、CDC デザイナー コンソールによって、ローカル SQL Server インスタンス用に構成されている CDC サービスの一覧を決定するために使用されます。 また、CDC サービスでは、実行中の 1 つの Windows サービスのみが特定の Oracle CDC Service 名を処理するようにするためにも使用されます。
次に、 dbo.xdbcdc_databases テーブルに含まれるキャプチャ状態項目について説明します。
| アイテム | 説明 |
|---|---|
| cdc_service_name | Oracle CDC Service の名前 (Windows サービス名)。 |
| cdc_service_sql_login | SQL Server インスタンスに接続するために Oracle CDC Service によって使用される SQL Server ログインの名前。 cdc_serviceという名前の新しい SQL ユーザーが作成され、このログイン名に関連付けられ、サービスによって処理される各 CDC データベースのdb_ddladmin、db_datareader、およびdb_datawriter固定データベース ロールのメンバーとして追加されます。 |
| 参照カウント | この項目は、同じ Oracle CDC Service がインストールされているマシンの数をカウントします。 同じ名前の Oracle CDC サービスが追加されるたびに数値が増加し、そのサービスが削除されると数値が減少します。 カウンターが 0 に達すると、この行は削除されます。 |
| active_service_node | 現在 CDC サービスを処理している Windows ノードの名前。 サービスが正しく停止されると、この列は null に設定され、アクティブなサービスがなくなったことを示します。 |
| アクティブサービスのハートビート | この項目は、現在の CDC サービスを追跡して、まだアクティブかどうかを判断します。 この項目は、アクティブな CDC サービスの現在のデータベース UTC タイムスタンプで一定の間隔で更新されます。 既定の間隔は 30 秒ですが、間隔は構成可能です。 保留中の CDC サービスで、構成された間隔が経過した後にハートビートが更新されなかったことが検出されると、保留中のサービスはアクティブな CDC サービス ロールの引き継ぎを試みます。 |
| オプション | この項目では、トレースやチューニングなどのセカンダリ オプションを指定します。
これは name[=value][; ] の形式で記述されます。 オプション文字列では、ODBC 接続文字列と同じセマンティクスが使用されます。 オプションがブール値 (yes/no の値) の場合、値には名前のみを含めることができます。 トレースには、次の使用可能な値があります。 ほんとう オン 偽り オフ <class name>[,class name>] 既定値は false です。 service_heartbeat_interval は、サービスが active_service_heartbeat 列を更新する時間間隔 (秒単位) です。 既定値は 30 です。 最大値は 3600 です。 service_config_polling_interval は、CDC サービスが構成の変更を確認するためのポーリング間隔 (秒単位) です。 既定値は 30 です。 最大値は 3600 です。 sql_command_timeout は、SQL Server で動作するコマンド タイムアウトです。 既定値は 1 です。 最大値は 3600 です。 |
MSXDBCDC データベース ストアド プロシージャ
このセクションでは、MSXDBCDC データベースの次のストアド プロシージャについて説明します。
dbo.xcbcdc_reset_db(データベース名)
この手順では、Oracle CDC インスタンスのデータをクリアします。 これは次の方法で使用されます。
以前のデータを無視しながらデータ キャプチャを再開するには(たとえば、ソース データベースの復旧後や、Oracle トランザクション ログの一部が使用できない非アクティブな状態の後など)。
CDC 状態 (特に任意の cdc.*tables データ内) に破損がある場合。
dbo.xcbcdc_reset_dbプロシージャは、次のタスクを実行します。
CDC インスタンスを停止します (アクティブな場合)。
変更テーブル、 cdc_lsn_mapping テーブル、および cdc_ddl_history テーブルを切り捨てます。
cdc_xdbcdc_state テーブルをクリアします。
cdc_change_tableの各行のstart_lsn 列をクリアします。
dbo.xcbcdc_reset_dbプロシージャを使用するには、ユーザーが名前付き CDC インスタンス データベースのdb_owner データベース ロールのメンバーであるか、sysadmin または serveradmin 固定サーバー ロールのメンバーである必要があります。
CDC テーブルの詳細については、CDC デザイナー コンソールのヘルプ システムの CDC データベース を参照してください。
dbo.xdbcdc_disable_db(dbname)
dbo.xcbcdc_disable_db プロシージャは、次のタスクを実行します。
- MSXDBCDC.xdbcdc_databases テーブル内の選択した CDC データベースのエントリを削除します。
dbo.xcbcdc_disable_dbプロシージャを使用するには、名前が付けられている CDC インスタンスのdb_owner データベース ロールのメンバーであるか、sysadmin または serveradmin 固定サーバー ロールのメンバーである必要があります。
CDC テーブルの詳細については、CDC デザイナー コンソールのヘルプ システムの CDC データベースを参照してください。
dbo.xcbcdc_add_service(svcname,sqlusr)
dbo.xcbcdc_add_service プロシージャは、MSXDBCDC.xdbcdc_services テーブルにエントリを追加し、MSXDBCDC.xdbcdc_servicesテーブルのサービス名のref_count列に 1 ずつインクリメントします。 ref_countが 0 の場合、行が削除されます。
dbo.xcbcdc_add_service<サービス名、ユーザー名>プロシージャを使用するには、名前が付けられている CDC インスタンス データベースのdb_owner データベース ロールのメンバーであるか、sysadmin または serveradmin 固定サーバー ロールのメンバーである必要があります。
dbo.xdbcdc_start(dbname)
dbo.xdbcdc_start プロシージャは、選択した CDC インスタンスを処理して変更処理を開始する開始要求を CDC サービスに送信します。
dbo.xcdcdc_startプロシージャを使用するには、ユーザーが CDC データベースのdb_owner データベース ロールのメンバーであるか、SQL Server インスタンスの sysadmin ロールまたは serveradmin ロールのメンバーである必要があります。
dbo.xdbcdc_stop(dbname)
dbo.xdbcdc_stopプロシージャは、選択した CDC インスタンスを処理して変更処理を停止する停止要求を CDC サービスに送信します。
dbo.xcdcdc_stopプロシージャを使用するには、ユーザーが CDC データベースのdb_owner データベース ロールのメンバーであるか、SQL Server インスタンスの sysadmin ロールまたは serveradmin ロールのメンバーである必要があります。
CDC データベース
CDC サービスで使用される各 Oracle CDC インスタンスは、CDC データベースと呼ばれる特定の SQL Server データベースに関連付けられます。 この SQL Server データベースは、Oracle CDC Service に関連付けられている SQL Server インスタンスでホストされます。
CDC データベースには、特殊な cdc スキーマが含まれています。 Oracle CDC Service では、プレフィックス がxdbcdc_されたテーブル名でこのスキーマが使用されます。 このスキーマは、セキュリティと整合性の目的で使用されます。
Oracle CDC インスタンスと CDC データベースの両方が、Oracle CDC Designer コンソールを使用して作成されます。 CDC データベースの詳細については、Oracle CDC Designer コンソールのインストールに含まれているドキュメントを参照してください。
コマンド ラインを使用した CDC サービスの構成
コマンド ラインから Oracle CDC Service プログラム (xdbcdcsvc.exe) を操作できます。 CDC サービス プログラムは、ネイティブの 32 ビット/64 ビット Windows 実行可能ファイルです。
関連項目
CDC Service Command-Line インターフェイスを使用する方法
サービス プログラム コマンド
このセクションでは、CDC サービスの構成に使用される次のコマンドについて説明します。
設定
Configを使用して、スクリプトから Oracle CDC Service 構成を更新します。 このコマンドを使用すると、CDC サービス構成の特定の部分のみを更新できます (たとえば、非対称キーのパスワードがわからない接続文字列のみ)。 このコマンドは、コンピューター管理者が実行する必要があります。
Config コマンドの例を次に示します。
"<path>xdbcdcsvc.exe" config
<cdc-service-name>
[connect= <sql-server-connection-string>]
[key= <asym-key-password>]
[svcacct= <windows-account> <windows-password>]
[sqlacct= <sql-username> <sql-password>]
場所は:
cdc-service-name は、更新する CDC サービスの名前です。 これは必須パラメーターです。
sql-server-connection-string は、更新する接続文字列です。 接続文字列にスペースまたは引用符が含まれている場合は、二重引用符 (") で囲む必要があります。 埋め込まれた引用符は、引用符を 2 倍にすることでエスケープされます。
asym-key-password は、更新するパスワードです。
windows-account、 windows-password は、更新されるサービスの Windows アカウント資格情報です。
sql-username、 sql-password は、更新される SQL Server 認証資格情報です。 sqlacct に空のユーザー名と空のパスワードの両方がある場合、Oracle CDC Service は Windows 認証を使用して SQL Server に接続します。
注: スペースまたは二重引用符を含むパラメーターは、二重引用符 (") で囲む必要があります。 埋め込み二重引用符は二重引用符にする必要があります (たとえば、パスワードとして "A#B" D を 使用するには 、"A#B"" D と入力します)。
創造する
Createを使用して、スクリプトから Oracle CDC Service を作成します。 このコマンドは、コンピューター管理者が実行する必要があります。
Create コマンドの例を次に示します。
"<path>xdbcdcsvc.exe" create
<cdc-service-name>
[connect= "<sql-server-connection-string>"]
[key= <asym-key-password>]
[svcacct <windows-account> <windows-password>]
[sqlacct <sql-username> <sql-password>]
場所は:
cdc-service-name は、新しく作成されたサービスの名前です。 この名前のサービスが既にある場合、プログラムはエラーを返します。 長い名前やスペースを含む名前は使用しないでください。 文字 "/" と "\" は、サービス名に無効な文字です。 これは必須パラメーターです。
sql-server-connection-string は、新しい Oracle CDC Service に関連付けられている SQL Server インスタンスへの接続に使用する接続文字列です。
asym-key-password は、ソース データベースのログ マイニング資格情報の格納に使用される非対称キーを保護するパスワードです。
windows-account、 windows-password は、作成される Oracle CDC Service に関連付けられているアカウント名とパスワードです。
sql-username、 sql-password は、SQL Server インスタンスへの接続に使用される SQL Server アカウント名とパスワードです。 これらのパラメーターの両方が空の場合、CDC Service for Oracle は Windows 認証を使用して SQL Server に接続します。
注: スペースまたは二重引用符を含むパラメーターは、二重引用符 (") で囲む必要があります。 埋め込み二重引用符は二重にする必要があります (たとえば、パスワードとして "A#B" D を 使用するには 、"A#B"" D と入力します。
削除
Deleteを使用して、スクリプトから Oracle CDC Service をクリーンに削除します。 このコマンドは、コンピューター管理者が実行する必要があります。
Delete コマンドの例を次に示します。
"<path>xdbcdcsvc.exe" delete
<cdc-service-name>
場所は:
cdc-service-name は、削除する CDC サービスの名前です。
注: スペースまたは二重引用符を含むパラメーターは、二重引用符 (") で囲む必要があります。 埋め込み二重引用符は二重引用符にする必要があります (たとえば、パスワードとして "A#B" D を 使用するには 、"A#B"" D と入力します)。
こちらもご覧ください
CDC Service Command-Line インターフェイスを使用する方法
CDC 用に SQL Server を準備する方法