ログアーカイブに基づくフィジカル・スタンバイ・データベースであっても、ネットワークに基づくフィジカル・スタンバイ・データベースであっても、スタンバイテナントに対してログ復元ソースを設定する必要があります。どちらのデプロイメント方式でも、ログ復元ソースはいつでも必要に応じて動的に変更できるほか、あるログ復元ソースから別のログ復元ソースへ切り替えることも可能です。このセクションでは、ログアーカイブに基づくフィジカル・スタンバイ・データベースとネットワークに基づくフィジカル・スタンバイ・データベースのそれぞれのシナリオにおいて、ログ復元ソースの設定方法について説明します。
注意事項
あるログ復旧ソースから別のログ復旧ソースに変更する際は、変更前後でのログ復旧ソースがスタンバイテナント作成時に指定したソーステナントと一致している必要があります。つまり、ソーステナントのログアーカイブを使用するか、直接ソーステナントを指す必要があります。変更前後でのログ復旧ソースが一致しない場合、スタンバイテナントのデータに誤りが生じ、復旧できなくなるため、新しいスタンバイテナントを再作成する必要があります。
ログアーカイブに基づくフィジカル・スタンバイ・データベースのシナリオ
物理バックアップ復旧(ログ付き)機能を使用して作成されたスタンバイテナントは、RESTORE コマンドでスタンバイテナントを復旧する際に既にデフォルトの復旧ソースが設定されています。つまり、デフォルトの復旧ソースはメインテナントまたはソース側のスタンバイテナントのログアーカイブ宛先となっているため、通常は追加の設定は不要です。ログ復旧ソースをメインテナントまたはソース側のスタンバイテナントに直接変更する必要がある場合は、本記事のネットワークに基づくフィジカル・スタンバイ・データベースのシナリオの内容を参照して再度設定してください。
他の方法(空のスタンバイテナントの作成やBACKUP DATABASE PLUS ARCHIVELOG機能を使用したスタンバイテナントの作成)で作成されたスタンバイテナントの場合、ログ復旧ソースをメインテナントのログアーカイブに設定する必要がある場合は、以下の手順に従ってログ復旧ソースを手動で設定する必要があります。
注意
アーカイブメディアがオブジェクトストレージ(例:Alibaba Cloud OSS、Azure Blob、AWS S3、およびS3プロトコル互換のオブジェクトストレージ)の場合、フィジカル・スタンバイ・データベースの実行中にメインテナントまたはソース側のスタンバイテナントがバックアップメディアのキー情報を変更した場合、以下の手順に従ってログ復旧ソースを再設定する必要があります。
管理者ユーザーとしてスタンバイテナント、またはスタンバイテナントが属するクラスタの
sysテナントにログインします。以下のコマンドを実行して、スタンバイテナントの復旧ソースをメインテナントのアーカイブ宛先に設定します。
スタンバイテナントが属するクラスタの
sysテナントでスタンバイテナントの復旧ソースを設定ALTER SYSTEM SET LOG_RESTORE_SOURCE ='LOCATION=archive_path' TENANT = tenant_name;スタンバイテナントで自身の復旧ソースを設定
ALTER SYSTEM SET LOG_RESTORE_SOURCE ='LOCATION=archive_path';
ここで、
LOCATIONプロパティはメインテナントのアーカイブ宛先を指定するために使用されます。以下は、アーカイブメディアがOSSまたはNFSの場合を例に示しています。
Alibaba OSSNFSプライマリテナントのアーカイブメディアがOSSの場合、スタンバイテナントが存在するクラスタの
sysテナントまたはスタンバイテナントでログ復元ソースを設定する例は以下のとおりです。obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE ='location=oss://oceanbase-test-bucket/backup/archive?host=****.aliyun-inc.com&access_id=****&access_key=****' TENANT = standby_tenant;obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE ='location=oss://oceanbase-test-bucket/backup/archive?host=****.aliyun-inc.com&access_id=****&access_key=****';プライマリテナントのアーカイブメディアがNFSの場合、スタンバイテナントが存在するクラスタの
sysテナントまたはスタンバイテナントでログ復元ソースを設定する例は以下のとおりです。obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE ='location=file:///data/1/sh_archive' TENANT = standby_tenant;obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE ='location=file:///data/1/sh_archive';
ネットワークに基づくフィジカル・スタンバイ・データベースのシナリオ
空のスタンバイテナントを作成する方法で作成されたスタンバイテナントは、CREATE STANDBY TENANT コマンドを実行する際に LOG_RESTORE_SOURCE パラメータでデフォルトのログ復元ソースが設定されており、デフォルトの復元ソースはプライマリテナントに直接接続されているため、通常は追加の設定は不要です。ただし、ログ復元ソースをプライマリテナントのログアーカイブを使用するよう変更する必要がある場合は、本記事の ログアーカイブに基づくフィジカル・スタンバイ・データベースのシナリオ を参照してログ復元ソースを再設定する必要があります。
他の方法(バックアップ復旧(ログ付き)機能を使用してスタンバイテナントを作成する方法、および BACKUP DATABASE PLUS ARCHIVELOG 機能を使用してスタンバイテナントを作成する方法)で作成されたスタンバイテナントについては、ログ復元ソースをプライマリテナントまたはソース側のスタンバイテナントに設定する必要がある場合、以下の手順を参照して ALTER SYSTEM SET LOG_RESTORE_SOURCE コマンドを使用してログ復元ソースを手動で設定する必要があります。
ステップ1:アクセスビュー専用ユーザーの作成
スタンバイテナントがプライマリテナントまたはソース側のスタンバイテナントに接続する際、プライマリテナントまたはソース側のスタンバイテナントの一部のシステムビューにアクセスする必要があるため、これらのシステムビューに対するクエリ権限を持つアクセスビュー専用ユーザーが必要です。既存のプライマリテナントまたはソース側のスタンバイテナントに関連権限を持つユーザーを提供することも、プライマリテナントまたはソース側のスタンバイテナント上で現在のスタンバイテナント専用に新しいユーザーを作成して関連権限を付与することもできます。
スタンバイテナントがアクセスする必要があるシステムビューは以下の通りです:
GV$OB_LOG_STAT:プライマリテナントのマシンリスト、レプリカサービスのログストリームLSN範囲、ロール(リーダーかどうか)などの情報を取得するために使用されます。GV$OB_LOG_STATビューの詳細については、GV$OB_LOG_STATを参照してください。GV$OB_UNITS:プライマリテナントのすべてのUnit情報を照会し、レプリカの状態、ゾーン、リージョンなどの情報を取得します。これは、フィルタリング、テナントマシン接続の取得およびメンテナンスに使用されます。GV$OB_UNITSビューの詳細については、GV$OB_UNITSを参照してください。GV$OB_PARAMETERS: プライマリテナントのcluster_id、tenant_idなどのサービスに必須のメタ情報を照会するために使用されます。GV$OB_PARAMETERSビューの詳細については、GV$OB_PARAMETERSを参照してください。DBA_OB_ACCESS_POINT: アクセスポイント情報を取得するために使用されます。プライマリテナントの移行レプリケーション、災害復旧などのシナリオでは、アクセスポイントが変更された場合、スタンバイテナントは自動的にそれを検出でき、ユーザーが手動で変更する必要はありません。DBA_OB_ACCESS_POINTビューの詳細については、DBA_OB_ACCESS_POINTを参照してください。DBA_OB_TENANTS:プライマリテナントの互換モードを取得します。DBA_OB_TENANTSビューの詳細については、DBA_OB_TENANTSを参照してください。DBA_OB_LS: プライマリテナントのログストリームリストとログストリームの状態を取得します。DBA_OB_LSビューの詳細については、DBA_OB_LSを参照してください。
アクセスビュー専用ユーザーの作成と権限付与の具体的な操作は以下の通りです。
注意
OceanBaseデータベースのユーザー名と権限情報は、プライマリテナントとスタンバイテナント間で同期されるため、スタンバイテナント自身ではユーザーの作成や権限の付与が許可されていません。したがって、現在のスタンバイテナントのソースが別のスタンバイテナントの場合、対応するプライマリテナント上でアクセスビュー専用ユーザーを作成し、権限を付与する必要があります。
MySQLモード
管理者ユーザーでプライマリテナントにログインします。
以下のコマンドを実行して、新しいユーザーを作成します。
obclient [oceanbase]> CREATE USER rep_user IDENTIFIED BY '******';ユーザーに権限を付与します。
以下の例では、
oceanbaseデータベース内のすべてのテーブルに対するSELECT権限をこのユーザーに付与します。または、oceanbaseデータベース内のGV$OB_LOG_STAT、GV$OB_UNITS、GV$OB_PARAMETERS、DBA_OB_ACCESS_POINT、DBA_OB_TENANTS、DBA_OB_LSなどのビューに対するSELECT権限のみを付与することもできます。obclient [oceanbase]> GRANT SELECT ON oceanbase.* TO rep_user;
Oracleモード
管理者ユーザーでプライマリテナントにログインします。
新しいユーザーを作成します。
obclient [SYS]> CREATE USER rep_user IDENTIFIED BY '******';ロール
STANDBY_REPLICATIONを新しいユーザーrep_userに付与します。STANDBY_REPLICATIONはシステムのデフォルトロールであり、このロールにはデフォルトでCREATE SESSIONシステム権限と以下のビューに対するクエリ権限が含まれています:- GV$OB_LOG_STAT
- GV$OB_UNITS
- GV$OB_PARAMETERS
- DBA_OB_ACCESS_POINT
- DBA_OB_TENANTS
- DBA_OB_LS
- DBA_OB_LS_HISTORY
ステートメントは次のとおりです:
obclient [SYS]> GRANT STANDBY_REPLICATION TO rep_user;
ステップ2:プライマリテナントまたはソース側のスタンバイテナントのアクセスポイント情報を取得する
ネットワークベースのフィジカル・スタンバイ・データベースでは、ログ復旧ソースを設定する際に、プライマリテナントまたはソース側のスタンバイテナントのアクセスポイント情報、すなわちテナントレプリカが存在するOBServerノードのIPアドレスとポート番号も取得する必要があります。
管理者ユーザーでプライマリテナントまたはソース側のスタンバイテナントにログインします。
以下のコマンドを実行して、アクセスポイント情報を取得します。
MySQLモード
obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_ACCESS_POINT;説明
現在ログインしているテナントが
sysの場合、CDB_OB_ACCESS_POINTビューを照会してアクセスポイント情報を取得する必要があります。Oracleモード
obclient [SYS]> SELECT * FROM SYS.DBA_OB_ACCESS_POINT;
クエリ結果は次のとおりです:
+-----------+-------------+-------------+----------+ | TENANT_ID | TENANT_NAME | SVR_IP | SQL_PORT | +-----------+-------------+-------------+----------+ | 1004 | mysql | xx.xx.xx.22 | 17855 | | 1004 | mysql | xx.xx.xx.23 | 17857 | | 1004 | mysql | xx.xx.xx.24 | 17859 | +-----------+-------------+-------------+----------+ 3 rows in setこの例では、クエリされたテナントには3つのレプリカがあります。プライマリテナントまたはソース側のスタンバイテナントが単一レプリカテナントの場合、結果として1行のみが返されます。
ステップ3:プライマリテナントの設定を確認する
現在のプライマリ/スタンバイアーキテクチャでは、プライマリテナントでスケーリングダウンや転送などの操作を行った後、プライマリテナントのログストリームが削除されたり、ログが回収されたりして、スタンバイテナントのログ同期が停止する問題が発生しやすいです。この問題を解決するためには、プライマリテナントでアーカイブモードを有効にするか、テナントレベルの構成パラメータls_gc_delay_timeを設定する必要があります。
プライマリテナントでログアーカイブが有効になっているか、または構成パラメータls_gc_delay_timeが設定されているかどうかを確認する方法は以下のとおりです:
プライマリテナントでアーカイブモードが有効になっているかを確認する
管理者ユーザーでプライマリテナント、またはプライマリテナントが属するクラスタの
sysテナントにログインします。アーカイブモードが有効になっているかどうかを照会します。
プライマリテナントが属するクラスタの
sysテナントobclient> SELECT LOG_MODE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='mysql';ユーザーテナント
MySQLモードOracleモードMySQLモードでアーカイブモードが有効になっているかどうかを確認するには、次のクエリを実行します。
obclient> SELECT LOG_MODE FROM oceanbase.DBA_OB_TENANTS;Oracleモードでアーカイブモードが有効になっているかどうかを確認するクエリ:
obclient> SELECT LOG_MODE FROM SYS.DBA_OB_TENANTS;
照会結果の例は次のとおりです:
+--------------+ | LOG_MODE | +--------------+ | NOARCHIVELOG | +--------------+ 1 row in set照会結果によると、
ARCHIVELOGはプライマリテナントでアーカイブモードが有効になっていることを示し、NOARCHIVELOGはアーカイブモードが有効になっていないことを示します。アーカイブモードを有効にする詳細な手順については、アーカイブモードを有効にするを参照してください。
プライマリテナントの構成パラメータ
ls_gc_delay_timeの値が0sより大きいかどうかを確認するテナントレベルの構成パラメータ
ls_gc_delay_timeは、ログストリームの遅延削除時間を設定するために使用されます。デフォルト値は0sであり、ログストリームの遅延削除機能が有効になっていないことを示します。構成パラメータls_gc_delay_timeが設定されていてもアーカイブが有効になっていない場合、ログストリームは削除条件を満たした後、一定時間待機してから回収されます。管理者ユーザーでプライマリテナントにログインします。
プライマリテナントの構成パラメータ
ls_gc_delay_timeの値を照会します。obclient> SHOW PARAMETERS LIKE '%ls_gc_delay_time%';照会結果によると、値が
0sの場合、設定されていないことを意味し、ユーザーは必要に応じて設定できます。構成パラメータls_gc_delay_timeの詳細な設定方法と説明については、ls_gc_delay_timeを参照してください。
ステップ4:ログ復元ソースの設定
管理者ユーザーでスタンバイテナント、またはスタンバイテナントが属するクラスタの
sysテナントにログインします。以下のコマンドを実行して、ログ復元ソースを設定します。
スタンバイテナントが属するクラスタの
sysテナントで、スタンバイテナントのログ復元ソースを設定します。ALTER SYSTEM SET LOG_RESTORE_SOURCE ='SERVICE=$ip_list USER=$user_name@$tenant_name PASSWORD=$password' TENANT = standby_tenant_name;スタンバイテナントで、自身のログ復元ソースを設定します。
ALTER SYSTEM SET LOG_RESTORE_SOURCE ='SERVICE=$ip_list USER=$user_name@$tenant_name PASSWORD=$password';
主なパラメータの説明は以下のとおりです:
$ip_list:プライマリテナントまたはソース側のスタンバイテナントが属するレプリカのOBServerノードのIPアドレスとSQLポート番号。ここにステップ2で取得した情報を入力します。複数のOBServerノード情報がある場合、すべてのOBServerノードの情報を入力する必要はありません。$user_name:ステップ1で作成したアクセスビュー専用ユーザーを入力します。$tenant_name:接続先のプライマリテナントまたはソース側のスタンバイテナント名を入力します。$password:アクセスビュー専用ユーザーに対応するユーザーのパスワードを入力します。
例:
obclient > ALTER SYSTEM SET LOG_RESTORE_SOURCE = 'SERVICE=11.xx.xx.22:17855;11.xx.xx.23:17857;11.xx.xx.24:17859 USER=rep_user@mysql PASSWORD=******' TENANT = standby_tenant;obclient > ALTER SYSTEM SET LOG_RESTORE_SOURCE = 'SERVICE=11.xx.xx.22:17855;11.xx.xx.23:17857;11.xx.xx.24:17859 USER=rep_user@mysql PASSWORD=******';設定が成功すると、システムテナント(
sysテナント)またはユーザーテナントはそれぞれCDB_OB_LOG_RESTORE_SOURCEビューとDBA_OB_LOG_RESTORE_SOURCEビューを使用して、ログ復元ソースが正常に変更されたかどうかを確認できます。詳細な操作については、ログ復元ソース情報の表示を参照してください。