自動的なロードバランシングが、ユーザーが特定のパーティションに対する集約や分散を満たすことができない場合、手動でTransfer Partition操作を実行できます。
制限事項と注意点
Transfer Partition操作を実行するユーザーは、
ALTER SYSTEM権限が必要です。権限の詳細については、ユーザーと権限の概要を参照してください。Transfer Partition操作は、みなしマスターテナントでのみ実行でき、かつユーザーテナント内のパーティションのみ転送できます。
テナントのTransfer機能をオフにした場合(すなわち、テナントの構成パラメータ
enable_transferの値がfalseに設定されている場合)、そのテナントに対してTRANSFER PARTITIONステートメントを実行するとエラーが発生します。また、すでに実行されたTRANSFER PARTITIONステートメントに対応するTransfer Partitionタスクはキャンセルされる可能性があります。システムテーブルに対するTransfer Partition操作はサポートされていません。
システムテナント内のユーザーテーブルに対するTransfer Partition操作はサポートされていません。
普通のテーブルをブロードキャストログストリームに転送することは、および複製テーブルを通常のログストリームに転送することはサポートされていません。
独立していないパーティションの転送はサポートされていません。例えば、ローカルインデックステーブルのパーティションやLOBテーブルのパーティションは転送できません。
同じパーティションに対して、Transfer Partition操作が完了するまでに再度のTransfer Partition操作を開始することはできません。
現在のクラスタ内で既にバランシングジョブ(Balance Job)が処理中である場合、手動でトリガーされたTransfer Partitionタスクはすぐにスケジュールされません。Transfer Partitionタスクをできるだけ早くスケジュールしたい場合は、まずこのBalance Jobタスクをキャンセルしてください。Balance Jobタスクのキャンセル方法の詳細については、Balance Jobのキャンセルを参照してください。
前提条件
Transfer Partitionを行う前に、Transfer機能を有効にする必要があります。Transfer機能はテナントレベルの構成パラメータ
enable_transferによって制御され、デフォルト値はtrueであり、Transfer機能が有効であることを意味します。構成パラメータenable_transferの詳細な説明および設定については、enable_transferを参照してください。Transfer Partitionポリシーと自動バランシングポリシーが競合する可能性があるため、パーティションの位置を固定するために、Transfer Partition操作を実行する前に自動バランシングポリシーをオフにすることをお勧めします。つまり、対応するテナントの構成パラメータ
enable_rebalanceの値をfalseに設定します。構成パラメータenable_rebalanceの詳細な説明および設定については、enable_rebalanceを参照してください。Transfer Partition操作自体は構成パラメータ
enable_rebalanceによって制御されませんが、enable_rebalanceとenable_transferの値がともにtrueの場合、あるパーティションを対応するログストリームに移動させた後、システムの自動バランシングポリシーによってそのパーティションが他のログストリームに再移動される可能性があります。
システムテナントのパーティション転送
rootユーザーを使用して、クラスタのsysテナントにログインします。接続例は以下のとおりです。実際の環境に基づいてデータベースに接続してください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -ADBA_OB_TENANTSビューを照会し、ターゲットテナントのTENANT_IDを取得します。obclient [oceanbase]> SELECT TENANT_ID FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'oracle_tenant';照会結果は次のとおりです:
+-----------+ | TENANT_ID | +-----------+ | 1006 | +-----------+ 1 row in setパーティション情報を確認します。
CDB_OB_TABLE_LOCATIONSビューを照会することで、テーブル内の特定のパーティションに対応するTABLET_ID、OBJECT_IDおよびLS_IDを取得できます。非パーティションテーブルの特定のパーティションに対応する
TABLET_ID、OBJECT_IDおよびLS_IDを取得するoracle_tenantテナント内に非パーティションテーブルT1が存在すると仮定します。照会例は次のとおりです:obclient [oceanbase]> SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID FROM oceanbase.CDB_OB_TABLE_LOCATIONS WHERE TENANT_ID = 1006 AND DATABASE_NAME = 'SYS' AND TABLE_NAME= 'T1' LIMIT 1;照会結果は次のとおりです:
+----------+-----------+-----------+-------+ | TABLE_ID | OBJECT_ID | TABLET_ID | LS_ID | +----------+-----------+-----------+-------+ | 500002 | 500002 | 200001 | 1001 | +----------+-----------+-----------+-------+ 1 row in set一階層パーティションテーブルの特定のパーティションに対応する
TABLET_ID、OBJECT_IDおよびLS_IDを取得する一階層パーティションテーブルの場合、照会時には具体的な一階層パーティション名を指定するだけで済みます。
oracle_tenantテナント内に一階層パーティションテーブルTBL1_LOG_Rが存在すると仮定します。obclient [SYS]> CREATE TABLE tbl1_log_r(log_id INT,log_date DATE NOT NULL DEFAULT SYSDATE) PARTITION BY RANGE(log_date) (PARTITION M202001 VALUES LESS THAN(TO_DATE('2020/02/01','YYYY/MM/DD')) , PARTITION M202002 VALUES LESS THAN(TO_DATE('2020/03/01','YYYY/MM/DD')) , PARTITION M202003 VALUES LESS THAN(TO_DATE('2020/04/01','YYYY/MM/DD')) , PARTITION M202004 VALUES LESS THAN(TO_DATE('2020/05/01','YYYY/MM/DD')) , PARTITION M202005 VALUES LESS THAN(TO_DATE('2020/06/01','YYYY/MM/DD')) , PARTITION M202006 VALUES LESS THAN(TO_DATE('2020/07/01','YYYY/MM/DD')) , PARTITION M202007 VALUES LESS THAN(TO_DATE('2020/08/01','YYYY/MM/DD')) , PARTITION M202008 VALUES LESS THAN(TO_DATE('2020/09/01','YYYY/MM/DD')) , PARTITION M202009 VALUES LESS THAN(TO_DATE('2020/10/01','YYYY/MM/DD')) , PARTITION M202010 VALUES LESS THAN(TO_DATE('2020/11/01','YYYY/MM/DD')) , PARTITION M202011 VALUES LESS THAN(TO_DATE('2020/12/01','YYYY/MM/DD')) , PARTITION M202012 VALUES LESS THAN(TO_DATE('2021/01/01','YYYY/MM/DD')) , PARTITION MMAX VALUES LESS THAN (MAXVALUE) );この一階層パーティションテーブルのパーティション
M202005の関連情報を照会する例は次のとおりです:obclient [oceanbase]> SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID FROM oceanbase.CDB_OB_TABLE_LOCATIONS WHERE TENANT_ID = 1006 AND DATABASE_NAME = 'SYS' AND TABLE_NAME= 'TBL1_LOG_R' AND PARTITION_NAME = 'M202005' LIMIT 1;照会結果は次のとおりです:
+----------+-----------+-----------+-------+ | TABLE_ID | OBJECT_ID | TABLET_ID | LS_ID | +----------+-----------+-----------+-------+ | 500003 | 500009 | 200006 | 1002 | +----------+-----------+-----------+-------+ 1 row in set二階層パーティションテーブルの二階層パーティションに対応する
TABLET_ID、OBJECT_IDおよびLS_IDを取得する二階層パーティションテーブルの場合、照会時には一階層パーティション名と二階層パーティション名の両方を指定する必要があります。
oracle_tenantテナント内に二階層パーティションテーブルT2_F_RLが存在すると仮定します。obclient [SYS]> CREATE TABLE t2_f_rl(col1 INT,col2 VARCHAR2(50)) PARTITION BY RANGE(col1) SUBPARTITION BY LIST(col2) (PARTITION p0 VALUES LESS THAN(100) (SUBPARTITION sp0 VALUES('01'), SUBPARTITION sp1 VALUES('02') ), PARTITION p1 VALUES LESS THAN(200) (SUBPARTITION sp2 VALUES('01'), SUBPARTITION sp3 VALUES('02'), SUBPARTITION sp4 VALUES('03') ) );この二階層パーティションテーブルの二階層パーティション
SP2の関連情報を照会する例は次のとおりです:obclient [oceanbase]> SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID FROM oceanbase.CDB_OB_TABLE_LOCATIONS WHERE TENANT_ID = 1006 AND DATABASE_NAME = 'SYS' AND TABLE_NAME= 'T2_F_RL' AND PARTITION_NAME = 'P1' AND SUBPARTITION_NAME = 'SP2' LIMIT 1;照会結果は次のとおりです:
+----------+-----------+-----------+-------+ | TABLE_ID | OBJECT_ID | TABLET_ID | LS_ID | +----------+-----------+-----------+-------+ | 500018 | 500023 | 200017 | 1003 | +----------+-----------+-----------+-------+ 1 row in set
Transferの目的となるエンドポイントを選択します。
CDB_OB_LSビューを照会し、テナントのログストリーム状態と情報を取得します。obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_LS WHERE TENANT_ID = 1006;照会結果は次のとおりです:
+-----------+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+ | TENANT_ID | LS_ID | STATUS | PRIMARY_ZONE | UNIT_GROUP_ID | LS_GROUP_ID | CREATE_SCN | DROP_SCN | SYNC_SCN | READABLE_SCN | FLAG | +-----------+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+ | 1006 | 1 | NORMAL | zone1 | 0 | 0 | NULL | NULL | 1701244663685197789 | 1701244663685197789 | | | 1006 | 1001 | NORMAL | zone1 | 1006 | 1001 | 1701239786827662637 | NULL | 1701244663685197789 | 1701244663685197789 | | | 1006 | 1002 | NORMAL | zone1 | 1007 | 1002 | 1701239786831568305 | NULL | 1701244664066906860 | 1701244664066906859 | | | 1006 | 1003 | NORMAL | zone1 | 1008 | 1003 | 1701239786834300282 | NULL | 1701244664175263949 | 1701244664175263948 | | +-----------+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+ 4 rows in setCDB_OB_TABLET_TO_LSビューを照会し、ログストリーム上のTabletの分布情報を取得します。obclient [oceanbase]> SELECT LS_ID, COUNT(*) AS C FROM oceanbase.CDB_OB_TABLET_TO_LS WHERE TENANT_ID = 1006 GROUP BY LS_ID;照会結果は次のとおりです:
+-------+------+ | LS_ID | C | +-------+------+ | 1 | 578 | | 1001 | 7 | | 1002 | 5 | | 1003 | 7 | +-------+------+ 4 rows in set上記の表示情報に基づいて、適切なログストリームを選択してTransferの目的とするエンドポイントとします。
以下のコマンドを実行して、Partition Transfer操作を行います。
ALTER SYSTEM TRANSFER PARTITION TABLE_ID [=] table_id, OBJECT_ID [=] object_id TO LS ls_id TENANT = 'tenant_name';ここで:
table_id:テーブルID。object_id:パーティションの一意の識別子。ls_id:Transferの目的となるエンドポイントのログストリームID。tenant_name:Transfer対象のパーティションが属するテナント。
テナント
oracle_tenantを例にとり、そのSYSデータベース内のテーブルTBL1_LOG_RのM202005パーティションを現在の1002番のログストリームから1003番のログストリームへ移動する場合の例は次のとおりです。obclient [oceanbase]> ALTER SYSTEM TRANSFER PARTITION TABLE_ID = 500003, OBJECT_ID = 500009 TO LS 1003 TENANT = 'oracle_tenant';Transfer Partitionコマンドが正常に実行された後、以下のビューを使用してタスクの状態を確認できます。
CDB_OB_TRANSFER_PARTITION_TASKSビューを照会し、タスクのTASK_ID、TRANSFER_TASK_IDおよびBALANCE_JOB_IDを取得します。ビュー
CDB_OB_TRANSFER_PARTITION_TASKSは、すべてのテナントで現在処理中のパーティションTransferタスクを表示します。照会例は次のとおりです:obclient [oceanbase]> SELECT TASK_ID, BALANCE_JOB_ID, TRANSFER_TASK_ID, STATUS FROM oceanbase.CDB_OB_TRANSFER_PARTITION_TASKS WHERE TENANT_ID = 1006 AND TABLE_ID = 500003 AND OBJECT_ID = 500009;照会結果の例は次のとおりです:
+---------+----------------+------------------+--------+ | TASK_ID | BALANCE_JOB_ID | TRANSFER_TASK_ID | STATUS | +---------+----------------+------------------+--------+ | 1 | 17304 | 1 | DOING | +---------+----------------+------------------+--------+ 1 row in set照会結果の
STATUS値に基づいてタスクの状態を確認し、タスクの実行進捗をさらに確認できます:WAITING:タスクが待機中で、まだスケジュールが開始されていません。INIT:タスクがBALANCE_JOBを構築したことを示します。BALANCE_JOB_IDを使用して関連するBALANCE_JOBの実行進捗を確認できます。DOING:タスクがTransferの実行を開始したことを示します。TRANSFER_TASK_IDを使用して関連するTransfer Partitionタスクを確認できます。TRANSFER_TASK_IDは複数回変更され、1つのTransfer Partitionタスクには複数のTransferが含まれます。
ビュー
CDB_OB_TRANSFER_PARTITION_TASKSの照会結果が空の場合、ビューCDB_OB_TRANSFER_PARTITION_TASK_HISTORYを使用してタスク結果を確認できます。取得した
BALANCE_JOB_IDを使用して、ビューCDB_OB_BALANCE_JOBSまたはCDB_OB_BALANCE_JOB_HISTORYを照会し、関連するBALANCE_JOBの実行状態を確認します。ビュー
CDB_OB_BALANCE_JOBSは、すべてのテナントで現在実行中のロードバランシング作業を表示します。各テナントでは同時に1つのロードバランシング作業(BALANCE_JOB)のみが存在し、各作業は複数のロードバランシングタスク(TRANSFER_TASK)を生成します。ビューCDB_OB_BALANCE_JOB_HISTORYは、すべてのテナントで実行済みのロードバランシング作業の履歴を表示します。照会例は次のとおりです:obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_BALANCE_JOBS WHERE JOB_ID = 17304;obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_BALANCE_JOB_HISTORY WHERE JOB_ID = 17304;ここで、
17304は前段階で取得したBALANCE_JOB_IDに置き換える必要があります。照会結果の
STATUS列はBALANCE_JOBの実行状態を表示しています:DOING:ロードバランシング作業が実行中であることを示します。COMPLETED:ロードバランシング作業が正常に実行されたことを示します。CANCELING:ロードバランシング作業がキャンセル中であることを示します。CANCELED:ロードバランシング作業がキャンセルされたことを示します。
取得した
TRANSFER_TASK_IDを使用して、ビューCDB_OB_TRANSFER_TASKSまたはCDB_OB_TRANSFER_TASK_HISTORYを照会し、タスクに関連するTRANSFER_TASKの実行状態を確認します。ビュー
CDB_OB_TRANSFER_TASKSは、すべてのテナントで現在実行中のロードバランシングタスクを表示します。同時に複数のロードバランシングタスクが実行される可能性があり、これらのタスク(TRANSFER_TASK)はすべて同じロードバランシング作業(BALANCE_JOB)に属します。ビューCDB_OB_TRANSFER_TASK_HISTORYは、すべてのテナントで実行済みのロードバランシングタスクの履歴を表示します。照会例は次のとおりです:obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_TRANSFER_TASKS WHERE TASK_ID = 1;obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_TRANSFER_TASK_HISTORY WHERE TASK_ID = 1;ここで、
1は前の手順で取得したTRANSFER_TASK_IDに置き換える必要があります。照会結果の
STATUS列はTRANSFER_TASKの実行状態を表示しています:INIT:タスクの作成中であることを示します。START:Transferの実行を開始したことを示します。DOING:Transferの実行中であることを示します。ABORTED:Transferタスクの実行に失敗し、タスクが終了したことを示します。COMPLETED:Transferタスクの実行に成功したことを示します。FAILED:Transferタスクの実行に失敗したことを示します。CANCELED:Transferタスクがキャンセルされたことを示します。
取得した
TASK_IDを使用して、ビューCDB_OB_TRANSFER_PARTITION_TASK_HISTORYを照会し、Transfer Partitionタスクの結果を確認します。ビュー
CDB_OB_TRANSFER_PARTITION_TASK_HISTORYは、すべてのテナントで実行済みのTransfer Partitionタスクの履歴を表示します。obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_TRANSFER_PARTITION_TASK_HISTORY WHERE TASK_ID = 1;ここで、
1は前の手順で取得したTASK_IDに置き換える必要があります。照会結果の
STATUS列はTransfer Partitionタスクの結果を表示しています:COMPLETED:Transfer Partitionタスクが正常に実行されたことを示します。FAILED:Transfer Partitionタスクの実行に失敗し、タスクの失敗原因をCOMMENT列で確認できます。COMMENT列に一般的な情報は次のとおりです:LS not exist or may be in DROPPING/WAIT_OFFLINE status:Transferの目的となるエンドポイントのログストリームが存在しないか、またはDROPPING、WAITOFFLINEの状態にある可能性があります。LS status is not NORMAL or is in BLOCK_TABLET_IN state:Transferの目的となるエンドポイントのログストリームがNORMALの状態ではない可能性があります。例えば、CREATINGまたはCREATEDのような状態にあるか、またはログストリームがBLOCK_TABLET_INされており、移入できない可能性があります。Table has beed dropped:Transfer対象のパーティションが属するテーブルが削除されました。Partition has beed dropped:Transfer対象のパーティションが削除されました。Partition is already in dest LS:パーティションがすでにTransferの目的となるエンドポイントに存在します。Need retry, partition may be dropped:Transferの実行中にパーティションが削除されたため、システムは次のロードバランシングタスクが生成される際に再びパーティションが存在するかどうかを確認します。Need retry, partition may be dropped or be transferre:Transferの実行中にパーティションが存在しなくなった可能性があり、これはパーティションが削除されたか、またはパーティションがソース側のログストリーム上にない可能性があります。システムは次のロードバランシングタスクが生成される際に、パーティションが存在するかどうかを確認したり、Transferタスクを再生成する必要があるかどうかを判断します。
Transfer Partitionタスクが正常に実行された後、対応するパーティション情報を再度確認します。
obclient [oceanbase]> SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID FROM oceanbase.CDB_OB_TABLE_LOCATIONS WHERE TENANT_ID = 1006 AND DATABASE_NAME = 'SYS' AND TABLE_NAME= 'TBL1_LOG_R' AND PARTITION_NAME = 'M202005' LIMIT 1;照会結果は次のとおりです:
+----------+-----------+-----------+-------+ | TABLE_ID | OBJECT_ID | TABLET_ID | LS_ID | +----------+-----------+-----------+-------+ | 500003 | 500009 | 200006 | 1003 | +----------+-----------+-----------+-------+ 1 row in set結果から分かるように、
SYSデータベース内のテーブルTBL1_LOG_RのM202005パーティションは、以前の1002番のログストリームから1003番のログストリームに移動し、Transfer Partition操作が成功しました。
ユーザーテナント間のパーティション転送
本記事では、テナント mysql_tenant を例として操作ガイドを提供します。
MySQLモードのテナント管理者がデータベースに接続します。
接続例は以下のとおりです。実際の環境に合わせて接続してください。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -Aパーティション情報を確認します。
ビュー
DBA_OB_TABLE_LOCATIONSをクエリして、指定したパーティションのTABLET_ID、OBJECT_IDおよびLS_IDを取得します。非パーティションテーブルの
TABLET_ID、OBJECT_IDおよびLS_IDを取得するmysql_tenantテナントに非パーティションテーブルt1があると仮定すると、クエリ例は以下のとおりです:obclient [test]> SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID FROM oceanbase.DBA_OB_TABLE_LOCATIONS WHERE DATABASE_NAME = 'test' AND TABLE_NAME= 't1' LIMIT 1;クエリ結果は以下のとおりです:
+----------+-----------+-----------+-------+ | TABLE_ID | OBJECT_ID | TABLET_ID | LS_ID | +----------+-----------+-----------+-------+ | 500002 | 500002 | 200001 | 1001 | +----------+-----------+-----------+-------+ 1 row in setレベル1パーティションテーブルの
TABLET_ID、OBJECT_IDおよびLS_IDを取得するレベル1パーティションテーブルの場合、クエリ時に具体的なレベル1パーティション名を指定するだけで済みます。例:
mysql_tenantテナントにレベル1パーティションテーブルtbl1_lがあると仮定すると、クエリ例は以下のとおりです:obclient [test]> CREATE TABLE tbl1_l (col1 BIGINT PRIMARY KEY,col2 VARCHAR(50)) PARTITION BY LIST(col1) (PARTITION p0 VALUES IN (1, 2, 3), PARTITION p1 VALUES IN (5, 6), PARTITION p2 VALUES IN (DEFAULT) );このレベル1パーティションテーブルのパーティション
p1に関連する情報のクエリ例は以下のとおりです:obclient [oceanbase]> SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID FROM oceanbase.DBA_OB_TABLE_LOCATIONS WHERE DATABASE_NAME = 'test' AND TABLE_NAME= 'tbl1_l' AND PARTITION_NAME = 'p1' LIMIT 1;クエリ結果は以下のとおりです:
+----------+-----------+-----------+-------+ | TABLE_ID | OBJECT_ID | TABLET_ID | LS_ID | +----------+-----------+-----------+-------+ | 500012 | 500014 | 200009 | 1001 | +----------+-----------+-----------+-------+ 1 row in setレベル2パーティションテーブルの
TABLET_ID、OBJECT_IDおよびLS_IDを取得するレベル2パーティションテーブルの場合、クエリ時にレベル1パーティション名とレベル2パーティション名の両方を指定する必要があります。
mysql_tenantテナントにレベル2パーティションテーブルt2_f_rclcがあると仮定すると、クエリ例は以下のとおりです:obclient [test]> CREATE TABLE t2_f_rclc (col1 INT,col2 INT) PARTITION BY RANGE COLUMNS(col1) SUBPARTITION BY LIST COLUMNS(col2) (PARTITION p0 VALUES LESS THAN(100) (SUBPARTITION sp0 VALUES IN(1,3), SUBPARTITION sp1 VALUES IN(4,6), SUBPARTITION sp2 VALUES IN(7,9)), PARTITION p1 VALUES LESS THAN(200) (SUBPARTITION sp3 VALUES IN(1,3), SUBPARTITION sp4 VALUES IN(4,6), SUBPARTITION sp5 VALUES IN(7,9)) );このレベル2パーティションテーブルのレベル2パーティション
sp3に関連する情報のクエリ例は以下のとおりです:obclient [oceanbase]> SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID FROM oceanbase.DBA_OB_TABLE_LOCATIONS WHERE DATABASE_NAME = 'test' AND TABLE_NAME= 't2_f_rclc' AND PARTITION_NAME = 'P1' AND SUBPARTITION_NAME = 'sp3' LIMIT 1;クエリ結果は以下のとおりです:
+----------+-----------+-----------+-------+ | TABLE_ID | OBJECT_ID | TABLET_ID | LS_ID | +----------+-----------+-----------+-------+ | 500003 | 500009 | 200005 | 1002 | +----------+-----------+-----------+-------+ 1 row in set
Transferのターゲット側を選択します。
ビュー
DBA_OB_LSをクエリして、テナントのログストリーム状態と情報を取得します。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_LS;クエリ結果は以下のとおりです:
+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+ | LS_ID | STATUS | PRIMARY_ZONE | UNIT_GROUP_ID | LS_GROUP_ID | CREATE_SCN | DROP_SCN | SYNC_SCN | READABLE_SCN | FLAG | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+ | 1 | NORMAL | zone1 | 0 | 0 | NULL | NULL | 1701247658419109377 | 1701247658419109377 | | | 1001 | NORMAL | zone1 | 1003 | 1001 | 1701239750437064613 | NULL | 1701247658419109376 | 1701247658419109376 | | | 1002 | NORMAL | zone1 | 1004 | 1002 | 1701239750441114919 | NULL | 1701247658223204599 | 1701247658223204599 | | | 1003 | NORMAL | zone1 | 1005 | 1003 | 1701239750443869478 | NULL | 1701247659122731843 | 1701247659030755559 | | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+ 4 rows in setビュー
DBA_OB_TABLET_TO_LSをクエリして、ログストリーム上のTabletの分布情報を取得します。obclient [oceanbase]> SELECT LS_ID, COUNT(*) AS C FROM oceanbase.DBA_OB_TABLET_TO_LS GROUP BY LS_ID;クエリ結果は以下のとおりです:
+-------+------+ | LS_ID | C | +-------+------+ | 1 | 590 | | 1001 | 4 | | 1002 | 3 | | 1003 | 3 | +-------+------+ 4 rows in set上記の情報に基づいて、適切なログストリームを選択してTransferのターゲット側とします。
以下のコマンドを実行して、Transfer Partition操作を行います。
ALTER SYSTEM TRANSFER PARTITION TABLE_ID [=] table_id, OBJECT_ID [=] object_id TO LS ls_id;ここで、
table_id:テーブルID。object_id:パーティションの一意の識別子。ls_id:Transferターゲット側のログストリームID。tenant_name:Transfer対象のパーティションが属するテナント。
テナント
mysql_tenant内のtestデータベースのテーブルtbl1_lのp1パーティションを、現在の1001ログストリームから1003ログストリームへ移行する例は以下のとおりです。obclient [oceanbase]> ALTER SYSTEM TRANSFER PARTITION TABLE_ID = 500012, OBJECT_ID = 500014 TO LS 1003;Transfer Partitionコマンドの実行が成功すると、以下のビューを使用してタスクの状態を確認できます。
ビュー
DBA_OB_TRANSFER_PARTITION_TASKSをクエリして、タスクのTASK_ID、TRANSFER_TASK_IDおよびBALANCE_JOB_IDを取得します。ビュー
DBA_OB_TRANSFER_PARTITION_TASKSは、このテナント内で現在処理中のTransfer Partitionタスクを表示します。クエリ例は以下のとおりです:obclient [oceanbase]> SELECT TASK_ID, BALANCE_JOB_ID, TRANSFER_TASK_ID, STATUS FROM oceanbase.DBA_OB_TRANSFER_PARTITION_TASKS WHERE TABLE_ID = 500012 AND OBJECT_ID = 500014;クエリ結果の例は以下のとおりです:
+---------+----------------+------------------+--------+ | TASK_ID | BALANCE_JOB_ID | TRANSFER_TASK_ID | STATUS | +---------+----------------+------------------+--------+ | 1 | 26506 | 1 | DOING | +---------+----------------+------------------+--------+ 1 row in setクエリ結果の
STATUS値に基づいてタスクの状態を確認し、タスクの実行進捗をさらに確認できます:WAITING:タスクが待機状態で、まだスケジューリングされていません。INIT:タスクがBALANCE_JOBを構築したことを示します。BALANCE_JOB_IDを使用して関連するBALANCE_JOBの実行進捗を確認できます。DOING:タスクがTransferの実行を開始したことを示します。TRANSFER_TASK_IDを使用して関連するTransfer Partitionタスクを確認できます。TRANSFER_TASK_IDは複数回変更され、1つのTransfer Partitionタスクには複数回のTransferが含まれます。
ビュー
DBA_OB_TRANSFER_PARTITION_TASKSのクエリ結果が空の場合、ビューDBA_OB_TRANSFER_PARTITION_TASK_HISTORYを使用してタスク結果を確認できます。取得した
BALANCE_JOB_IDを使用して、ビューDBA_OB_BALANCE_JOBSまたはDBA_OB_BALANCE_JOB_HISTORYをクエリして、関連するBALANCE_JOBの実行状態を確認します。ビュー
DBA_OB_BALANCE_JOBSは、このテナントで現在実行中のロードバランシング作業を表示します。各テナントでは同時に1つのロードバランシング作業(BALANCE_JOB)のみが実行され、各作業は複数のロードバランシングタスク(TRANSFER_TASK)を生成します。ビューDBA_OB_BALANCE_JOB_HISTORYは、このテナントで実行済みのロードバランシング作業の履歴を表示します。クエリ例は以下のとおりです:obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_BALANCE_JOBS WHERE JOB_ID = 26506;obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_BALANCE_JOB_HISTORY WHERE JOB_ID = 26506;ここで、
26506は上記のステップで取得したBALANCE_JOB_IDに置き換えます。クエリ結果の
STATUS列は、BALANCE_JOBの実行状態を表示しています:DOING:ロードバランシング作業が実行中です。COMPLETED:ロードバランシング作業が正常に実行されました。CANCELING:ロードバランシング作業がキャンセル中です。CANCELED:ロードバランシング作業がキャンセルされました。
取得した
TRANSFER_TASK_IDを使用して、ビューDBA_OB_TRANSFER_TASKSまたはDBA_OB_TRANSFER_TASK_HISTORYをクエリして、タスクに関連するTRANSFER_TASKの実行状態を確認します。ビュー
DBA_OB_TRANSFER_TASKSは、このテナントで現在実行中のロードバランシングタスクを表示します。同時に複数のロードバランシングタスクが実行される可能性があり、これらのタスク(TRANSFER_TASK)はすべて同じロードバランシング作業(BALANCE_JOB)に属します。ビューDBA_OB_TRANSFER_TASK_HISTORYは、このテナントで実行済みのロードバランシングタスクの履歴を表示します。クエリ例は以下のとおりです:obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_TRANSFER_TASKS WHERE TASK_ID = 1;obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_TRANSFER_TASK_HISTORY WHERE TASK_ID = 1;ここで、
1は前段階で取得したTRANSFER_TASK_IDに置き換えます。クエリ結果の
STATUS列は、TRANSFER_TASKの実行状態を表示しています:INIT:タスクが作成中です。START:Transferの実行が開始されました。DOING:Transferが実行中です。ABORTED:Transferタスクの実行に失敗し、タスクが終了しました。COMPLETED:Transferタスクの実行に成功しました。FAILED:Transferタスクの実行に失敗しました。CANCELED:Transferタスクがキャンセルされました。
取得した
TASK_IDを使用して、ビューDBA_OB_TRANSFER_PARTITION_TASK_HISTORYをクエリして、Transfer Partitionタスクの結果を確認します。ビュー
DBA_OB_TRANSFER_PARTITION_TASK_HISTORYは、このテナントで実行済みのTransfer Partitionタスクの履歴を表示します。クエリ例は以下のとおりです:obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_TRANSFER_PARTITION_TASK_HISTORY WHERE TASK_ID = 1;ここで、
1は前段階で取得したTASK_IDに置き換えます。クエリ結果の
STATUS列は、Transfer Partitionタスクの結果を表示しています:COMPLETED:Transfer Partitionタスクの実行に成功しました。FAILED:Transfer Partitionタスクの実行に失敗しました。タスクの失敗原因を確認するには、COMMENT列を参照してください。COMMENT列に一般的な情報は以下のとおりです:LS not exist or may be in DROPPING/WAIT_OFFLINE status:Transferターゲット側のログストリームが存在しないか、DROPPING、WAITOFFLINEの状態にある可能性があります。LS status is not NORMAL or is in BLOCK_TABLET_IN state:Transferターゲット側のログストリームがNORMALの状態ではない可能性があります。例えば、CREATINGまたはCREATEDのような状態にある場合、またはログストリームがBLOCK_TABLET_INされており、移入できない可能性があります。Table has beed dropped:Transfer対象のパーティションが属するテーブルが削除されました。Partition has beed dropped:Transfer対象のパーティションが削除されました。Partition is already in dest LS:パーティションがすでにTransferターゲット側にあります。Need retry, partition may be dropped:Transfer実行中にパーティションが削除されたため、システムは次のロードバランシングタスク生成時にパーティションが存在するかどうか再確認します。Need retry, partition may be dropped or be transferre:Transfer実行中にパーティションが存在しなくなったため、パーティションが削除されたか、またはパーティションがソース側のログストリーム上にない可能性があります。システムは次のロードバランシングタスク生成時にパーティションが存在するかどうかを確認するか、Transferタスクを再生成します。
Transfer Partitionタスクの実行が成功したら、再度対応するパーティション情報を確認します。
obclient [oceanbase]> SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID FROM oceanbase.DBA_OB_TABLE_LOCATIONS WHERE DATABASE_NAME = 'test' AND TABLE_NAME= 'tbl1_l' AND PARTITION_NAME = 'p1' LIMIT 1;クエリ結果は以下のとおりです:
+----------+-----------+-----------+-------+ | TABLE_ID | OBJECT_ID | TABLET_ID | LS_ID | +----------+-----------+-----------+-------+ | 500012 | 500014 | 200009 | 1003 | +----------+-----------+-----------+-------+ 1 row in set結果から、
testデータベースのテーブルtbl1_lのp1パーティションが、以前の1001ログストリームから1003ログストリームへ移行され、Transfer Partition操作が成功したことがわかります。
Oracleモード
このドキュメントでは、テナント oracle_tenant を例に、操作の手順を説明します。
Oracleモードのテナント管理者がデータベースに接続します。
接続例は以下のとおりです。実際の環境に応じて変更してください。
obclient -h10.xx.xx.xx -P2883 -usys@oracle_tenant#obdemo -p***** -Aパーティション情報の確認を行います。
ビュー
DBA_OB_TABLE_LOCATIONSをクエリし、指定されたパーティションのTABLET_ID、OBJECT_IDおよびLS_IDを取得します。非パーティションテーブルの
TABLET_ID、OBJECT_IDおよびLS_IDの取得oracle_tenantテナント内に非パーティションテーブルT1が存在する場合、クエリ例は以下のとおりです:obclient [SYS]> SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID FROM SYS.DBA_OB_TABLE_LOCATIONS WHERE DATABASE_NAME = 'SYS' AND TABLE_NAME= 'T1' AND ROWNUM = 1;クエリ結果は次のとおりです:
+----------+-----------+-----------+-------+ | TABLE_ID | OBJECT_ID | TABLET_ID | LS_ID | +----------+-----------+-----------+-------+ | 500002 | 500002 | 200001 | 1001 | +----------+-----------+-----------+-------+ 1 row in setレベル1パーティションテーブルの
TABLET_ID、OBJECT_IDおよびLS_IDの取得レベル1パーティションテーブルの場合、クエリ時に具体的なレベル1パーティション名を指定するだけで済みます。例:
oracle_tenantテナント内にレベル1パーティションテーブルTBL1_LOG_Rが存在すると仮定します。obclient [SYS]> CREATE TABLE tbl1_log_r(log_id INT,log_date DATE NOT NULL DEFAULT SYSDATE) PARTITION BY RANGE(log_date) (PARTITION M202001 VALUES LESS THAN(TO_DATE('2020/02/01','YYYY/MM/DD')) , PARTITION M202002 VALUES LESS THAN(TO_DATE('2020/03/01','YYYY/MM/DD')) , PARTITION M202003 VALUES LESS THAN(TO_DATE('2020/04/01','YYYY/MM/DD')) , PARTITION M202004 VALUES LESS THAN(TO_DATE('2020/05/01','YYYY/MM/DD')) , PARTITION M202005 VALUES LESS THAN(TO_DATE('2020/06/01','YYYY/MM/DD')) , PARTITION M202006 VALUES LESS THAN(TO_DATE('2020/07/01','YYYY/MM/DD')) , PARTITION M202007 VALUES LESS THAN(TO_DATE('2020/08/01','YYYY/MM/DD')) , PARTITION M202008 VALUES LESS THAN(TO_DATE('2020/09/01','YYYY/MM/DD')) , PARTITION M202009 VALUES LESS THAN(TO_DATE('2020/10/01','YYYY/MM/DD')) , PARTITION M202010 VALUES LESS THAN(TO_DATE('2020/11/01','YYYY/MM/DD')) , PARTITION M202011 VALUES LESS THAN(TO_DATE('2020/12/01','YYYY/MM/DD')) , PARTITION M202012 VALUES LESS THAN(TO_DATE('2021/01/01','YYYY/MM/DD')) , PARTITION MMAX VALUES LESS THAN (MAXVALUE) );このレベル1パーティションテーブル内のパーティション
M202005に関連する情報をクエリする例は次のとおりです:obclient [SYS]> SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID FROM SYS.DBA_OB_TABLE_LOCATIONS WHERE DATABASE_NAME = 'SYS' AND TABLE_NAME= 'TBL1_LOG_R' AND PARTITION_NAME = 'M202005' AND ROWNUM = 1;クエリ結果は次のとおりです:
+----------+-----------+-----------+-------+ | TABLE_ID | OBJECT_ID | TABLET_ID | LS_ID | +----------+-----------+-----------+-------+ | 500003 | 500009 | 200006 | 1002 | +----------+-----------+-----------+-------+ 1 row in setレベル2パーティションテーブルの
TABLET_ID、OBJECT_IDおよびLS_IDの取得レベル2パーティションテーブルの場合、クエリ時にはレベル1パーティション名とレベル2パーティション名の両方を指定する必要があります。
oracle_tenantテナント内にレベル2パーティションテーブルT2_F_RLが存在すると仮定します。obclient [SYS]> CREATE TABLE t2_f_rl(col1 INT,col2 VARCHAR2(50)) PARTITION BY RANGE(col1) SUBPARTITION BY LIST(col2) (PARTITION p0 VALUES LESS THAN(100) (SUBPARTITION sp0 VALUES('01'), SUBPARTITION sp1 VALUES('02') ), PARTITION p1 VALUES LESS THAN(200) (SUBPARTITION sp2 VALUES('01'), SUBPARTITION sp3 VALUES('02'), SUBPARTITION sp4 VALUES('03') ) );このレベル2パーティションテーブル内のレベル2パーティション
SP2に関連する情報をクエリする例は次のとおりです:obclient [SYS]> SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID FROM SYS.DBA_OB_TABLE_LOCATIONS WHERE DATABASE_NAME = 'SYS' AND TABLE_NAME= 'T2_F_RL' AND PARTITION_NAME = 'P1' AND SUBPARTITION_NAME = 'SP2' AND ROWNUM = 1;クエリ結果は次のとおりです:
+----------+-----------+-----------+-------+ | TABLE_ID | OBJECT_ID | TABLET_ID | LS_ID | +----------+-----------+-----------+-------+ | 500018 | 500023 | 200017 | 1003 | +----------+-----------+-----------+-------+ 1 row in set
Transferのターゲット側を選択します。
ビュー
DBA_OB_LSをクエリし、テナントのログストリーム状態と情報を取得します。obclient [SYS]> SELECT * FROM SYS.DBA_OB_LS;クエリ結果は次のとおりです:
+-----------+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+ | TENANT_ID | LS_ID | STATUS | PRIMARY_ZONE | UNIT_GROUP_ID | LS_GROUP_ID | CREATE_SCN | DROP_SCN | SYNC_SCN | READABLE_SCN | FLAG | +-----------+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+ | 1006 | 1 | NORMAL | zone1 | 0 | 0 | NULL | NULL | 1701244663685197789 | 1701244663685197789 | | | 1006 | 1001 | NORMAL | zone1 | 1006 | 1001 | 1701239786827662637 | NULL | 1701244663685197789 | 1701244663685197789 | | | 1006 | 1002 | NORMAL | zone1 | 1007 | 1002 | 1701239786831568305 | NULL | 1701244664066906860 | 1701244664066906859 | | | 1006 | 1003 | NORMAL | zone1 | 1008 | 1003 | 1701239786834300282 | NULL | 1701244664175263949 | 1701244664175263948 | | +-----------+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+ 4 rows in setビュー
DBA_OB_TABLET_TO_LSをクエリし、ログストリーム上のTabletの分布情報を取得します。obclient [SYS]> SELECT LS_ID, COUNT(*) AS C FROM SYS.DBA_OB_TABLET_TO_LS GROUP BY LS_ID;クエリ結果は次のとおりです:
+-------+------+ | LS_ID | C | +-------+------+ | 1 | 578 | | 1001 | 7 | | 1002 | 5 | | 1003 | 7 | +-------+------+ 4 rows in set上記の情報に基づいて、適切なログストリームを選択してTransferのターゲット側とします。
以下のコマンドを実行して、Transfer Partition操作を実行します。
ALTER SYSTEM TRANSFER PARTITION TABLE_ID [=] table_id, OBJECT_ID [=] object_id TO LS ls_id;ここで:
table_id:テーブルID。object_id:パーティションの一意な識別子。ls_id:Transferのターゲット側のログストリームID。tenant_name:Transfer対象のパーティションが属するテナント。
テナント
oracle_tenant内のSYSデータベースのテーブルTBL1_LOG_RのM202005パーティションを、現在の1002ログストリームから1003ログストリームに移行する例は次のとおりです。obclient [SYS]> ALTER SYSTEM TRANSFER PARTITION TABLE_ID = 500003, OBJECT_ID = 500009 TO LS 1003;Transfer Partitionコマンドが正常に実行されると、以下のビューを使用してタスクのステータスを確認できます。
ビュー
DBA_OB_TRANSFER_PARTITION_TASKSをクエリし、タスクのTASK_ID、TRANSFER_TASK_IDおよびBALANCE_JOB_IDを取得します。ビュー
DBA_OB_TRANSFER_PARTITION_TASKSは、このテナント内で現在処理中のTransfer Partitionタスクを表示します。クエリ例は次のとおりです:obclient [SYS]> SELECT TASK_ID, BALANCE_JOB_ID, TRANSFER_TASK_ID, STATUS FROM SYS.DBA_OB_TRANSFER_PARTITION_TASKS WHERE TABLE_ID = 500003 AND OBJECT_ID = 500009;クエリ結果の例は次のとおりです:
+---------+----------------+------------------+--------+ | TASK_ID | BALANCE_JOB_ID | TRANSFER_TASK_ID | STATUS | +---------+----------------+------------------+--------+ | 1 | 17304 | 1 | DOING | +---------+----------------+------------------+--------+ 1 row in setクエリ結果の
STATUS値に基づいてタスクのステータスを確認し、タスクの実行進捗をさらに確認できます:WAITING:タスクが待機状態で、まだスケジュールが開始されていません。INIT:タスクがBALANCE_JOBを構築したことを示します。BALANCE_JOB_IDを使用して関連するBALANCE_JOBの実行進捗を確認できます。DOING:タスクがTransferの実行を開始したことを示します。TRANSFER_TASK_IDを使用して関連するTransfer Partitionタスクを確認できます。TRANSFER_TASK_IDは複数回変更される可能性があり、1つのTransfer Partitionタスクには複数回のTransferが含まれます。
ビュー
DBA_OB_TRANSFER_PARTITION_TASKSのクエリ結果が空の場合、ビューDBA_OB_TRANSFER_PARTITION_TASK_HISTORYを使用してタスク結果を確認できます。取得した
BALANCE_JOB_IDを使用して、ビューDBA_OB_BALANCE_JOBSまたはDBA_OB_BALANCE_JOB_HISTORYをクエリし、関連するBALANCE_JOBの実行状態を確認します。ビュー
DBA_OB_BALANCE_JOBSは、このテナント内で現在実行中のロードバランシング作業を表示します。各テナントは同時に1つのロードバランシング作業(BALANCE_JOB)のみが存在し、各作業は複数のロードバランシングタスク(TRANSFER_TASK)を生成します。ビューDBA_OB_BALANCE_JOB_HISTORYは、このテナントで実行済みのロードバランシング作業の履歴を表示します。クエリ例は次のとおりです:obclient [SYS]> SELECT * FROM SYS.DBA_OB_BALANCE_JOBS WHERE JOB_ID = 17304;obclient [SYS]> SELECT * FROM SYS.DBA_OB_BALANCE_JOB_HISTORY WHERE JOB_ID = 17304;ここで、
17304は前段階で取得したBALANCE_JOB_IDに置き換える必要があります。クエリ結果の
STATUS列はBALANCE_JOBの実行状態を表示しています:DOING:ロードバランシング作業が実行中であることを示します。COMPLETED:ロードバランシング作業が正常に実行されたことを示します。CANCELING:ロードバランシング作業がキャンセル中であることを示します。CANCELED:ロードバランシング作業がキャンセルされたことを示します。
取得した
TRANSFER_TASK_IDを使用して、ビューDBA_OB_TRANSFER_TASKSまたはDBA_OB_TRANSFER_TASK_HISTORYをクエリし、タスクに関連するTRANSFER_TASKの実行状態を確認します。ビュー
DBA_OB_TRANSFER_TASKSは、このテナント内で現在実行中のロードバランシングタスクを表示します。同時に複数のロードバランシングタスクが実行されている可能性があり、これらのタスク(TRANSFER_TASK)はすべて同じロードバランシング作業(BALANCE_JOB)に属します。ビューDBA_OB_TRANSFER_TASK_HISTORYは、このテナントで実行済みのロードバランシングタスクの履歴を表示します。クエリ例は次のとおりです:obclient [SYS]> SELECT * FROM SYS.DBA_OB_TRANSFER_TASKS WHERE TASK_ID = 1;obclient [SYS]> SELECT * FROM SYS.DBA_OB_TRANSFER_TASK_HISTORY WHERE TASK_ID = 1;ここで、
1は前の手順で取得したTRANSFER_TASK_IDに置き換える必要があります。クエリ結果の
STATUS列はTRANSFER_TASKの実行状態を表示しています:INIT:タスクの作成中であることを示します。START:Transferの実行が開始されたことを示します。DOING:Transferの実行中であることを示します。ABORTED:Transferタスクの実行に失敗し、タスクが終了したことを示します。COMPLETED:Transferタスクの実行に成功したことを示します。FAILED:Transferタスクの実行に失敗したことを示します。CANCELED:Transferタスクがキャンセルされたことを示します。
取得した
TASK_IDを使用して、ビューDBA_OB_TRANSFER_PARTITION_TASK_HISTORYをクエリし、Transfer Partitionタスクの結果を確認します。ビュー
DBA_OB_TRANSFER_PARTITION_TASK_HISTORYは、このテナントで実行済みのTransfer Partitionタスクの履歴を表示します。クエリ例は次のとおりです:obclient [SYS]> SELECT * FROM SYS.DBA_OB_TRANSFER_PARTITION_TASK_HISTORY WHERE TASK_ID = 1;ここで、
1は前の手順で取得したTASK_IDに置き換える必要があります。クエリ結果の
STATUS列はTransfer Partitionタスクの結果を表示しています:COMPLETED:Transfer Partitionタスクが正常に実行されたことを示します。FAILED:Transfer Partitionタスクの実行に失敗しました。タスクの失敗原因を確認するには、COMMENT列を参照してください。COMMENT列に一般的な情報は次のとおりです:LS not exist or may be in DROPPING/WAIT_OFFLINE status:Transferのターゲット側のログストリームは存在しないか、DROPPING、WAITOFFLINEの状態にある可能性があります。LS status is not NORMAL or is in BLOCK_TABLET_IN state:Transferのターゲット側のログストリームはNORMALの状態ではない可能性があります。例えば、CREATINGまたはCREATEDのような状態にある場合、またはログストリームがBLOCK_TABLET_INされており、移行できない可能性があります。Table has beed dropped:Transfer対象のパーティションが属するテーブルが削除されました。Partition has beed dropped:Transfer対象のパーティションが削除されました。Partition is already in dest LS:パーティションはすでにTransferのターゲット側にあります。Need retry, partition may be dropped:Transfer実行中にパーティションが削除されたため、システムは次の負荷分散タスク生成時にパーティションが存在するかどうか再確認します。Need retry, partition may be dropped or be transferre:Transfer実行中にパーティションが存在しなくなったため、パーティションが削除されたか、またはパーティションがソース側のログストリーム上にない可能性があります。システムは次の負荷分散タスク生成時にパーティションが存在するかどうかまたはTransferタスクを再生成する必要があるかどうかを確認します。
Transfer Partitionタスクが正常に実行された後、対応するパーティション情報を再度確認します。
obclient [SYS]> SELECT TABLE_ID AS TABLE_ID, OBJECT_ID, TABLET_ID, LS_ID FROM SYS.DBA_OB_TABLE_LOCATIONS WHERE DATABASE_NAME = 'SYS' AND TABLE_NAME= 'T2_F_RL' AND PARTITION_NAME = 'P1' AND SUBPARTITION_NAME = 'SP2' AND ROWNUM = 1;クエリ結果は次のとおりです:
+----------+-----------+-----------+-------+ | TABLE_ID | OBJECT_ID | TABLET_ID | LS_ID | +----------+-----------+-----------+-------+ | 500003 | 500009 | 200006 | 1003 | +----------+-----------+-----------+-------+ 1 row in set結果から、
SYSデータベースのテーブルTBL1_LOG_RのM202005パーティションが、以前の1002ログストリームから1003ログストリームに移行され、Transfer Partition操作が成功したことがわかります。