説明
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[ DELAY=$delay_time]' | 'LOCATION=archive_path[ DELAY=$delay_time]'} [ TENANT = standby_tenant_name ];
説明
SERVICE=$host_ip_list、USER=$user_name@$tenant_name、PASSWORD=$password、DELAYなどのサブパラメータを設定する際、各サブパラメータはスペースで区切られます。システムも解析時にスペースによって異なるサブパラメータを区別します。そのため、サブパラメータの値を設定する際の等号(=)の前後にはスペースを含めないでください。
パラメータ説明
パラメータ |
説明 |
|---|---|
| host_ip_list | ログ復元ソースがネットワーク接続によるオンラインログの場合、プライマリテナントまたはソース側のスタンバイテナントのシステムログストリームの位置情報、すなわちプライマリテナントまたはソース側のスタンバイテナントが配置されているレプリカのOBServerノードのIPアドレスおよびSQLポート番号を指定するために使用されます(デフォルトは2881)。複数のIPアドレスはセミコロン(;)で区切ります。 ネットワーク型の物理スタンバイデータベースでは、プライマリテナントまたはソース側のスタンバイテナントのシステムログストリームの位置情報は、スタンバイテナントが接続するエントリポイントです。システムテナントでビュー CDB_OB_ACCESS_POINTを、またはユーザーテナントでビューDBA_OB_ACCESS_POINTをクエリすることで、プライマリテナントまたはソース側のスタンバイテナントのシステムログストリームの位置情報を取得できます。復元ソースの設定が成功すると、スタンバイテナントは秒単位でソーステナントのシステムログストリームの位置変化を検出し、自動的に更新します。同時に、プライマリテナントでロードバランシングや災害復旧を実行する際に LOG_RESTORE_SOURCEを手動で更新する必要はありません。 |
| user_name | プライマリテナント上に作成されたアクセスビュー専用ユーザーの名前です。このユーザーは、システムテナント内の以下のビューに対する読み取り専用権限が必要です:
|
| tenant_name | スタンバイテナントがネットワーク接続するプライマリテナントのテナント名です。 |
| password | アクセスビュー専用ユーザーに対応するユーザーパスワードです。 |
| delay_time | スタンバイテナント(スタンバイデータベース)のログ同期の遅延時間を指定するために使用されます。数値(単位なし)を指定した場合、デフォルトの単位は秒です。単位を伴う数値の指定もサポートされており、単位はus(マイクロ秒)、ms(ミリ秒)、m(分)、h(1時間)、d(日)が使用できます。このパラメータを指定しない場合、遅延時間はデフォルトで0秒となり、スタンバイデータベースに遅延がないことを意味します。
説明V4.4.2バージョンでは、V4.4.2 BP2バージョンから |
| 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テナントは、スタンバイテナントのログ復元ソースを変更し、同時にスタンバイテナントの遅延時間を3600秒に指定します。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=****** DELAY=3600' TENANT = standby_tenant2;スタンバイテナントは、自身のテナントのログ復元ソースを変更し、同時にスタンバイテナントの遅延時間を3600秒に指定します。
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=****** DELAY=3600';
スタンバイデータベースの遅延の設定
主に、スタンバイデータベースの遅延の変更とキャンセルを含みます。
遅延の変更とは、スタンバイデータベースの遅延時間を増減させることです。スタンバイデータベースの遅延時間を1800秒に変更する例を以下に示します:
スタンバイテナント(スタンバイデータベース)が存在するクラスタの
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=****** DELAY=1800' 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=****** DELAY=1800';
スタンバイデータベースの遅延を解除するとは、スタンバイデータベースの遅延時間を0秒に変更することです。例:
スタンバイテナント(スタンバイデータベース)が存在するクラスタの
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=****** DELAY=0' TENANT = standby_tenant2;または、
DELAYパラメータを指定しないことで、スタンバイテナントの遅延を解除することもできます。ステートメントは以下のとおりです。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=****** DELAY=0';または、
DELAYパラメータを指定しないことで、スタンバイテナントの遅延を解除することもできます。ステートメントは以下のとおりです。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=******';