自動的なロードバランシングでは、ユーザーの特定のパーティションに対する集約や分散の要件を満たせない場合、Transfer Partition操作を手動で実行できます。
使用上の制限と注意事項
パーティション転送操作を実行するユーザーは
ALTER SYSTEM権限が必要です。権限の詳細については、ユーザーと権限の概要を参照してください。パーティション転送操作はプライマリテナントでのみ実行でき、かつユーザーテナント内のパーティションへの転送のみ可能です。
テナントの転送機能を無効にした場合(つまり、テナントの構成パラメータ
enable_transferの値がfalseの場合)、そのテナントでTRANSFER PARTITIONステートメントを実行するとエラーが発生します。既に実行済みのTRANSFER PARTITIONステートメントについては、対応するパーティション転送タスクがキャンセルされる可能性があります。システムテーブルに対してパーティション転送操作を実行することはできません。
システムテナント内のユーザーテーブルに対してパーティション転送操作を実行することはできません。
通常テーブルをブロードキャストログストリームに転送することはできず、レプリケーションテーブルを通常ログストリームに転送することもできません。
非独立パーティションの転送はサポートされていません。例えば、ローカルインデックステーブルのパーティションやLOBテーブルのパーティションは転送できません。
同一のパーティションに対して、パーティション転送操作が完了する前に再度パーティション転送操作を開始することはできません。
現在のクラスタで既にバランスジョブ(Balance Job)が処理中の場合、手動でトリガーされたパーティション転送タスクはすぐにスケジュールされません。パーティション転送タスクをできるだけ早くスケジュールしたい場合は、そのバランスジョブタスクをキャンセルすることができます。バランスジョブタスクのキャンセル手順の詳細については、バランスジョブのキャンセルを参照してください。
前提条件
パーティション転送を行う前に、転送機能を有効にする必要があります。転送機能はテナントレベルの構成パラメータ
enable_transferによって制御され、デフォルト値はtrueで、転送機能が有効であることを示します。構成パラメータenable_transferの詳細な説明と設定については、enable_transferを参照してください。パーティション転送戦略と自動バランス調整戦略が競合する可能性があるため、パーティションの位置を固定するために、パーティション転送操作を実行する前に自動バランス調整戦略を無効にすることを推奨します。つまり、対応するテナントの構成パラメータ
enable_rebalanceの値をfalseに設定します。構成パラメータenable_rebalanceの詳細な説明と設定については、enable_rebalanceを参照してください。パーティション転送操作自体は構成パラメータ
enable_rebalanceの制御を受けませんが、enable_rebalanceとenable_transferの両方の値がtrueの場合、ユーザーが特定のパーティションを対応するログストリームに移行した後、システムの自動バランス調整戦略がそのパーティションを他のログストリームに再移行する可能性があります。
システムテナントによるパーティションの転送
rootユーザーでクラスタのsysテナントにログインします。接続例は以下のとおりです。データベースへの接続時は、実際の環境に合わせてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aビュー
DBA_OB_TENANTSをクエリし、対象テナントのTENANT_IDを取得します。obclient(root@sys)[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をクエリすることで、テーブル内の指定されたパーティションに対応するTABLE_ID、OBJECT_ID、およびLS_IDを取得できます。非パーティションテーブルにおける指定パーティションの
TABLE_ID、OBJECT_ID、およびLS_IDの取得oracle_tenantテナントに非パーティションテーブルT1が存在する場合、クエリ例は以下のとおりです:obclient(root@sys)[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パーティションテーブルにおける指定パーティションの
TABLE_ID、OBJECT_ID、およびLS_IDの取得パーティションテーブルでは、クエリ時に具体的なパーティション名を指定するだけで済みます。
oracle_tenantテナントにパーティションテーブルTBL1_LOG_Rが存在する場合を想定します。obclient(SYS@oracle_tenant)[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(root@sys)[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セカンダリパーティションテーブルにおけるセカンダリパーティションの
TABLE_ID、OBJECT_ID、およびLS_IDの取得セカンダリパーティションテーブルでは、クエリ時にパーティション名とセカンダリパーティション名の両方を指定する必要があります。
oracle_tenantテナントにサブパーティションテーブルT2_F_RLが存在することを前提とします。obclient(SYS@oracle_tenant)[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(root@sys)[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(root@sys)[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 | UNIT_LIST | +-----------+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+-----------+ | 1006 | 1 | NORMAL | zone1 | 0 | 0 | NULL | NULL | 1701244663685197789 | 1701244663685197789 | | | | 1006 | 1001 | NORMAL | zone1 | 0 | 1001 | 1701239786827662637 | NULL | 1701244663685197789 | 1701244663685197789 | | 1001 | | 1006 | 1002 | NORMAL | zone1 | 0 | 1002 | 1701239786831568305 | NULL | 1701244664066906860 | 1701244664066906859 | | 1002 | | 1006 | 1003 | NORMAL | zone1 | 0 | 1003 | 1701239786834300282 | NULL | 1701244664175263949 | 1701244664175263948 | | 1003 | +-----------+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+-----------+ 4 rows in setビュー
CDB_OB_TABLET_TO_LSを照会し、ログストリーム上のTabletの分布情報を取得します。obclient(root@sys)[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先として選択します。
以下のコマンドを実行して、Transfer Partition操作を実行します。
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(root@sys)[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は、すべてのテナントで現在処理中のパーティション転送タスクを表示します。クエリ例は以下のとおりです:obclient(root@sys)[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_TASK_IDに基づいて、関連するパーティション転送タスクを確認できます。TRANSFER_TASK_IDは複数回変更される場合があり、1つのパーティション転送タスクには複数回の転送が含まれることがあります。
ビュー
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(root@sys)[oceanbase]> SELECT * FROM oceanbase.CDB_OB_BALANCE_JOBS WHERE JOB_ID = 17304;obclient(root@sys)[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(root@sys)[oceanbase]> SELECT * FROM oceanbase.CDB_OB_TRANSFER_TASKS WHERE TASK_ID = 1;obclient(root@sys)[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(root@sys)[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:転送先のログストリームが存在しないか、DROPPINGまたはWAITOFFLINE状態にある可能性があります。LS status is not NORMAL or is in BLOCK_TABLET_IN state:転送先のログストリームがNORMAL状態ではない可能性があります。例えば、CREATINGやCREATEDなどの状態にあるか、ログストリームがBLOCK_TABLET_IN状態になっており、移行できません。Table has beed dropped:転送対象のパーティションが属するテーブルが削除されました。Partition has beed dropped:転送対象のパーティションが削除されました。Partition is already in dest LS:パーティションは既に転送先に存在します。Need retry, partition may be dropped:転送実行中にパーティションが削除された場合、システムは次回ロードバランシングタスクを生成する際に、パーティションが存在するかどうか再確認します。Need retry, partition may be dropped or be transferre:転送実行中にパーティションが存在しなくなった場合、パーティションが削除されたか、またはパーティションがソース側のログストリーム上にない可能性があります。システムは次回ロードバランシングタスクを生成する際に、パーティションの存在を確認するか、転送タスクを再生成する必要があります。
Transfer Partitionタスクの実行が成功した後、対応するパーティション情報を再度確認します。
obclient(root@sys)[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をクエリし、指定したパーティションのTABLE_ID、OBJECT_ID、LS_IDを取得します。非パーティションテーブルの
TABLE_ID、OBJECT_ID、LS_IDの取得mysql_tenantテナントに非パーティションテーブルt1が存在する場合、クエリ例は以下のとおりです:obclient(root@mysql_tenant)[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パーティションテーブルの
TABLE_ID、OBJECT_ID、LS_IDの取得パーティションテーブルの場合、クエリ時には特定のパーティション名を指定するだけで済みます。例:
mysql_tenantテナントにパーティションテーブルtbl1_lが存在する場合を想定します。obclient(root@mysql_tenant)[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) );このパーティションテーブル内のパーティション
p1に関連する情報をクエリする例は以下のとおりです:obclient(root@mysql_tenant)[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サブパーティションテーブルの
TABLE_ID、OBJECT_ID、LS_IDの取得サブパーティションテーブルの場合、クエリ時にはパーティション名とサブパーティション名の両方を指定する必要があります。
mysql_tenantテナントにサブパーティションテーブルt2_f_rclcが存在する場合を想定します。obclient(root@mysql_tenant)[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)) );このサブパーティションテーブルのサブパーティション
sp3に関する情報を照会する例は以下のとおりです:obclient(root@mysql_tenant)[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(root@mysql_tenant)[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 | UNIT_LIST | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+-----------+ | 1 | NORMAL | zone1 | 0 | 0 | NULL | NULL | 1701247658419109377 | 1701247658419109377 | | | | 1001 | NORMAL | zone1 | 0 | 1001 | 1701239750437064613 | NULL | 1701247658419109376 | 1701247658419109376 | | 1001 | | 1002 | NORMAL | zone1 | 0 | 1002 | 1701239750441114919 | NULL | 1701247658223204599 | 1701247658223204599 | | 1002 | | 1003 | NORMAL | zone1 | 0 | 1003 | 1701239750443869478 | NULL | 1701247659122731843 | 1701247659030755559 | | 1003 | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+-----------+ 4 rows in setビュー
DBA_OB_TABLET_TO_LSを照会し、ログストリーム上のTabletの分布情報を取得します。obclient(root@mysql_tenant)[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先として適切なログストリームを選択します。
以下のコマンドを実行して、Partition Transfer操作を実行します。
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(root@mysql_tenant)[oceanbase]> ALTER SYSTEM TRANSFER PARTITION TABLE_ID = 500012, OBJECT_ID = 500014 TO LS 1003;Partition Transferコマンドの実行が成功した後、以下のビューでタスクの状態を確認できます。
ビュー
DBA_OB_TRANSFER_PARTITION_TASKSを照会し、タスクのTASK_ID、TRANSFER_TASK_ID、BALANCE_JOB_IDを取得します。ビュー
DBA_OB_TRANSFER_PARTITION_TASKSは、現在テナント内で処理中のパーティション転送タスクを表示します。クエリ例は以下のとおりです:obclient(root@mysql_tenant)[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_TASK_IDに基づいて、関連するパーティション転送タスクを確認できます。TRANSFER_TASK_IDは複数回変更される場合があり、1つのパーティション転送タスクには複数回の転送が含まれることがあります。
ビュー
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(root@mysql_tenant)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_BALANCE_JOBS WHERE JOB_ID = 26506;obclient(root@mysql_tenant)[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(root@mysql_tenant)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_TRANSFER_TASKS WHERE TASK_ID = 1;obclient(root@mysql_tenant)[oceanbase]> SELECT * FROM oceanbase.DBA_OB_TRANSFER_TASK_HISTORY WHERE TASK_ID = 1;ここで、
1は前の手順で取得したTRANSFER_TASK_IDに置き換える必要があります。クエリ結果の
STATUS列は、TRANSFER_TASKの実行状態を示しています。INIT: タスクの作成中であることを示します。START: 転送の実行開始を示します。DOING: 転送の実行中であることを示します。ABORTED: 転送タスクの実行に失敗し、タスクが終了したことを示します。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(root@mysql_tenant)[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:転送先のログストリームが存在しないか、DROPPINGまたはWAITOFFLINE状態にある可能性があります。LS status is not NORMAL or is in BLOCK_TABLET_IN state:転送先のログストリームがNORMAL状態ではない可能性があります。例えば、CREATINGやCREATEDなどの状態にあるか、ログストリームがBLOCK_TABLET_IN状態になっており、移行できません。Table has beed dropped:転送対象のパーティションが属するテーブルが削除されました。Partition has beed dropped:転送対象のパーティションが削除されました。Partition is already in dest LS:パーティションは既に転送先に存在します。Need retry, partition may be dropped:転送実行中にパーティションが削除された場合、システムは次回ロードバランシングタスクを生成する際に、パーティションが存在するかどうか再度確認します。Need retry, partition may be dropped or be transferre:転送実行時にパーティションが存在しない場合、パーティションが削除されたか、またはパーティションがソース側のログストリーム上にない可能性があります。システムは次回ロードバランシングタスクを生成する際に、パーティションの存在を確認するか、転送タスクを再生成する必要があります。
Transfer Partitionタスクの実行が成功した後、対応するパーティション情報を再度確認します。
obclient(root@mysql_tenant)[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_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@oracle_tenant)[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パーティションテーブルの
TABLET_ID、OBJECT_ID、およびLS_IDの取得パーティションテーブルの場合、クエリ時には具体的なパーティション名を指定するだけで済みます。例:
oracle_tenantテナントにパーティションテーブルTBL1_LOG_Rが存在すると仮定します。obclient(sys@oracle_tenant)[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(sys@oracle_tenant)[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セカンダリ・パーティション分割テーブルの
TABLET_ID、OBJECT_ID、およびLS_IDを取得します。セカンダリ・パーティション分割テーブルの場合、クエリ時にはパーティション名とサブパーティション名の両方を指定する必要があります。
oracle_tenantテナントにセカンダリ・パーティション分割テーブルT2_F_RLが存在すると仮定します。obclient(sys@oracle_tenant)[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(sys@oracle_tenant)[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@oracle_tenant)[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 | UNIT_LIST | +-----------+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+-----------+ | 1006 | 1 | NORMAL | zone1 | 0 | 0 | NULL | NULL | 1701244663685197789 | 1701244663685197789 | | | | 1006 | 1001 | NORMAL | zone1 | 0 | 1001 | 1701239786827662637 | NULL | 1701244663685197789 | 1701244663685197789 | | 1001 | | 1006 | 1002 | NORMAL | zone1 | 0 | 1002 | 1701239786831568305 | NULL | 1701244664066906860 | 1701244664066906859 | | 1002 | | 1006 | 1003 | NORMAL | zone1 | 0 | 1003 | 1701239786834300282 | NULL | 1701244664175263949 | 1701244664175263948 | | 1003 | +-----------+-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+------+-----------+ 4 rows in setビュー
DBA_OB_TABLET_TO_LSを照会し、ログストリーム上のTabletの分散情報を取得します。obclient(sys@oracle_tenant)[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先として適切なログストリームを選択します。
以下のコマンドを実行して、Partition Transfer操作を実行します。
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@oracle_tenant)[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@oracle_tenant)[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@oracle_tenant)[SYS]> SELECT * FROM SYS.DBA_OB_BALANCE_JOBS WHERE JOB_ID = 17304;obclient(sys@oracle_tenant)[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タスクがキャンセルされたことを表します。
4.取得した
TASK_IDを使用してビューDBA_OB_TRANSFER_PARTITION_TASK_HISTORYをクエリし、パーティション転送タスクの結果を確認します。ビュー
DBA_OB_TRANSFER_PARTITION_TASK_HISTORYは、テナントで実行されたパーティション転送タスクの履歴を表示します。クエリ例は以下のとおりです:obclient(sys@oracle_tenant)[SYS]> SELECT * FROM SYS.DBA_OB_TRANSFER_PARTITION_TASK_HISTORY WHERE TASK_ID = 1;ここで、
1は前の手順で取得したTASK_IDに置き換える必要があります。クエリ結果の
STATUS列は、パーティション転送タスクの結果を示しています:COMPLETED:パーティション転送タスクが正常に実行されたことを示します。FAILED:パーティション転送タスクが失敗したことを示します。COMMENT列を参照することで、タスク失敗の原因をさらに確認できます。COMMENT列によく見られる情報は以下のとおりです:LS not exist or may be in DROPPING/WAIT_OFFLINE status:転送先のログストリームが存在しないか、DROPPINGまたはWAITOFFLINE状態にある可能性があります。LS status is not NORMAL or is in BLOCK_TABLET_IN state:転送先のログストリームがNORMAL状態ではない可能性があります。例えば、CREATINGやCREATEDなどの状態にあるか、ログストリームがBLOCK_TABLET_IN状態になっており、移行できません。Table has beed dropped:転送対象のパーティションが属するテーブルが削除されました。Partition has beed dropped:転送対象のパーティションが削除されました。Partition is already in dest LS:パーティションは既に転送先に存在します。Need retry, partition may be dropped:転送実行時にパーティションが削除された場合、システムは次回ロードバランシングタスクを生成する際に、パーティションが存在するかどうか再確認します。Need retry, partition may be dropped or be transferre:転送実行時にパーティションが存在しなかった場合、パーティションが削除されたか、ソース側のログストリームに存在しない可能性があります。システムは次回ロードバランシングタスクを生成する際に、パーティションの存在を確認するか、転送タスクを再生成する必要があります。
6.パーティション転送タスクが正常に実行された後、対応するパーティション情報を再度確認します。
```shell
obclient(sys@oracle_tenant)[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;
```
クエリ結果は次のとおりです:
```shell
+----------+-----------+-----------+-------+
| TABLE_ID | OBJECT_ID | TABLET_ID | LS_ID |
+----------+-----------+-----------+-------+
| 500003 | 500009 | 200006 | 1003 |
+----------+-----------+-----------+-------+
1 row in set
```
結果によると、`SYS`データベースのテーブル`TBL1_LOG_R`の`M202005`パーティションは、以前の`1002`番ログストリームから`1003`番ログストリームに移行され、パーティション転送操作が成功しました。