説明
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=******';