背景
obcdcが外部にサービスを提供して以来、プライマリデータベースのデータのみの同期をサポートしてきました。しかし、お客様環境ではobcdcがスタンバイデータベースのデータを利用するニーズがあります。具体的なケースは以下のとおりです:
ローカルデータベースデータの利用ニーズ:obcdcのデータを利用するアプリケーションとデータベースのプライマリデータベースが地理的に離れている場合、業務上、ローカルのスタンバイデータベースから増分トランザクションデータを優先的に利用したいというニーズがあります。
プライマリ/スタンバイ切り替え後のデータ利用能力:obcdcはプライマリデータベースのみを同期でき、一つのobcdcは一つのクラスタのデータのみを同期できます。プライマリ/スタンバイデータベースが異なるクラスタにあり、かつプライマリ/スタンバイ切り替えが発生した場合、データリンクが切断されます。
obcdcの実行がプライマリデータベースへの影響を軽減するものの、一部のお客様は依然としてobcdcを用いてスタンバイデータベースを同期し、プライマリデータベースへの潜在的な影響を軽減したいと考えています。
上記の問題を解決するため、obcdcはスタンバイデータベースのデータを直接利用する機能を提供します。
機能説明
オンラインモードでは、tb_white_listを設定し、同期対象のテナントの現在のテナント名を同期ホワイトリストに追加する必要があります。オフラインモード(refresh_mode=data_dictおよびarchive_destなどのアーカイブメタ情報が設定されている場合)では、この制限はありません。
起動タイムポイントの制限:
起動時、obcdcソーステナントの状態は
NORMALである必要があります。起動タイムポイントに対応する時刻において、obcdcソーステナントの状態は
NORMALである必要があります。テナントの
RESTORE_SCN(ユーザー指定の復元タイムポイントで、システムテナントでCDB_OB_RESTORE_HISTORYビューを参照して取得できます)以下の起動タイムポイントはサポートされていません。RECOVERY_UNTIL_SCN(現在のテナントの最大復元タイムポイントで、DBA_OB_TENANTSビューを参照して取得できます)を超える起動タイムポイントはサポートされていません。もし起動タイムポイントがテナントの
REPLAYABLE_SCN(現在のテナントで再生可能なスナップショットバージョンで、DBA_OB_TENANTSビューを参照して取得できます)を超える場合、テナントのREPLAYABLE_SCNが起動タイムポイントを上回るまで再試行し、その後に起動に成功します。再試行がタイムアウトするとプロセスは終了します。もし起動タイムポイントが
READABLE_SCN(現在のテナントで読み取り可能なスナップショットバージョンで、DBA_OB_TENANTSビューを参照して取得できます)を超える場合、テナントのREADBALE_SCNが起動タイムポイントを上回るまで再試行し、その後に起動に成功します。再試行がタイムアウトするとプロセスは終了します。ディクショナリモードでは、最新のベースライン生成時間(
SNAPSHOT_SCN、システムテナントでCDB_OB_DATA_DICTIONARY_IN_LOGビューを参照するか、通常テナントでDBA_OB_DATA_DICTIONARY_IN_LOGビューを参照して取得します)を取得します。取得したSNAPSHOT_SCNも上記のすべての起動タイムポイントの制約を満たす必要があります。そうでない場合もプロセスは終了します。もし起動タイムポイントがトランザクションの途中に位置する場合、obcdcはそのトランザクションの起動タイムポイント以前のすべてのclogログを巻き戻す必要があります。そのトランザクションの最初のclogログも上記のすべての制約を満たす必要があります。
よくある質問
ここでは、obcdcのスタンバイデータベース同期機能に関連するよくある質問を挙げます。obcdcの汎用的な問題については、ここでは述べません。
obcdc起動失敗、プロセス終了
主要な現象:
obcdcプロセスが終了し、かつobcdcログが回収されていない状態では、obcdc起動成功の鍵となるログ
init obcdc succが見つかりません。いずれかの重要なログが存在する場合:
起動時点でサービスを提供していないクログログポイントに関する重要なログ
[ADD_TENANT][FAIL][clog_not_SERVE]を確認します。起動時点が読み取り不可な重要なログ
[ADD_TENANT][FAIL][NOT_READABLE]を確認します。データディクショナリの
SNAPSHOT_SCNがサービス範囲外であることを示す重要なログ[ADD_TENANT][DATA_DICT][REFRESH_BASELINE][FAIL][clog_not_SERVE][LOG_AT_DICT_SNAPSHOT]を確認します。
問題の原因:obcdcの起動時点が上記の機能説明に記載されている制約を満たしていません。
解決策:起動時点を調整して制約に適合させるか、またはプライマリデータベースからのデータ同期に切り替えます。
obcdcは正常に起動したが、しばらく稼働した後にプロセスが終了する
主要な現象:
obcdcの初期化が成功しています。具体的には、obcdcのログが回収されていない状態で、起動成功を示す重要なログ
init obcdc succが確認できるか、定期的にTLOG.COMMITTERモジュールのHEARTBEATキーワードログが更新されているのが確認できます。[MISS_LOG][HANDLE_DONE]ログが存在し、その後に続くretがOB_SUCCESSではない場合。
問題の原因:起動時点が長時間トランザクションの途中にあるため、obcdcはそのトランザクションを完全に再取得する必要があります。このトランザクションの前方のログポイントが RESTORE_SCN より小さい場合、obcdcはそのログを取得できず、一定時間のリトライ後にプロセスを終了します。
解決策:起動時点をリセット(後退)するか、またはプライマリデータベースからのデータ同期に切り替えます。