説明
ALTER SYSTEM SET LOG_RESTORE_SOURCE ステートメントは、ログ復元ソースを設定するために使用されます。OceanBaseデータベースのログソースは動的に変更でき、このステートメントを使用してログ復元ソースが設定されていないスタンバイテナントにログ復元ソースを設定したり、スタンバイテナントのログソースをあるログ復元ソースから別のログ復元ソースに切り替えたりできます。
フィジカル・スタンバイ・データベースは、デプロイメントプランによって、ログアーカイブ型とネットワーク型に分類されます。ログアーカイブ型では、スタンバイテナントのログはプライマリテナントまたは他のスタンバイテナントのログアーカイブから取得します。ネットワーク型では、スタンバイテナントはネットワーク経由でプライマリテナントまたは他のスタンバイテナントから直接ログを読み取ります。
BACKUP DATABASE PLUS ARCHIVELOG機能を使用して作成されたスタンバイテナントの場合、作成後に ALTER SYSTEM SET LOG_RESTORE_SOURCE ステートメントを使用して復元ソースを設定する必要があります。そうしないと、現在のスタンバイテナントではログの継続的な同期を有効にできません。
ネットワーク型のフィジカル・スタンバイ・データベースの場合、プライマリテナントまたはソース側のスタンバイテナントでアーカイブモードが有効になっている場合、ALTER SYSTEM SET LOG_RESTORE_SOURCE ステートメントを使用して、スタンバイテナントのログ復元ソースをプライマリテナントまたはソース側のスタンバイテナントのアーカイブログに変更できます。
ログアーカイブ型のフィジカル・スタンバイ・データベースの場合、現在のスタンバイテナントとプライマリテナントまたはソース側のスタンバイテナント間のネットワーク接続が確立されている場合、ALTER SYSTEM SET LOG_RESTORE_SOURCE ステートメントを使用して、スタンバイテナントのログ復元ソースをネットワーク接続による直接ログ読み取りに変更できます。
制限事項と注意点
カスケードスタンバイデータベースのシナリオでは、現在のスタンバイテナントのログ復元ソースをプライマリテナントまたは他のスタンバイテナントに設定できます。
例えば、現在の環境にプライマリテナントAとスタンバイテナントBが既に存在する場合、新しくスタンバイテナントCを作成した後、スタンバイテナントCのログ復元ソースをプライマリテナントAに設定することも、スタンバイテナントBに設定することもできます。
スタンバイテナントのログ復元ソースをアーカイブログからネットワーク接続による直接ログ読み取りに変更する場合、ログ復元ソースを設定する前に、プライマリテナント上で現在のスタンバイテナント用のアクセスビュー専用ユーザーを作成する必要があります。アクセスビュー専用ユーザーの作成手順の詳細については、空のスタンバイテナントの作成 の ステップ1:アクセスビュー専用ユーザーの作成 を参照してください。
スタンバイテナントのログソースをあるログ復元ソースから別のログ復元ソースに変更する際には、変更前後でそのログ復元ソースがスタンバイテナント作成時に指定されたソーステナントと一致している必要があります。つまり、ソーステナントのログアーカイブを使用するか、直接ソーステナントを指すかのどちらかになります。
マシン単一のシナリオでは、プライマリテナントのシステムログストリームの位置情報は、単一のOBServerノードのアドレスとなります。
権限要件
sys テナントの root ユーザー(root@sys)または各テナントの管理者ユーザーによって実行する必要があります。その中で:
- MySQLモードのデフォルト管理者ユーザーは
rootユーザーです。 - Oracleモードのデフォルト管理者ユーザーは
SYSユーザーです。
構文
ALTER SYSTEM SET LOG_RESTORE_SOURCE = { 'SERVICE=$host_ip_list USER=$user_name@$tenant_name PASSWORD=$password' | 'LOCATION=archive_path' } [ TENANT = standby_tenant_name ];
説明
SERVICE=$host_ip_list、USER=$user_name@$tenant_name、PASSWORD=$password などのサブパラメータを設定する際、各サブパラメータ間はスペースで区切ります。システムも解析時にスペースに基づいて異なるサブパラメータを区別するため、サブパラメータ値の等号(=)の前後にスペースを入れることはできません。
パラメータの説明
| パラメータ | 説明 |
|---|---|
| host_ip_list | ログ復元ソースがネットワーク接続されたオンラインログの場合、プライマリテナントまたはソース側スタンバイテナントのシステムログストリームの位置情報を指定するために使用されます。これは、プライマリテナントまたはソース側スタンバイテナントが存在するレプリカのOBServerノードのIPアドレスとSQLポート番号です(デフォルトは2881)。複数のIPアドレス間はセミコロン(;)で区切ります。 ネットワークベースのフィジカル・スタンバイ・データベースでは、プライマリテナントまたはソース側スタンバイテナントのシステムログストリームの位置情報は、スタンバイテナント接続のエントリポイントとなります。システムテナントで CDB_OB_ACCESS_POINTビューを、またはユーザーテナントでDBA_OB_ACCESS_POINTビューを照会することで、プライマリテナントまたはソース側スタンバイテナントのシステムログストリームの位置情報を取得できます。復元ソースの設定が成功すると、スタンバイテナントは数秒以内にソーステナントのシステムログストリームの位置変更を検出し、自動的に更新します。同時に、プライマリテナントでロードバランシングや災害復旧を実行する際には、 LOG_RESTORE_SOURCEを手動で更新する必要はありません。 |
| user_name | プライマリテナント上に作成されたアクセスビュー専用ユーザーの名前です。このユーザーは、システムテナント内の以下のビューに対する読み取り専用権限を持っている必要があります:
|
| tenant_name | スタンバイテナントがネットワーク経由で接続するプライマリテナントのテナント名。 |
| password | アクセスビュー専用ユーザーに対応するユーザーのパスワード。 |
| archive_path | ログ復元ソースがアーカイブログの場合、復元ソースのアーカイブパス情報を指定するために使用されます。システムテナントでCDB_OB_ARCHIVE_DESTビューを、またはユーザーテナントでDBA_OB_ARCHIVE_DESTビューを照会することで、プライマリテナントまたはソース側スタンバイテナントのアーカイブパス情報を取得できます。 |
| standby_tenant_name | 復元ソースを設定するスタンバイテナントの名前を指定します。スタンバイテナントが存在するクラスタのシステムテナントからスタンバイテナントのログ復元ソースを設定する際には、TENANT = standby_tenant_nameを指定する必要があります。 |
例
ネットワークに基づくフィジカル・スタンバイ・データベースのシナリオにおいて、スタンバイテナントのログ復元ソースをプライマリテナントのアーカイブログに変更する例は以下のとおりです:
プライマリテナントのアーカイブパスを取得します。
プライマリテナントが属するクラスタの
sysテナントは、プライマリテナントのアーカイブパスを取得します。ステートメントは次のとおりです:
obclient [(none)]> SELECT * FROM oceanbase.CDB_OB_ARCHIVE_DEST WHERE tenant_id= 1002;プライマリテナントは、自身のテナントのアーカイブパスを取得します。
MySQLモードOracleモードステートメントは以下のとおりです:
obclient [(none)]> SELECT * FROM oceanbase.DBA_OB_ARCHIVE_DEST;ステートメントは以下のとおりです:
obclient [SYS]> SELECT * FROM SYS.DBA_OB_ARCHIVE_DEST;
クエリ結果は次のとおりです:
+---------+-----------------------+---------------------------------+ | DEST_NO | NAME | VALUE | +---------+-----------------------+---------------------------------+ | 0 | binding | OPTIONAL | | 0 | dest_id | 1002 | | 0 | path | file:///data/1/example_archive | | 0 | piece_switch_interval | 1d | | 0 | state | ENBALE | +---------+-----------------------+---------------------------------+ 5 rows in setこの例では、
NAME列のpathに対応する値が、現在のテナントのログアーカイブパスです。ログ復元ソースを変更します。
スタンバイテナント
standby_tenant1が属するクラスタのsysテナントは、スタンバイテナントのログ復元ソースを変更します。obclient [(none)]> ALTER SYSTEM SET LOG_RESTORE_SOURCE='LOCATION=file:///data/1/example_archive' TENANT = standby_tenant1;スタンバイテナント
standby_tenant1は、自身のテナントの復元ソースを変更します。obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE='LOCATION=file:///data/1/example_archive';
ログアーカイブに基づくフィジカル・スタンバイ・データベースのシナリオにおいて、スタンバイテナントstandby_tenant2のログ復元ソースをネットワーク接続を介して直接ログを取得するように変更する例は以下のとおりです:
プライマリテナント
primary_tenantのシステムログストリームの位置情報を取得します。プライマリテナントが属するクラスタの
sysテナントは、プライマリテナントのシステムログストリームの位置情報を取得します。ステートメントは次のとおりです:
obclient [(none)]> SELECT * FROM oceanbase.CDB_OB_ACCESS_POINT WHERE tenant_name='primary_tenant';プライマリテナントは、自身のテナントのシステムログストリームの位置情報を取得します。
MySQLモードOracleモードステートメントは以下のとおりです:
obclient [(none)]> SELECT * FROM oceanbase.DBA_OB_ACCESS_POINT;ステートメントは以下のとおりです:
obclient [SYS]> SELECT * FROM SYS.DBA_OB_ACCESS_POINT;
クエリ結果は次のとおりです:
+-----------+----------------+-------------+----------+ | TENANT_ID | TENANT_NAME | SVR_IP | SQL_PORT | +-----------+----------------+-------------+----------+ | 1004 | primary_tenant | 11.xx.xx.22 | 17855 | | 1004 | primary_tenant | 11.xx.xx.23 | 17857 | | 1004 | primary_tenant | 11.xx.xx.24 | 17859 | +-----------+----------------+-------------+----------+ 3 rows in setこの返される結果は、プライマリテナントにいくつのレプリカがあるかによって異なります。この例では、クエリしたプライマリテナントには3つのレプリカがあります。プライマリテナントまたはソース側のスタンバイテナントが単一レプリカテナントの場合は、1行の結果のみが返されます。
ログ復元ソースを変更します。
スタンバイテナントが属するクラスタの
sysテナントは、スタンバイテナントのログ復元ソースを変更します。obclient [(none)]> 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@primary_tenant PASSWORD=******' TENANT = standby_tenant2;スタンバイテナントは、自身のテナントのログ復元ソースを変更します。
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@primary_tenant PASSWORD=******';