テナントで実行中のBalance Jobがある状態で、他に緊急な変更を実行する必要が生じた場合、そのBalance Jobの実行が緊急変更に影響を与えるのを防ぐため、ユーザーは現在実行中のBalance Jobを一時停止し、緊急変更の実行が完了した後に、そのJobを再開して実行を続けることができます。
使用制限
バランスジョブの一時停止または再開操作は、プライマリデータベース(すなわちプライマリテナント)でのみ実行できます。
バランスジョブを一時停止または再開する際、そのバランスジョブの状態が
CANCELINGであってはなりません。
実行中のBalance Jobを一時停止する
システムテナントがユーザーテナントで実行中のBalance Jobを一時停止する
rootユーザーでクラスタのsysテナントにログインします。接続例は以下のとおりです。データベースへの接続時は、実際の環境に合わせてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aテナント関連情報を取得します。
obclient(root@sys)[oceanbase]> SELECT TENANT_ID, TENANT_NAME, TENANT_ROLE FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name = 'mq_t1';クエリ結果の例は次のとおりです:
+-------------+-----------+-------------+ | TENANT_NAME | TENANT_ID | TENANT_ROLE | +-------------+-----------+-------------+ | mq_t1 | 1002 | PRIMARY | +-------------+-----------+-------------+ 1 row in setビュー
CDB_OB_BALANCE_JOBSをクエリし、現在実行中のタスクとその状態を取得します。obclient(root@sys)[oceanbase]> SELECT TENANT_ID, JOB_ID, JOB_TYPE, STATUS FROM oceanbase.CDB_OB_BALANCE_JOBS WHERE TENANT_ID = 1002;クエリ結果の例は次のとおりです:
+-----------+--------+--------------------+--------+ | TENANT_ID | JOB_ID | JOB_TYPE | STATUS | +-----------+--------+--------------------+--------+ | 1002 | 62944 | TRANSFER_PARTITION | DOING | +-----------+--------+--------------------+--------+ 1 row in setクエリ結果によると、現在のBalance Jobの状態は
DOINGであり、CANCELINGではないため、このJobを一時停止できます。以下のステートメントを実行して、このBalance Jobを一時停止します。
ALTER SYSTEM SUSPEND BALANCE JOB TENANT = 'tenant_name';例:
obclient(root@sys)[oceanbase]> ALTER SYSTEM SUSPEND BALANCE JOB TENANT ='mq_t1';実行が成功した後、再度ビュー
CDB_OB_BALANCE_JOBSをクエリすると、現在のタスクの状態がSUSPENDに変更されていることが確認できます。obclient(root@sys)[oceanbase]> SELECT TENANT_ID, JOB_ID, JOB_TYPE, STATUS FROM oceanbase.CDB_OB_BALANCE_JOBS WHERE TENANT_ID = 1002;クエリ結果は次のとおりです:
+-----------+--------+--------------------+---------+ | TENANT_ID | JOB_ID | JOB_TYPE | STATUS | +-----------+--------+--------------------+---------+ | 1002 | 62944 | TRANSFER_PARTITION | SUSPEND | +-----------+--------+--------------------+---------+ 1 row in set
ユーザーテナントが自身のテナントで実行中のBalance Jobを一時停止する
MySQLテナントまたはOracleテナントのテナント管理者がデータベースに接続します。
接続例は以下のとおりです。データベースへの接続時は、実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -Aビュー
DBA_OB_BALANCE_JOBSをクエリし、現在実行中のタスクとその状態を取得します。MySQLモードOracleモードMySQLモードでのクエリステートメントは次のとおりです:
obclient(root@mysql001)[oceanbase]> SELECT JOB_ID, JOB_TYPE, STATUS FROM oceanbase.DBA_OB_BALANCE_JOBS;Oracleモードでのクエリステートメントは次のとおりです:
obclient(SYS@oracle001)[SYS]> SELECT JOB_ID, JOB_TYPE, STATUS FROM SYS.DBA_OB_BALANCE_JOBS;クエリ結果の例は次のとおりです:
+--------+--------------------+---------+ | JOB_ID | JOB_TYPE | STATUS | +--------+--------------------+---------+ | 62944 | TRANSFER_PARTITION | DOING | +--------+--------------------+---------+ 1 row in setクエリ結果によると、現在のBalance Jobの状態は
DOINGであり、CANCELINGではないため、このJobを一時停止できます。以下のステートメントを実行して、このBalance Jobを一時停止します。
obclient> ALTER SYSTEM SUSPEND BALANCE JOB;実行が成功した後、再度ビュー
DBA_OB_BALANCE_JOBSをクエリすると、現在のタスクの状態がSUSPENDに変わっていることが確認できます。MySQLモードOracleモードMySQLモードでのクエリステートメントは以下のとおりです:
obclient(root@mysql001)[oceanbase]> SELECT JOB_ID, JOB_TYPE, STATUS FROM oceanbase.DBA_OB_BALANCE_JOBS;Oracleモードでのクエリステートメントは次のとおりです:
obclient(SYS@oracle001)[SYS]> SELECT JOB_ID, JOB_TYPE, STATUS FROM SYS.DBA_OB_BALANCE_JOBS;クエリ結果の例は次のとおりです:
+--------+--------------------+---------+ | JOB_ID | JOB_TYPE | STATUS | +--------+--------------------+---------+ | 62944 | TRANSFER_PARTITION | SUSPEND | +--------+--------------------+---------+ 1 row in set
一時停止されたBalance Jobの復元
システムテナントがユーザーテナントの一時停止されたBalanceジョブを復元する
rootユーザーでクラスタのsysテナントにログインします。接続例は以下のとおりです。データベースへの接続時は、実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aテナント関連情報を取得します。
obclient(root@sys)[oceanbase]> SELECT TENANT_ID, TENANT_NAME, TENANT_ROLE FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name = 'mq_t1';クエリ結果は次のとおりです:
+-------------+-----------+-------------+ | TENANT_NAME | TENANT_ID | TENANT_ROLE | +-------------+-----------+-------------+ | mq_t1 | 1002 | PRIMARY | +-------------+-----------+-------------+ 1 row in setビュー
CDB_OB_BALANCE_JOBSをクエリし、現在一時停止されているタスクとその状態を取得します。obclient(root@sys)[oceanbase]> SELECT TENANT_ID, JOB_ID, JOB_TYPE, STATUS FROM oceanbase.CDB_OB_BALANCE_JOBS WHERE TENANT_ID = 1002;クエリ結果の例は次のとおりです:
+-----------+--------+--------------------+---------+ | TENANT_ID | JOB_ID | JOB_TYPE | STATUS | +-----------+--------+--------------------+---------+ | 1002 | 62944 | TRANSFER_PARTITION | SUSPEND | +-----------+--------+--------------------+---------+ 1 row in setクエリ結果によると、現在のBalanceジョブの状態は
SUSPENDです。以下のステートメントを実行して、一時停止されたBalanceジョブを復元します。
ALTER SYSTEM SUSPEND BALANCE JOB TENANT = 'tenant_name';例:
obclient(root@sys)[oceanbase]> ALTER SYSTEM RESUME BALANCE JOB TENANT ='mq_t1';実行が成功した後、再度ビュー
CDB_OB_BALANCE_JOBSをクエリすると、現在のタスク状態がDOINGに変わっていることが確認できます。obclient(root@sys)[oceanbase]> SELECT TENANT_ID, JOB_ID, JOB_TYPE, STATUS FROM oceanbase.CDB_OB_BALANCE_JOBS WHERE TENANT_ID = 1002;クエリ結果の例は次のとおりです:
+-----------+--------+--------------------+---------+ | TENANT_ID | JOB_ID | JOB_TYPE | STATUS | +-----------+--------+--------------------+---------+ | 1002 | 62944 | TRANSFER_PARTITION | DOING | +-----------+--------+--------------------+---------+ 1 row in set
ユーザーテナントが自身の一時停止されたBalanceジョブを再開する
MySQLテナントまたはOracleテナントのテナント管理者がデータベースに接続します。
接続例は以下のとおりです。データベースへの接続時は、実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -Aビュー
DBA_OB_BALANCE_JOBSをクエリし、現在一時停止されているタスクとその状態を取得します。MySQLモードOracleモードMySQLモードでのクエリステートメントは以下のとおりです:
obclient(root@mysql001)[oceanbase]> SELECT JOB_ID, JOB_TYPE, STATUS FROM oceanbase.DBA_OB_BALANCE_JOBS;Oracleモードでのクエリステートメントは次のとおりです:
obclient(SYS@oracle001)[SYS]> SELECT JOB_ID, JOB_TYPE, STATUS FROM SYS.DBA_OB_BALANCE_JOBS;クエリ結果の例は次のとおりです:
+--------+--------------------+---------+ | JOB_ID | JOB_TYPE | STATUS | +--------+--------------------+---------+ | 62944 | TRANSFER_PARTITION | SUSPEND | +--------+--------------------+---------+ 1 row in setクエリ結果によると、現在のBalanceジョブの状態は
SUSPENDです。以下のステートメントを実行して、一時停止されたBalanceジョブを復元します。
obclient> ALTER SYSTEM RESUME BALANCE JOB;実行が成功した後、再度ビュー
DBA_OB_BALANCE_JOBSをクエリすると、現在のタスク状態がDOINGに変わっていることが確認できます。MySQLモードOracleモードMySQLモードでのクエリステートメントは次のとおりです:
obclient(root@mysql001)[oceanbase]> SELECT JOB_ID, JOB_TYPE, STATUS FROM oceanbase.DBA_OB_BALANCE_JOBS;Oracleモードでのクエリステートメントは以下のとおりです:
obclient(SYS@oracle001)[SYS]> SELECT JOB_ID, JOB_TYPE, STATUS FROM SYS.DBA_OB_BALANCE_JOBS;クエリ結果の例は次のとおりです:
+--------+--------------------+---------+ | JOB_ID | JOB_TYPE | STATUS | +--------+--------------------+---------+ | 62944 | TRANSFER_PARTITION | DOING | +--------+--------------------+---------+ 1 row in set