OceanBase logo

OceanBase

トランザクション処理、分析、AIワークロードに最適な分散データベース

デプロイを自由に

OceanBase Cloud

OceanBaseの導入とスケーリングを最適化

エンタープライズ版

自社インフラ上での運用・管理に対応

オープンソース版を試す

コミュニティ版

開発者向けオープンソース分散データベース

OceanBase seekdb

AIネイティブなオープンソースの検索データベース

顧客事例

さまざまな業界の企業による導入事例を紹介します。

さらに見る
利用シーン別

あらゆるシナリオに対応するOLTP

ハイブリッドクラウドソリューション

大容量ストレージデータベースのコスト削減

リアルタイム分析混合ワークロード

複数インスタンスの統合

ドキュメント

会社概要

OceanBaseの企業情報、パートナーシップ、そして信頼性・セキュリティへの取り組みについて紹介します。

OceanBaseについて

法的情報

お問い合わせ

日本 - 日本語
International - English
中国站 - 简体中文
クラウドで始める

トランザクション処理、分析、AIワークロードに最適な分散データベース

デプロイを自由に

OceanBase Cloud

OceanBaseの導入とスケーリングを最適化

エンタープライズ版

自社インフラ上での運用・管理に対応

オープンソース版を試す

コミュニティ版

開発者向けオープンソース分散データベース

OceanBase seekdb

AIネイティブなオープンソースの検索データベース

顧客事例

さまざまな業界の企業による導入事例を紹介します。

さらに見る
利用シーン別

あらゆるシナリオに対応するOLTP

ハイブリッドクラウドソリューション

大容量ストレージデータベースのコスト削減

リアルタイム分析混合ワークロード

複数インスタンスの統合

OceanBaseの企業情報、パートナーシップ、そして信頼性・セキュリティへの取り組みについて紹介します。

OceanBaseについて

法的情報

お問い合わせ

クラウドで始める
编组
すべての製品
    • データベース
    • アイコンOceanBaseデータベース
アイコン

OceanBaseデータベース

V4.3.5

    OceanBase logo

    AI時代を支える分散データベース

    日本 - 日本語
    International - English
    中国站 - 简体中文
    プロダクト
    OceanBase Cloudエンタープライズ版コミュニティ版OceanBase seekdb
    会社概要
    OceanBaseについて法的情報お問い合わせ
    公式アカウント
    ConnpassXQiitaLumaGitHub

    © OceanBase 2026. All rights reserved

    クラウドサービス契約個人情報保護ポリシーセキュリティ
    お問い合わせ
    ドキュメントフィードバック
    1. ホーム
    2. OceanBaseデータベース
    3. V4.3.5
    アイコンOceanBaseデータベース
    V 4.3.5
    • V 4.3.5

    パーティションの移動

    最終更新日:2026-04-09 08:28:49  更新
    シェア
    このページの内容
    制限事項と注意点
    前提条件
    システムテナントのパーティション転送
    ユーザーテナント間のパーティション転送
    関連ドキュメント

    折りたたみ

    シェア

    自動的なロードバランシングが、ユーザーが特定のパーティションに対する集約や分散を満たすことができない場合、手動で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 の場合、あるパーティションを対応するログストリームに移動させた後、システムの自動バランシングポリシーによってそのパーティションが他のログストリームに再移動される可能性があります。

    システムテナントのパーティション転送

    1. root ユーザーを使用して、クラスタの sys テナントにログインします。

      接続例は以下のとおりです。実際の環境に基づいてデータベースに接続してください。

      obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A
      
    2. DBA_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
      
    3. パーティション情報を確認します。

      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
        
    4. Transferの目的となるエンドポイントを選択します。

      1. 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 set
        
      2. CDB_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の目的とするエンドポイントとします。

    5. 以下のコマンドを実行して、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';
      
    6. Transfer Partitionコマンドが正常に実行された後、以下のビューを使用してタスクの状態を確認できます。

      1. 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 を使用してタスク結果を確認できます。

      2. 取得した 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:ロードバランシング作業がキャンセルされたことを示します。
      3. 取得した 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タスクがキャンセルされたことを示します。
    7. 取得した 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タスクを再生成する必要があるかどうかを判断します。
    8. 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モード

    本記事では、テナント mysql_tenant を例として操作ガイドを提供します。

    1. MySQLモードのテナント管理者がデータベースに接続します。

      接続例は以下のとおりです。実際の環境に合わせて接続してください。

      obclient -h10.xx.xx.xx -P2883 -uroot@mysql_tenant#obdemo -p***** -A
      
    2. パーティション情報を確認します。

      ビュー 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
        
    3. Transferのターゲット側を選択します。

      1. ビュー 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
        
      2. ビュー 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のターゲット側とします。

    4. 以下のコマンドを実行して、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;
      
    5. Transfer Partitionコマンドの実行が成功すると、以下のビューを使用してタスクの状態を確認できます。

      1. ビュー 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 を使用してタスク結果を確認できます。

      2. 取得した 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:ロードバランシング作業がキャンセルされました。
      3. 取得した 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タスクがキャンセルされました。
      4. 取得した 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タスクを再生成します。
    6. 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 を例に、操作の手順を説明します。

    1. Oracleモードのテナント管理者がデータベースに接続します。

      接続例は以下のとおりです。実際の環境に応じて変更してください。

      obclient -h10.xx.xx.xx -P2883 -usys@oracle_tenant#obdemo -p***** -A
      
    2. パーティション情報の確認を行います。

      ビュー 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
        
    3. Transferのターゲット側を選択します。

      1. ビュー 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
        
      2. ビュー 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のターゲット側とします。

    4. 以下のコマンドを実行して、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;
      
    5. Transfer Partitionコマンドが正常に実行されると、以下のビューを使用してタスクのステータスを確認できます。

      1. ビュー 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 を使用してタスク結果を確認できます。

      2. 取得した 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:ロードバランシング作業がキャンセルされたことを示します。
      3. 取得した 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 をクエリし、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タスクを再生成する必要があるかどうかを確認します。
    6. 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操作が成功したことがわかります。

    関連ドキュメント

    • Transfer Partition タスクのキャンセル

    • Balance Job のキャンセル

    • CDB_OB_TABLE_LOCATIONS

    • DBA_OB_TABLE_LOCATIONS

    • CDB_OB_LS

    • DBA_OB_LS

    • CDB_OB_TABLET_TO_LS

    • DBA_OB_TABLET_TO_LS

    • CDB_OB_BALANCE_JOBS

    • DBA_OB_BALANCE_JOBS

    • CDB_OB_BALANCE_JOB_HISTORY

    • DBA_OB_BALANCE_JOB_HISTORY

    • CDB_OB_TRANSFER_TASKS

    • DBA_OB_TRANSFER_TASKS

    • CDB_OB_TRANSFER_TASK_HISTORY

    • DBA_OB_TRANSFER_TASK_HISTORY

    前のトピック

    データロードバランシングの概要
    最後

    次のトピック

    パーティション移動のキャンセル
    次
    このページの内容
    制限事項と注意点
    前提条件
    システムテナントのパーティション転送
    ユーザーテナント間のパーティション転送
    関連ドキュメント