パーティション移動を手動で開始した後、業務上の必要に応じて、パーティション移動タスクをキャンセルすることができます。
制限事項
DOING状態のTransfer Partitionタスクはキャンセルできませんが、他の状態のTransfer Partitionタスクはキャンセルできます。Transfer Partitionタスクのキャンセル操作は、メインデータベース(つまりメインテナント)でのみ実行できます。
システムテナントにおけるTransfer Partitionのキャンセル
rootユーザーでクラスタのsysテナントにログインします。接続例は以下のとおりです。データベースへの接続時は、実際の環境に基づいてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aビュー
CDB_OB_TRANSFER_PARTITION_TASKSを照会して、現在のタスクの状態を取得します。obclient [oceanbase]> SELECT TENANT_ID, TABLE_ID, OBJECT_ID, STATUS FROM oceanbase.CDB_OB_TRANSFER_PARTITION_TASKS WHERE TENANT_ID = 1002;クエリ結果は次のとおりです:
+-----------+----------+-----------+---------+ | TENANT_ID | TABLE_ID | OBJECT_ID | STATUS | +-----------+----------+-----------+---------+ | 1002 | 500006 | 500008 | WAITING | +-----------+----------+-----------+---------+ 1 row in setクエリ結果において、
STATUSがDOING以外の状態(WAITING、INITなど)のタスクのみをキャンセルできます。キャンセルしたいタスクの
STATUSがDOINGの場合、テナントレベルの構成パラメータenable_transferの値をfalseに変更してTransfer機能を無効にすることができます。Transfer機能を無効にすると、すべてのDOING状態のTransfer PartitionタスクはWAITING状態にフォールバックし、Transfer Partitionのキャンセル操作を実行できるようになります。構成パラメータ
enable_transferの詳細と設定については、enable_transferを参照してください。クエリ結果に基づいて、適切な操作を選択します:
指定されたテナントの指定されたパーティションのTransfer Partitionタスクをキャンセルします
ALTER SYSTEM CANCEL TRANSFER PARTITION TABLE_ID [=] table_id OBJECT_ID [=] object_id TENANT = 'tenant_name';その中で:
table_id:キャンセル対象のパーティションを含むテーブルID。object_id:キャンセル対象のパーティション。tenant_name:キャンセル対象のパーティションを含むテナント。
例:
obclient [oceanbase]> ALTER SYSTEM CANCEL TRANSFER PARTITION TABLE_ID = 500006, OBJECT_ID = 500008 TENANT = 'mysql_tenant';指定されたテナント内のすべてのTransfer Partitionタスクをキャンセルします
ALTER SYSTEM CANCEL TRANSFER PARTITION ALL TENANT = 'tenant_name';例:
obclient [oceanbase]> ALTER SYSTEM CANCEL TRANSFER PARTITION ALL TENANT = 'mysql_tenant';
ユーザーテナントによるTransfer Partitionのキャンセル
MySQLモードまたはOracleモードのテナント管理者がデータベースに接続します。
接続例は以下のとおりです。データベースへの接続時は、実際の環境に基づいてください。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -Aビュー
DBA_OB_TRANSFER_PARTITION_TASKSを照会して、現在のタスクの状態を取得します。MySQLモードOracleモードMySQLモードのクエリステートメントは次のとおりです:
obclient [oceanbase]> SELECT TABLE_ID, OBJECT_ID, STATUS FROM oceanbase.DBA_OB_TRANSFER_PARTITION_TASKS;Oracleモードのクエリステートメントは以下のとおりです:
obclient [SYS]> SELECT TABLE_ID, OBJECT_ID, STATUS FROM SYS.DBA_OB_TRANSFER_PARTITION_TASKS;クエリ結果の例は次のとおりです:
+----------+-----------++--------+ | TABLE_ID | OBJECT_ID | STATUS | +----------+-----------+--------+ | 500046 | 500052 | INIT | +----------+-----------+--------+ 1 row in setクエリ結果では、
STATUSがDOING以外の状態(WAITING、INITなど)のタスクのみをキャンセルできます。キャンセルしたいタスクの
STATUSがDOINGの場合、テナントレベルの構成パラメータenable_transferの値をfalseに変更してTransfer機能を無効にすることができます。Transfer機能を無効にすると、すべてのDOING状態のTransfer PartitionタスクはWAITING状態にフォールバックされ、Transfer Partitionのキャンセル操作を実行できるようになります。パラメータ
enable_transferの詳細と設定については、enable_transferを参照してください。クエリ結果に基づいて、適切な操作を選択します:
このテナントの指定されたパーティションのTransfer Partitionタスクをキャンセルします。
ALTER SYSTEM CANCEL TRANSFER PARTITION TABLE_ID [=] table_id OBJECT_ID [=] object_id;その中で:
table_id:キャンセル対象のパーティションが存在するテーブルID。object_id:キャンセル対象のパーティション。
例:
obclient [oceanbase]> ALTER SYSTEM CANCEL TRANSFER PARTITION TABLE_ID = 500046, OBJECT_ID = 500052;このテナントのすべてのTransfer Partitionタスクをキャンセルします。
obclient> ALTER SYSTEM CANCEL TRANSFER PARTITION ALL;