手動でパーティション転送を開始した後、ビジネスニーズに応じて、そのタスクをキャンセルすることができます。
使用上の制限
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;