機能紹介
OceanBaseデータベースはV4.1.0.0からデータディクショナリ機能をサポートしています。データディクショナリはテナントレベルのサービスであり、ログストリーム情報やデータベース・テーブルのメタ情報など、OceanBaseクラスタのテナントのメタ情報をログ(clog)に永続化する機能です。現段階では、データリンク(obcdc)がログのみに依存してテナントのメタ情報を取得できるようにすることが主な用途です。
データディクショナリはユーザーテナントにのみサービスを提供し、PALFを通じて通常テナントのシステムログストリーム(SYS_LS)に永続化されます。ユーザーテナント作成後、データディクショナリサービスは自動的に起動し、テナントのSYS_LSのLEADERレプリカ上で実行されます。
ログアーカイブサービスが有効な場合、非同期のデータディクショナリ生成タスクが自動的に1回トリガーされます。OceanBaseデータベースは、テナントレベルのパラメータ dump_data_dictionary_to_log_interval(V4.1.0.0以降サポート)および DBMS_DATA_DICT システムパッケージを使用して定期的にデータディクショナリの生成をスケジュールできます。DBMS_DATA_DICT システムパッケージを使用したスケジュール生成を推奨します。
OceanBaseデータベースはV4.2.0.0から、DBA/CDBビューを使用してデータディクショナリの生成履歴を記録できるようになりました。システムテナントでは CDB_OB_DATA_DICTIONARY_IN_LOG ビューを、通常テナントでは DBA_OB_DATA_DICTIONARY_IN_LOG ビューを参照することで、ディクショナリの位置情報を取得できます。
注意
テナントのメタ情報の複雑さによって、データディクショナリの生成時間は数秒から数時間まで異なります。パラメータを設定する際には、テナントのメタ情報の複雑さを考慮する必要があります。生成サイクルが短すぎると、データディクショナリの生成が頻繁に行われ、データディクショナリの生成が単一スレッドタスクであるため、そのスレッドが長時間占有されることになります。
データディクショナリの生成処理中、呼び出されるスキーマサービスが追加のメモリを消費します。テナントのスキーマ数が多い場合やテナントのメモリ構成が小さい場合、メモリ使用量が顕著になることがあります。
使用方法
obcdcでは、設定ファイルに meta_data_refresh_mode を設定することで、ログ内のデータディクショナリを使用してスキーマ情報を解析するかどうかを選択できます。online に設定すると、SchemaServiceを通じてOBServerノードにスキーマ情報を照会することを意味し、OBServerノードへのアクセスが可能である必要があります。data_dict に設定すると、ログ内のデータディクショナリを使用してスキーマ情報を解析することを意味します。
注意
obcdcは、OceanBaseデータベースV4.2以降のバージョンのデータ同期時にユーザー設定を無視し、data_dictモードを強制的に使用します。onlineモードを使用する場合は、skip_ob_version_COMPAT_checkパラメータを1に追加で変更する必要があります。
例えば、設定ファイルに以下の内容を追加します。obcdc設定ファイルの詳細については、設定ファイルの例を参照してください。
meta_data_refresh_mode=data_dict
設定後はobcdcホストプロセスを再起動する必要があります。例えば、以下のコマンドを使用して起動します:
[admin@test oceanbase]$ ./bin/obcdc_tailf -f libobcdc.conf -D output.txt
ここでは、設定ファイルの相対パスを libobcdc.conf とし、obcdcが処理した出力データを output.txt ファイルに保存する例を示します。実際の状況に応じて、設定ファイル名と出力データの保存ファイル名を変更する必要があります。obcdc_tailf コマンドの詳細については、obcdc_tailfを参照してください。
関連ドキュメント
ログアーカイブサービスの紹介については、ログアーカイブの章を参照してください。
CDB_OB_DATA_DICTIONARY_IN_LOGビューの詳細については、oceanbase.CDB_OB_DATA_DICTIONARY_IN_LOGを参照してください。
DBA_OB_DATA_DICTIONARY_IN_LOGビューの詳細については、oceanbase.DBA_OB_DATA_DICTIONARY_IN_LOG(MySQLモード)およびDBA_OB_DATA_DICTIONARY_IN_LOG(Oracleモード)を参照してください。