Oracle CDC Service は、xdbcdcsvc.exeプログラムを実行する Windows サービスです。 Oracle CDC Service は、同じコンピューター上で複数の Windows サービスを実行するように構成できます。それぞれ異なる Windows サービス名を持つサービスです。 1 台のコンピューター上に複数の Oracle CDC Windows サービスを作成することは、多くの場合、それらの間をより適切に分離するために、または各サービスが異なる SQL Server インスタンスを操作する必要がある場合に行われます。
Oracle CDC Service は、Oracle CDC Service 構成コンソールを使用して作成されるか、xdbcdcsvc.exe プログラムに組み込まれているコマンド ライン インターフェイスを使用して定義されます。 どちらの場合も、作成された各 Oracle CDC Service は単一の SQL Server インスタンス ( AlwaysOn セットアップでクラスター化またはミラー化される可能性があります) に関連付けられます。接続情報 (接続文字列とアクセス資格情報) はサービス構成の一部です。
Oracle CDC Service が開始されると、関連付けられている SQL Server インスタンスへの接続、処理する必要がある Oracle CDC インスタンスの一覧の取得、初期環境検証の実行が試行されます。 サービスの起動中のエラーと開始/停止情報は、常に Windows アプリケーション イベント ログに書き込まれます。 SQL Server への接続が確立されると、すべてのエラーと情報メッセージが、SQL Server インスタンスの MSXDBCDC データベースの dbo.xdbcdc_trace テーブルに書き込まれます。 起動時に行われるチェックの 1 つは、同じ名前の他の Oracle CDC Service が現在動作していないという確認です。 同じ名前のサービスが現在別のコンピューターから接続されている場合、Oracle CDC Service は待機ループに入り、他のサービスが切断されるのを待ってから Oracle CDC の作業を処理します。
Oracle CDC Service は、すべてのスタートアップ検証に合格すると、MSXDBCDC データベース内の dbo.xdbcdc_databases テーブルで、有効になっている Oracle CDC インスタンスをチェックします。 有効になっているすべての Oracle CDC インスタンスについて、サービスは、その Oracle CDC インスタンスを処理するサブプロセスを開始します。
Oracle CDC インスタンスは、起動すると、CDC インスタンスと同じ名前で SQL Server CDC データベースにアクセスし、前の実行から状態を取得します。 また、すべてが正常に実行されていることを確認します。 その後、変更の処理が再開されます。Oracle トランザクション ログの読み取りと CDC データベースへの変更の書き込み。
Oracle CDC Service は、MSXDBCDC データベース内の dbo.xdbcdc_tables テーブルを定期的に監視して、Oracle CDC インスタンスの構成に何らかの構成変更があったかどうかを判断します。 変更が見つかった場合、Oracle CDC Service は、変更の構成を確認する必要があることを Oracle CDC インスタンスに通知します。 Oracle CDC インスタンスが有効になっている間にキャプチャ インスタンスの追加や削除など、ほとんどの構成変更を適用できます。他の変更では Oracle CDC インスタンスの再起動が必要です。
Oracle CDC Designer コンソールを使用すると、変更が自動的に検出されます。 SQL を使用して Oracle CDC 構成を直接更新する場合は、Oracle CDC Service が構成の変更に気付くために、次の手順を呼び出す必要があります。
DECLARE @dbname nvarchar(128) = 'HRcdc'
EXECUTE [MSXDBCDC].[dbo].[xdbcdc_update_config_version] @dbname
GO
Oracle CDC インスタンス プロセスは、システム テーブル cdc.xdbcdc_state の状態を更新し、エラー情報を cdc.xdbcdc_trace テーブルに書き込みます。 xdbcdc_state テーブルは、Oracle CDC インスタンスの状態を監視するのに役立ちます。 up-toの日付状態、さまざまなカウンター(Oracleから読み取られた変更の数、SQL Serverに書き込まれた変更の数、コミットされたトランザクションの書き込み数、現在の実行中のトランザクション数など)およびレイテンシの指標を示します。
Oracle CDC インスタンスの構成は 、Oracle CDC Designer コンソールが使用するテーブルである cdc.xdbcdc_config テーブルに保存されます。 Oracle CDC インスタンスの構成全体がターゲット SQL Server インスタンスと CDC データベースに含まれているため、Oracle CDC インスタンスの SQL Server デプロイ スクリプトを作成できます。 これは、Oracle CDC Service 構成コンソールと Oracle CDC Designer コンソールを使用して行われます。
セキュリティに関する考慮事項
以下では、CDC Service for Oracle を操作するために必要なセキュリティ要件について説明します。
ソース Oracle データの保護
Oracle CDC サービスは、Oracle ソース データへのアクセスを必要とせず、ログ マイニング資格情報が顧客の Oracle テーブルに対する SELECT アクセス許可を付与しないようにすることで保護されます。
ソース Oracle 変更データの保護
Oracle CDC サービスには、Oracle データベース内の任意のテーブルに加えられた変更をサービスがキャプチャできるログ マイニング資格情報が用意されています。 変更データには、通常のテーブルに与える詳細なアクセス許可がないため、変更データにアクセスすると、組み込みの Oracle データ アクセス制御がバイパスされます。
キャプチャされたソース Oracle テーブルには、CDC データベース内の同じスキーマとテーブル名を持つ空のミラー テーブルがあります。 キャプチャされたデータは SQL Server キャプチャ インスタンスに格納され、SQL Server データベースからキャプチャされた変更に対して提供されるのと同じ保護を提供します。 キャプチャ インスタンスに関連付けられている変更データにアクセスするには、関連付けられているミラー テーブルのすべてのキャプチャ列への選択アクセス権をユーザーに付与する必要があります。 さらに、キャプチャ インスタンスの作成時にゲーティング ロールを指定する場合、呼び出し元も指定されたゲーティング ロールのメンバーである必要があります。 メタデータにアクセスするためのその他の一般的な変更データ キャプチャ関数には、パブリック ロールを介してすべてのデータベース ユーザーがアクセスできますが、通常、返されるメタデータへのアクセスは、基になるソース テーブルへの選択アクセスと、定義されたゲーティング ロールのメンバーシップによっても制御されます。
つまり、 sysadmin 固定サーバー ロールまたは db_owner 固定データベース ロールを持つユーザーは、キャプチャされたデータへのフル アクセス権を (既定で) 持ち、さらにアクセス権を付与するには、ロールを制限するか、キャプチャされた列への選択アクセス権を付与します。
ソース Oracle ログ マイニングクレデンシャルの保護
CDC データベース (cdc.xdbcdc_config テーブル) に格納されている Oracle CDC サービス構成には、ログ マイニング ユーザー名とそれに関連付けられているパスワードが含まれます。
ログ マイニング パスワードは、次のコマンドを使用して自動的に作成される固定名 xdbcdc_asym_key を持つ非対称キーによって暗号化されて格納されます。
USE [<cdc-database-name>]
CREATE ASYMMETRIC KEY xdbcdc_asym_key
WITH ALGORITHM = RSA_1024
ENCRYPTION BY PASSWORD = '<cdc-database-name><asym-key-password>'
別のアルゴリズムを使用する場合は、このキーを削除し、同じ名前で同じパスワードで暗号化された新しいキーを作成できます。
非対称キー パスワードは、 HKLM\Software\Microsoft\XDBCDCSVC\ のパスの下のレジストリに保存されるマスター パスワードです。 このキーには、ローカル管理者と Oracle CDC Windows サービス アカウントのみがアクセスできます。 キーには、非対称キー パスワードを格納した暗号化されたバイナリ値 AsymmetricKeyPassword が含まれています。 Oracle ログ マイニング資格情報にアクセスするには、このレジストリ キーへのアクセスが必要です。
ENCRYPTION BY PASSWORD 句を使用するには、パスワードが SQL Server インスタンスを実行しているコンピューターの Windows パスワード ポリシー要件を満たしている必要があります。 これを行うには、そのポリシーに従って非対称キーのパスワードを選択します。
非対称キー のパスワードが失われた場合は、Oracle CDC サービス デザイナーで各 Oracle CDC インスタンスのログ マイニング資格情報を再度指定する必要があります。
非対称キーは、CDC サービスが、この非対称キーを持たない Oracle インスタンス CDC データベースを検出したとき、またはキーが存在するがパスワードが一致しない場合に、CDC データベースに自動的に作成されます。
Oracle CDC サービス Windows サービスアカウント
Oracle CDC Windows サービスで使用されるサービス アカウントには、追加の特権は必要ありません。 このアカウントでは、Oracle Native Client API と SQL Server Native Client ODBC API の両方を使用できる必要があります。 また、レジストリ内のサービス構成キーにアクセスできる必要があります (この CDC Service 構成コンソールでは、そのための ACL を設定します)。