すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for OceanBase:Oracle データベースから OceanBase Database の Oracle テナントにデータを移行する

最終更新日:Apr 04, 2025

このトピックでは、データ転送サービスを使用して、Oracle データベースから OceanBase Database の Oracle テナントにデータを移行する方法について説明します。

重要

データ移行タスクが非アクティブな状態のまま長時間残っていると、増分ログの保存期間によっては復元できない場合があります。非アクティブな状態とは、[失敗][停止][完了] です。データ転送サービスは、関連リソースを再利用するために、3 日間以上非アクティブな状態のままであるデータ移行タスクを解放します。データ移行タスクのアラートを設定し、タスクの例外をタイムリーに処理することをお勧めします。

前提条件

  • データ転送サービスには、クラウド リソースにアクセスするための権限があります。詳細については、「データ転送のロールに権限を付与する」をご参照ください。

  • ソース Oracle データベースとターゲット OceanBase Database の Oracle テナントに、データ移行専用のデータベース ユーザーを作成し、対応する権限をユーザーに付与しました。詳細については、「データベース ユーザーを作成する」をご参照ください。

  • ターゲット OceanBase Database の Oracle テナントのデータベースを作成しました。OceanBase Database は、テーブルとカラムの移行のみをサポートしています。事前にターゲット データベースを作成する必要があります。

  • ソース Oracle インスタンスで ARCHIVELOG を有効にし、データ転送サービスが増分データ レプリケーションを開始する前にログ ファイルを切り替えました。

  • ソース Oracle インスタンスに LogMiner をインストールし、LogMiner が正しく動作していることを確認しました。

    LogMiner を使用すると、Oracle インスタンスのアーカイブ ログからデータを取得できます。

  • Oracle インスタンスで、データベース レベルまたはテーブル レベルの補足ログ機能が有効になっていることを確認しました。

  • データベース レベルでプライマリ キーと一意キーの補足ログを有効にすると、同期する必要のないテーブルによって不要なログが大量に生成される場合、ログを取得する LogMiner Reader と Oracle データベースへの負荷が増加します。そのため、データ転送サービスでは、Oracle データベースのプライマリ キーと一意キーに対してのみ、テーブル レベルの補足ログを有効にすることができます。ただし、移行タスクの作成時に ETL (抽出、変換、書き出し) オプションを指定してプライマリ キー列と一意キー列以外の列をフィルタリングする場合は、対応する列またはすべての列の補足ログを有効にしてください。

  • データ リスクを回避するために、たとえば NTP (Network Time Protocol) サービスを使用して、ソース Oracle サーバーとデータ転送サービスを実行しているサーバー間でクロック同期が設定されています。Oracle RAC (Real Application Cluster) の場合、Oracle インスタンス間でもクロック同期が必要です。

制限事項

  • ソース データベースの制限事項

    スキーマ移行または完全移行中に、データベースまたはテーブル スキーマを変更する DDL 操作を実行しないでください。そうしないと、データ移行タスクが中断される可能性があります。

  • データ転送サービスは、Oracle 10g、11g、12c、18c、19c をサポートしています。バージョン 12c 以降では、コンテナデータベース (CDB) とプラガブル データベース (PDB) が提供されています。

  • データ転送サービスは、通常のテーブルとビューの移行のみをサポートしています。

  • データ転送サービスは、オブジェクトのデータベース名、テーブル名、カラム名が特殊文字を含まない ASCII エンコードである場合にのみ、オブジェクトの移行をサポートします。特殊文字とは、改行、スペース、および次の文字です。 . | " ' ` ( ) = ; / & \.

  • データ転送サービスは、ターゲット データベースのトリガーをサポートしていません。ターゲット データベースにトリガーが存在する場合、データ移行は失敗する可能性があります。

  • データ移行タスクが中断されないようにするため、データ転送サービスは、インデックス構成表(IOT)の Oracle データベースからの移行をサポートしていません。

  • データ型の制限事項

    • データ転送サービスは、すべてのカラムが LOB 型 (BLOB、CLOB、または NCLOB) であるテーブルの増分同期をサポートしていません。

    • テーブルにプライマリ キーがないが LOB 型のデータが含まれている場合、テーブルのリバース インクリメントのデータ品質が低下する可能性があります。

  • データ ソース識別子とユーザー アカウントは、データ転送システムでグローバルに一意である必要があります。

  • データ転送サービスは、1 日あたり最大 5 TB の Oracle データベースの増分ログを解析できます。

  • バージョン 11g 以前の Oracle データベースでは、名前が 30 バイトを超えるデータベース オブジェクトを作成することはできません。リバース インクリメント中に、OceanBase Database の Oracle テナントでこの制限を超えるデータベース オブジェクトを作成することはできません。

  • デフォルトでは、データ転送サービスは、バージョン 12c 以降の Oracle データベースから、名前が 30 バイトを超えるスキーマ、テーブル、カラムなどのデータベース オブジェクトの移行をサポートしていません。名前が 30 バイトを超えるデータベース オブジェクトを移行するには、OceanBase テクニカル サポートにお問い合わせください。

  • データ転送サービスは、ソース Oracle データベースの一部の UPDATE 文をサポートしていません。たとえば、次の UPDATE 文はサポートされていません。

     UPDATE TABLE_NAME SET KEY=KEY+1;

    上記の例では、TABLE_NAME はテーブル名、KEY は NUMERIC 型のプライマリ キー列です。

  • 自己管理データベースが配置されている VPC (Virtual Private Cloud) は、OceanBase データベースと同じリージョンにある必要があります。

考慮事項

  • Oracle データベースの増分同期を実行する場合は、Oracle データベースの各アーカイブ ファイルのサイズが 2 GB 未満であることを確認することをお勧めします。

  • アーカイブ ファイルは、Oracle データベースに 2 日以上保存する必要があります。そうしないと、アーカイブ ファイルの数が急激に増加した場合、必要なアーカイブ ファイルがないために復元が失敗する可能性があります。

  • ソース Oracle データベースでプライマリ キーを交換する DML 操作が実行されると、データ転送サービスがログを解析するときにエラーが発生します。これにより、データをターゲット データベースに移行するときにデータ損失が発生します。プライマリ キーを交換する DML 文の例を次に示します。

    update test set c1=(case when c1=1 then 2 when c1=2 then 1 end) where c1 in (1,2);
  • データ転送サービスでは、AL32UTF8、AL16UTF16、ZHS16GBK、GB18030 のいずれかの文字セットを使用するソース Oracle インスタンスからデータを移行できます。

    ソース データベースで UTF-8 文字セットを使用する場合は、文字化けを避けるために、ターゲット データベースで UTF-8 または UTF-16 などの互換性のある文字セットを使用することをお勧めします。

  • Oracle データベースから OceanBase Database の Oracle テナントにデータを移行する場合は、データのインポートとエクスポート、ALTER TABLE、FLASHBACK TABLE、パーティションの分割または圧縮など、ROWID 値を変更する可能性のある操作をテーブルで実行しないでください。

    パーティション キーの更新やパーティションの圧縮など、ROWID 値を変更する操作がソース Oracle データベースで実行されると、ターゲット OceanBase Database の Oracle テナントで非表示列依存の ROWID が生成され、データ損失につながる可能性があります。

  • ノード間またはクライアントとサーバー間でクロックが同期していない場合、増分同期またはリバース インクリメント中のレイテンシが不正確になる可能性があります。

    たとえば、クロックが標準時刻よりも早い場合、レイテンシは負になる可能性があります。クロックが標準時刻よりも遅い場合、レイテンシは正になる可能性があります。

  • 中国ではかつてサマータイム (DST) が採用されていたため、1986 年から 1991 年の DST 期間、および 1988 年 4 月 10 日から 17 日の期間に生成された TIMESTAMP(6) WITH TIME ZONE 型のデータでは、ソースとターゲットの間に 1 時間の時差が生じることがあります。

  • DDL 同期が無効になっているときにターゲットの一意なインデックスを変更した場合は、データの不整合を避けるためにデータ移行タスクを再起動する必要があります。

  • データ移行タスクでフォワード スイッチオーバーが無効になっている場合は、ターゲット データベースから一意なインデックスと疑似カラムを削除します。一意なインデックスと疑似カラムを削除しないと、データの書き込みができなくなり、ダウンストリーム システムにデータをインポートするときに疑似カラムが再度生成され、ソース データベースの疑似カラムと競合が発生します。

    データ移行タスクでフォワード スイッチオーバーが有効になっている場合、データ転送サービスは、移行タスクのタイプに基づいて非表示カラムと一意なインデックスを自動的に削除します。詳細については、「データ転送サービスの非表示カラム メカニズム」をご参照ください。

  • 増分同期中にソース Oracle データベースにプライマリ キーのない新しいテーブルが追加された場合、データ転送サービスは、ターゲット OceanBase Database の Oracle テナントのテーブルに追加された非表示カラムと一意なインデックスを自動的に削除しません。リバース移行タスクを開始する前に、手動で削除する必要があります。

    増分同期中に追加されたプライマリ キーのないテーブルを確認するには、logs/msg/ ディレクトリにある manual_table.log ファイルを表示します。

  • ソース データベースとターゲット データベースで異なる文字セットを使用している場合、スキーマ移行中にフィールド長の拡張ポリシーが提供されます。たとえば、フィールド長は 1.5 倍に拡張され、長さの単位は BYTE から CHAR に変更されます。

    これにより、ソース データベースで異なる文字セットを使用してエンコードされたデータをターゲット データベースに移行できます。ただし、カットオーバー後、データ長が長すぎるため、リバース インクリメント中にデータをソース データベースに書き戻すことができない場合があります。

  • ソース データベースのデータ型にタイム ゾーン情報 (TIMESTAMP WITH TIME ZONE など) が含まれている場合は、ターゲット データベースがタイム ゾーンをサポートし、対応するタイム ゾーン情報が含まれていることを確認してください。そうしないと、データ移行中にデータの不整合が発生する可能性があります。

  • 複数のテーブルを集約する場合は、次の点に注意してください。

    • 一致ルールを指定して、ソース データベースとターゲット データベース間のマッピングを設定することをお勧めします。

    • ターゲットでスキーマを手動で作成することをお勧めします。データ転送サービスを使用してターゲットでスキーマを作成する場合は、スキーマ移行手順で失敗したオブジェクトをスキップします。

  • Oracle データベースのごみ箱にあるオブジェクトを確認します。ごみ箱に 100 個を超えるオブジェクトが含まれている場合、内部テーブル クエリがタイムアウトする可能性があります。ごみ箱にあるオブジェクトをクリアする必要があります。

    • ごみ箱が有効になっているかどうかをクエリします。

      SELECT Value FROM V$parameter WHERE Name = 'recyclebin';
    • ごみ箱にあるオブジェクトの数をクエリします。

      SELECT COUNT(*) FROM RECYCLEBIN;
  • データ移行タスクの作成時に [増分同期] のみを選択した場合、データ転送サービスでは、ソースデータベースのアーカイブログを少なくとも 48 時間保持する必要があります。

    データ移行タスクの作成時に [フル移行][増分同期] を選択した場合、データ転送サービスでは、ソースデータベースのアーカイブログを 7 日間以上保持する必要があります。 データ転送サービスが増分ログを取得できない場合、データ移行タスクが失敗したり、移行後にソースデータベースとターゲットデータベースの間でデータの不整合が発生したりする可能性があります。

  • ソース データベースまたはターゲット データベースに大文字と小文字のみが異なるテーブル オブジェクトが含まれている場合、ソース データベースまたはターゲット データベースで大文字と小文字が区別されないため、データ移行の結果が予期したとおりにならない可能性があります。

  • ターゲットが OceanBase Database V4.1.0 以降の MySQL テナントの場合、Latin1 文字セットの移行がサポートされます。

サポートされているソース インスタンス タイプとターゲット インスタンス タイプ

次の表で、OB_Oracle は OceanBase Database の Oracle テナントを表します。

ソース

ターゲット

Oracle (VPC 内の自己管理データベース)

OB_Oracle (OceanBase クラスタ インスタンス)

Oracle (パブリック IP アドレスを持つ自己管理データベース)

OB_Oracle (OceanBase クラスタ インスタンス)

データ型のマッピング

重要
  • CLOB 型と BLOB 型のデータのサイズは 48 MB 未満である必要があります。

  • ROWID、BFILE、XMLType、UROWID、UNDEFINED、UDT 型のデータは移行できません。

  • LONG 型または LONG RAW 型のデータを含むテーブルでは、増分同期はサポートされていません。

Oracle データベースのデータ型

OceanBase Database の Oracle テナントのデータ型

CHAR(n CHAR)

CHAR(n CHAR)

CHAR(n BYTE)

CHAR(n BYTE)

NCHAR(n)

NCHAR(n)

VARCHAR2(n)

VARCHAR2(n)

NVARCHAR2(n)

NVARCHAR2(n)

NUMBER(n)

NUMBER(n)

NUMBER (p, s)

NUMBER(p,s)

RAW

RAW

CLOB

CLOB

NCLOB

NVARCHAR2

説明

OceanBase Database の Oracle テナントでは、NVARCHAR2 フィールドは空の値をサポートしていません。ソースに空の値が存在する場合は、NULL 文字列として表されます。

BLOB

BLOB

REAL

FLOAT

FLOAT(n)

FLOAT

BINARY_FLOAT

BINARY_FLOAT

BINARY_DOUBLE

BINARY_DOUBLE

DATE

DATE

TIMESTAMP

TIMESTAMP

TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH TIME ZONE

TIMESTAMP WITH LOCAL TIME ZONE

TIMESTAMP WITH LOCAL TIME ZONE

INTERVAL YEAR(p) TO MONTH

INTERVAL YEAR(p) TO MONTH

INTERVAL DAY(p) TO SECOND

INTERVAL DAY(p) TO SECOND

LONG

CLOB

重要

この型では、増分同期はサポートされていません。

LONG RAW

BLOB

重要

この型では、増分同期はサポートされていません。

SDO_GEOMETRY

SDO_GEOMETRY

ソース Oracle データベースのシステム設定を確認および変更する

次の操作を実行します。

  1. ソース Oracle データベースで ARCHIVELOG を有効にします。

  2. ソース Oracle データベースで補足ログを有効にします。

  3. (オプション) ソース Oracle データベースのシステム パラメータを設定します。

ソース Oracle データベースで ARCHIVELOG を有効にする

SELECT log_mode FROM v$database;

log_mode フィールドの値は、archivelogである必要があります。そうでない場合は、次の手順を実行して設定を変更します。

  1. 次のコマンドを実行して ARCHIVELOG を有効にします。

    SHUTDOWN IMMEDIATE;
    STARTUP MOUNT;
    ALTER DATABASE ARCHIVELOG;
    ALTER DATABASE OPEN;
  2. 次のコマンドを実行して、アーカイブ ログのパスとクォータを表示します。

    recovery file のパスとクォータを表示します。 パラメータを比較的大きな値に設定することをお勧めします。ARCHIVELOG を有効にした後、Recovery Manager (RMAN) などの方法を使用してアーカイブ ログを定期的にクリアする必要があります。

    SHOW PARAMETER db_recovery_file_dest;
  3. ビジネス ニーズに基づいてアーカイブ ログのクォータを変更します。

    ALTER SYSTEM SET db_recovery_file_dest_size =50G SCOPE = BOTH;

ソース Oracle データベースで補足ログを有効にする

LogMiner Reader では、Oracle データベースでテーブル レベルの補足ログのみを有効にすることができます。移行中にソース Oracle データベースにテーブルを作成し、そのテーブルを移行する必要がある場合は、DML 操作を実行する前に、プライマリ キーと一意キーの補足ログを有効にする必要があります。そうしないと、データ転送サービスはログが不完全であることを示す例外を返します。

ソース データベースとターゲット データベース間でインデックスに不整合がある場合、ETL の結果が予期したとおりにならない場合、またはパーティション テーブルの移行パフォーマンスが低下する場合は、次の操作を実行する必要があります。

  • データベースレベルまたはテーブルレベルの supplemental_log_data_pk パラメーターと supplemental_log_data_ui パラメーターを追加します。

  • 列の補足ログを有効にします。

    • ソース データベースとターゲット データベースのプライマリ キーまたは一意キーに関連するすべての列の補足ログを有効にして、ソース データベースとターゲット データベース間でインデックスに不整合が生じる問題を解決します。

    • ETL が関係している場合は、ETL 関連の列を追加して、ETL の結果が予期したとおりにならない問題を解決します。

    • ターゲット テーブルがパーティション テーブルの場合は、パーティション列を追加して、パーティション プルーニングの失敗による書き込みパフォーマンスの低下を解決します。

    次の文を実行して、上記の操作の結果を確認できます。

    SELECT log_group_type FROM all_log_groups WHERE OWNER = '<schema_name>' AND table_name = '<table_name>';

    確認結果に ALL COLUMN LOGGING が含まれている場合、確認は成功です。そうでない場合は、ALL_LOG_GROUP_COLUMNS テーブルには、先行するすべての列が含まれています。

    列の補足ログを有効にするためのステートメントの例を次に示します。

    ALTER TABLE <table_name> ADD SUPPLEMENTAL LOG GROUP <table_name_group> (c1, c2) ALWAYS;

次の表では、実行中のデータ移行タスクで DDL 操作を実行した場合に発生する可能性のあるリスクと、対応する解決策を示します。

操作

リスク

解決策

CREATE TABLE (同期する必要があるテーブルを作成する)

ターゲット データベースのテーブルがパーティション テーブルである場合、ソース データベースとターゲット データベースのテーブル インデックスに不整合がある場合、または ETL が必要な場合、データ移行のパフォーマンスが影響を受け、ETL が期待どおりに動作しない可能性があります。

プライマリ キーと一意キーのデータベース レベルの補足ログを有効にする必要があります。関連する列の補足ログを手動で有効にします。

プライマリ キー、一意キー、またはパーティション列を追加、削除、または変更する、あるいは ETL 関連の列を変更する

これは、起動時に補足ログを有効にする必要があるというルールに違反しており、データの不整合または移行パフォーマンスの低下につながる可能性があります。

上記のルールに基づいて補足ログを有効にします。

LogMiner Reader は、次の方法を使用して補足ログが有効になっているかどうかを確認します。補足ログが有効になっていない場合、LogMiner Reader は終了します。

  • データベース レベルで supplemental_log_data_pksupplemental_log_data_ui を有効にします。

    次のコマンドを実行して、補足ログが有効になっているかどうかを確認します。戻り値が YES の場合、補足ログは有効です。

    SELECT supplemental_log_data_pk, supplemental_log_data_ui FROM v$database;

    補足ログが有効になっていない場合は、次の手順を実行します。

    1. 次の文を実行して補足ログを有効にします。

      ALTER DATABASE ADD supplemental log DATA(PRIMARY KEY, UNIQUE) columns;
    2. 補足ログを有効にした後、ARCHIVELOG モードへの切り替えを 2 回実行し、5 分以上待ってからタスクを開始します。Oracle RAC の場合は、インスタンスを交互に切り替えます。

      ALTER SYSTEM SWITCH LOGFILE;

      Oracle RAC では、1 つのインスタンスで ARCHIVELOG モードへの切り替えを複数回実行した後、次のインスタンスで ARCHIVELOG モードへの切り替えを実行すると、後者のインスタンスは補足ログが有効になる前に生成されたログを取得する場合があります。

  • 有効にする supplemental_log_data_pksupplemental_log_data_ui をテーブル レベルで。

    1. 次の文を実行して、supplemental_log_data_min がデータベース レベルで有効になっているかどうかを確認します。

      SELECT supplemental_log_data_min FROM v$database;

      戻り値が または IMPLICIT の場合、補足ログは有効です。

    2. 次の文を実行して、同期するテーブルに対してテーブル レベルの補足ログが有効になっているかどうかを確認します。

      SELECT log_group_type FROM all_log_groups WHERE OWNER = '<schema_name>' AND table_name = '<table_name>';

      補足ログの種類ごとに 1 行が返されます。結果は、ALL COLUMN LOGGING、またはPRIMARY KEY LOGGING UNIQUE KEY LOGGINGの両方を含む必要があります。

      テーブル レベルの補足ログが有効になっていない場合は、次の文を実行します。

      ALTER TABLE table_name ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE) COLUMNS;
    3. 補足ログを有効にした後、ARCHIVELOG モードへの切り替えを 2 回実行し、5 分以上待ってからタスクを開始します。Oracle RAC の場合は、インスタンスを交互に切り替えます。

      ALTER SYSTEM SWITCH LOGFILE;

(オプション) ソース Oracle データベースのシステム パラメータを設定する

を 1 に設定することをお勧めします。デフォルト値は通常 2 です。

  1. 次のいずれかの方法を使用して、_log_parallelism_max パラメータの値をクエリします。

    • 方法 1

      SELECT NAM.KSPPINM,VAL.KSPPSTVL,NAM.KSPPDESC FROM SYS.X$KSPPI NAM,SYS.X$KSPPSV VAL WHERE NAM.INDX= VAL.INDX AND NAM.KSPPINM LIKE '_%' AND UPPER(NAM.KSPPINM) LIKE '%LOG_PARALLEL%';
    • 方法 2

      SELECT VALUE FROM v$parameter WHERE name = '_log_parallelism_max';
  2. パラメータの値を変更します。パラメータを変更するためのステートメントは、データベース環境によって異なります。

    • Oracle RAC データベースの場合:

      ALTER SYSTEM SET "_log_parallelism_max" = 1 SID = '*' SCOPE = spfile;
    • Oracle RAC 以外のデータベースの場合:

      ALTER SYSTEM SET "_log_parallelism_max" = 1 SCOPE = spfile;

    Oracle 10g で パラメータの値を変更するときに、エラー メッセージ write to SPFILE requested but no SPFILE specified at startup が返された場合は、次の操作を実行します。

    CREATE SPFILE FROM PFILE;
    SHUTDOWN IMMEDIATE;
    STARTUP;
    SHOW PARAMETER SPFILE;
  3. 値を変更した後 の値を変更した後、インスタンスを再起動し、ARCHIVELOG モードへの切り替えを 2 回実行し、少なくとも 5 分待ってからタスクを開始します。

手順

  1. ApsaraDB for OceanBase コンソール にログインし、データ移行タスクを購入します。

    詳細については、「データ移行タスクを購入する」をご参照ください。

  2. [データ転送] > [データ移行] を選択します。表示されるページで、データ移行タスクの [設定] をクリックします。

    image.png

    既存のタスクの設定を参照する場合は、[設定の参照] をクリックします。詳細については、「データ移行タスクの設定を参照する」をご参照ください。

  3. [ソースとターゲットを選択] ページで、パラメータを設定します。

    パラメータ

    説明

    移行タスク名

    数字と文字の組み合わせに設定することをお勧めします。スペースを含めることはできず、長さは 64 文字以下にする必要があります。

    ソース

    Oracle データ ソースを作成済みの場合は、ドロップダウン リストから選択します。そうでない場合は、ドロップダウン リストの 新しいデータソースOracle データソースを作成する をクリックし、右側に表示されるダイアログ ボックスで作成します。パラメータの詳細については、「」をご参照ください。

    ターゲット

    OceanBase Database の Oracle テナントをデータ ソースとして作成済みの場合は、ドロップダウン リストから選択します。そうでない場合は、ドロップダウン リストの 新しいデータ ソースOceanBase データソースを作成する をクリックし、右側に表示されるダイアログ ボックスで作成します。パラメータの詳細については、「」をご参照ください。

    タグ (オプション)

    ドロップダウン リストからターゲット タグを選択します。[タグの管理] をクリックして、タグを作成、変更、および削除することもできます。詳細については、「タグを使用してデータ移行タスクを管理する」をご参照ください。

  4. [次へ] をクリックします。[移行タイプの選択] ページで、[同期トポロジ][一方向同期] を選択します。

    データ転送サービスは、一方向同期と双方向同期の両方をサポートしています。 このトピックでは、一方向同期タスクを設定する方法について説明します。双方向同期の詳細については、「双方向同期タスクを設定する」をご参照ください。

  5. 現在のデータ移行タスクのタイプを選択します。

    [同期トポロジ][一方向同期] を選択した場合、サポートされる移行タイプは、スキーマ移行、完全移行、増分同期、完全検証、およびリバース インクリメントです。

    image

    移行タイプ

    説明

    スキーマ移行

    スキーマ移行タスクが開始されると、データ転送サービスは、データベース オブジェクト (テーブル、インデックス、制約、コメント、ビューなど) の定義をソース データベースからターゲット データベースに移行し、一時テーブルを自動的に除外します。

    完全移行

    完全移行タスクが開始されると、データ転送サービスは、ソース データベースのテーブルからターゲット データベースの対応するテーブルに既存のデータを移行します。フル移行GATHER_SCHEMA_STATSGATHER_TABLE_STATS を選択した場合は、データ移行の前に 文または 文を使用して Oracle データベースの統計情報を収集することをお勧めします。

    増分同期

    増分同期タスクが開始されると、データ転送サービスは、変更されたデータ (追加、変更、または削除されたデータ) をソース データベースからターゲット データベースの対応するテーブルに同期します。

    [増分同期] のオプションは、[DML 同期][DDL 同期] です。必要に応じてオプションを選択できます。詳細については、「DDL/DML 同期を設定する」をご参照ください。[増分同期] には次の制限があります。

    • 複数のテーブルを 1 つのテーブルにマージする場合、DDL 同期はサポートされません。

    • [DDL 同期] を選択した場合、データ転送サービスでサポートされていない DDL 操作をソース データベースで実行すると、データ移行が中断される可能性があります。

    • DDL 操作で新しい列を追加する場合は、データ移行の中断を防ぐために、列を NULL 許容として定義します。

    完全検証

    完全移行タスクと増分同期タスクが完了すると、データ転送サービスは自動的に完全検証タスクを開始し、ソース データベースとターゲット データベースのテーブルを検証します。

    • [完全検証] を選択した場合は、完全検証の前に Oracle データベースと OceanBase Database の Oracle テナントの統計情報を収集することをお勧めします。

    • [増分同期] を選択したが、[DML 同期] セクションですべての DML 操作を選択しなかった場合は、[完全検証] を選択できません。

    リバース インクリメント

    ビジネス データベースのスイッチオーバー後にターゲット データベースで行われたデータ変更は、リバース インクリメントによってソース データベースにリアルタイムで同期されます。

    通常、増分同期の構成はリバース インクリメントで再利用されます。必要に応じて、リバース インクリメントの構成をカスタマイズすることもできます。

  6. [次へ] をクリックします。[移行オブジェクトの選択] ページで、データ移行タスクの移行オブジェクトを指定します。

    [オブジェクトを指定] または [ルールに一致] を選択して、移行オブジェクトを指定できます。このトピックでは、[オブジェクトを指定] を使用して移行オブジェクトを指定する方法について説明します。一致ルールの詳細については、「一致ルールを設定および変更する」の一致ルールに関するセクションをご参照ください。

    重要
    • 移行するテーブルの名前、およびテーブル内の列の名前に中国語の文字を含めることはできません。

    • データベース名またはテーブル名に二重ドル記号 ($$) が含まれている場合、移行タスクを作成できません。

    • [移行タイプの選択] ページで [DDL 同期] を選択した場合は、[ルールに一致] オプションを使用して移行オブジェクトを選択することをお勧めします。こうすることで、移行ルールを満たすすべての新しいオブジェクトが同期されます。[オブジェクトを指定] オプションを使用して移行オブジェクトを選択した場合、新しいオブジェクトまたは名前が変更されたオブジェクトは同期されません。

    image.png

    1. [移行オブジェクトの選択] セクションで、[オブジェクトを指定] を選択します。

    2. 次の リストで、移行するオブジェクトを選択します。1 つ以上のデータベースのテーブルとビューを選択できます。[移行スコープを指定]移行するオブジェクトを選択します。 1 つ以上のデータベースのテーブルとビューを選択できます。

    3. クリック [>] して、[ターゲットオブジェクト] リストに追加します。

    データ転送サービスでは、テキスト ファイルからのオブジェクトのインポート、ターゲット オブジェクトの名前変更、行フィルタの設定、列情報の表示、および単一またはすべての移行オブジェクトの削除を行うことができます。

    説明

    移行オブジェクトを指定するために [一致ルール] を選択すると、指定した一致ルールの構文に基づいてオブジェクトの名前変更が実装されます。操作エリアでは、フィルター条件のみを設定できます。詳細については、「一致ルールを設定および変更する」をご参照ください。

    操作

    説明

    オブジェクトのインポート

    1. 右側のリストで、右上隅にある オブジェクトのインポート をクリックします。

    2. 表示されるダイアログボックスで、[OK] をクリックします。

      重要

      この操作を実行すると、以前の選択が上書きされます。注意して実行してください。

    3. オブジェクトのインポート ダイアログ ボックスで、移行するオブジェクトをインポートします。

      CSV ファイルをインポートして、データベースまたはテーブルの名前を変更し、行フィルタリング条件を設定できます。詳細については、「移行オブジェクトの設定をダウンロードおよびインポートする」をご参照ください。

    4. 検証する をクリックします。

      移行オブジェクトをインポートした後、その有効性を確認します。現在、列フィールド マッピングはサポートされていません。

    5. 検証に成功したら、[OK] をクリックします。

    オブジェクトの名前変更

    データ転送サービスでは、移行オブジェクトの名前を変更できます。詳細については、「データベース テーブルの名前を変更する」をご参照ください。

    設定の構成

    データ転送サービスでは、WHERE 条件を使用して行をフィルタリングできます。詳細については、「SQL 条件を使用してデータをフィルタリングする」をご参照ください。

    [列の表示] セクションで、移行オブジェクトの列情報を表示することもできます。

    1 つまたはすべてのオブジェクトを削除する

    データ転送サービスでは、データ マッピング中に右側のリストに追加された 1 つまたはすべての同期オブジェクトを削除できます。

    • 単一の移行オブジェクトを削除する

      右側のリストで、削除するオブジェクトにポインタを移動し、削除 をクリックして移行オブジェクトを削除します。

    • すべての移行オブジェクトを削除する

      右側のリストで、右上隅にある すべて削除OK をクリックします。表示されるダイアログ ボックスで、 をクリックしてすべての移行オブジェクトを削除します。

  7. [次へ] をクリックします。[移行オプション] ページで、パラメータを設定します。

    • 完全移行

      次の表では、完全移行のパラメータについて説明します。これらのパラメータは、[移行タイプの選択] ページで [一方向同期][完全移行] を順番に選択した場合にのみ表示されます。

      image

      パラメータ

      説明

      読み取りの同時実行性

      完全移行中にソースからデータを読み取るための同時実行性。最大値は 512 です。読み取りの同時実行性が高いと、ソースに過度の負荷がかかり、ビジネスに影響を与える可能性があります。

      書き込みの同時実行性

      完全移行中にターゲットにデータを書き込むための同時実行性。最大値は 512 です。書き込みの同時実行性が高いと、ターゲットに過度の負荷がかかり、ビジネスに影響を与える可能性があります。

      完全移行のレート制限

      必要に応じて、完全移行のレートを制限するかどうかを選択できます。完全移行のレートを制限することを選択した場合は、1 秒あたりのレコード数 (RPS) と 1 秒あたりのバイト数 (BPS) を指定する必要があります。RPS は、完全移行中にターゲットに移行されるデータ行の最大数を指定し、BPS は、完全移行中にターゲットに移行されるデータの最大バイト数を指定します。

      説明

      ここで指定する RPS 値と BPS 値は、調整のみに使用されます。実際の完全移行のパフォーマンスは、ソースとターゲットの設定やインスタンスの仕様などの要因によって異なります。

      ターゲット データベースの空でないテーブルの処理

      有効な値は、[無視][移行の停止] です。

      • [無視] を選択した場合、挿入するデータがターゲット テーブルの既存のデータと競合すると、データ転送サービスは競合するデータをログに記録し、既存のデータを保持します。

        重要

        [無視] を選択した場合、完全検証中に IN モードでデータがプルされます。この場合、ターゲットにソースに存在しないデータが含まれていると検証は適用されず、検証のパフォーマンスが低下します。

      • [移行の停止] を選択し、ターゲット テーブルにレコードが含まれている場合、完全移行中に移行がサポートされていないことを示すエラーが報告されます。この場合、移行を続行する前に、ターゲット テーブルのデータを処理する必要があります。

        重要

        エラーを知らせるダイアログ ボックスで [復元] をクリックすると、データ転送サービスはこのエラーを無視してデータの移行を続行します。注意して実行してください。

      事後インデックス作成を許可するかどうか

      完全移行の完了後にインデックスを作成するかどうかを指定します。事後インデックス作成により、完全移行に必要な時間を短縮できます。事後インデックス作成に関する考慮事項については、以下の説明を参照してください。

      重要
      • このパラメータは、スキーマ移行完全移行[移行タイプの選択] ページで と の両方を選択した場合にのみ表示されます。

      • 移行の完了後に作成できるのは、一意キー以外のインデックスのみです。

      • インデックスの作成中にターゲット OceanBase データベースから次のエラーが返された場合、データ転送サービスはエラーを無視し、インデックスが正常に作成されたと判断し、再度作成しません。

        • OceanBase Database の MySQL テナントのエラー メッセージ: Duplicate key name

        • OceanBase Database の Oracle テナントのエラー メッセージ: name is already used by an existing object

      ターゲットが OceanBase データベースで、このパラメータに [許可] を選択した場合は、次のパラメータを設定する必要があります。

      • 単一インデックスの DDL 同時実行性: 単一インデックスに対して許可される同時 DDL 操作の最大数。値が大きいほど、リソース消費量が多く、データ移行が速くなります。

      • インデックスの最大 DDL 並行性: システムが一度に呼び出すことができる、インデックス作成後の DDL 操作の最大数。

      事後インデックス作成が許可されている場合は、OceanBase Database のハードウェア条件と現在のビジネストラフィックに基づいて、CLI クライアントを使用してビジネステナントの次のパラメータを変更することをお勧めします。

      // ファイル メモリ バッファ サイズの制限を指定します。
      alter system set _temporary_file_io_area_size = '10' tenant = 'xxx'; 
      // OceanBase Database V4.x で調整を無効にします。
      alter system set sys_bkgd_net_percentage = 100;  
    • 増分同期

      次のパラメータは、[移行タイプの選択] ページで [一方向同期][増分同期] を順番に選択した場合にのみ表示されます。

      image

      パラメータ

      説明

      書き込みの同時実行性

      増分同期中にターゲットにデータを書き込むための同時実行性。最大値は 512 です。書き込みの同時実行性が高いと、ターゲットに過度の負荷がかかり、ビジネスに影響を与える可能性があります。

      増分同期のレート制限

      必要に応じて、増分同期のレートを制限するかどうかを選択できます。増分同期のレートを制限することを選択した場合は、RPS と BPS を指定する必要があります。RPS は、増分同期中にターゲットに同期されるデータ行の最大数を指定し、BPS は、増分同期中にターゲットに同期されるデータの最大バイト数を指定します。

      説明

      ここで指定する RPS 値と BPS 値は、調整のみに使用されます。実際の増分同期の性能は、ソースとターゲットの設定やインスタンスの仕様などの要因によって異なります。

      増分同期の開始タイムスタンプ

      • [フル移行]移行タイプを選択 ページで を選択した場合は、このパラメータは表示されません。

      • [増分同期] を選択したが [完全データ移行] を選択しなかった場合は、それ以降のデータを同期する時点を指定します。デフォルト値は現在のシステム時刻です。詳細については、「増分同期のタイムスタンプを設定する」をご参照ください。

    • リバース インクリメント

      次のパラメータは、[移行タイプの選択] ページで [一方向同期][リバース インクリメント] を順番に選択した場合にのみ表示されます。 デフォルトでは、増分同期の構成はリバース インクリメントで再利用されます。

      image

      増分同期の構成を再利用せず、必要に応じてリバース インクリメントを設定することもできます。

      パラメータ

      説明

      書き込みの同時実行性

      リバース インクリメント中にソースにデータを書き込むための同時実行性。最大値は 512 です。同時実行性が高いと、ソースに過度の負荷がかかり、ビジネスに影響を与える可能性があります。

      リバース インクリメントのレート制限

      必要に応じて、リバース インクリメントのレートを制限するかどうかを選択できます。リバース インクリメントのレートを制限することを選択した場合は、1 秒あたりのリクエスト数 (RPS) と 1 秒あたりのバイト数 (BPS) を指定する必要があります。RPS は、リバース インクリメント中にソースに同期されるデータ行の最大数を指定し、BPS は、リバース インクリメント中にソースに同期されるデータの最大バイト数を指定します。

      説明

      ここで指定する RPS 値と BPS 値は、調整のみに使用されます。実際のリバース インクリメントのパフォーマンスは、ソースとターゲットの設定やインスタンスの仕様などの要因によって異なります。

      増分同期の開始タイムスタンプ

      • 完全移行移行タイプを選択 ページで を選択した場合は、このパラメータは表示されません。

      • [増分同期] を選択したが [完全移行] を選択しなかった場合は、フォワード スイッチオーバーの開始タイムスタンプ (存在する場合) がデフォルトで使用されます。このパラメータは変更できません。

    • 詳細パラメータ

      image

      パラメータ

      説明

      エンコードと長さのオプション

      詳細な移行パラメータは、[移行タイプの選択] ページで [スキーマ移行] を選択し、ソース データベースとターゲット データベースで異なる文字セットを使用している場合にのみ表示されます。

      説明

      ソース データベースの文字セットがターゲット データベースの文字セットと異なる場合 (たとえば、ソース データベースの文字セットが GBK で、ターゲット データベースの文字セットが UTF-8 である場合など) は、フィールドが切り捨てられ、データの不整合が発生する可能性があります。

      [ターゲットでフィールドを自動的に拡張します。つまり、N バイトから 1.5N バイトに拡張します。] を選択した場合、変換後のデータが最大長の制限を超えると、制限まで切り捨てられます。

      NULL 以外のユニークキーのないテーブルに非表示列を追加する

      このパラメータは、Oracle データベースから OceanBase Database の Oracle テナントにデータを移行するタスクを作成するときに必要です。詳細については、「データ転送サービスの非表示列メカニズム」をご参照ください。

      ターゲット テーブルのストレージ タイプ

      このセクションは、OceanBase Database V4.3.0 以降の Oracle テナントにデータを移行する場合に、[移行タイプの選択] ページで [スキーマ移行] または [増分同期][DDL 同期] を選択した場合にのみ表示されます。

      ターゲット テーブル オブジェクトでサポートされているストレージ タイプは、[デフォルト][行ストレージ][列ストレージ][ハイブリッド列ストレージ] です。詳細については、「default_table_store_format」をご参照ください。

      説明

      [デフォルト] 値は、ターゲットのパラメータ設定に基づいて他のパラメータが自動的に設定されることを意味します。スキーマ移行のテーブル オブジェクトと増分 DDL 同期の新しいテーブル オブジェクトは、指定されたストレージ タイプに基づいて対応するスキーマに書き込まれます。

  8. [事前チェック] をクリックして、データ移行タスクの事前チェックを開始します。

    事前チェック 中に、データ転送サービスは、データベース ユーザーの読み取り権限と書き込み権限、およびデータベースのネットワーク接続を確認します。データ同期タスクは、すべてのチェック項目に合格した後にのみ開始できます。事前チェック中にエラーが返された場合は、次の操作を実行できます。

    • 問題を特定してトラブルシューティングし、事前チェックを再実行します。

    • 失敗した事前チェック項目の [アクション] 列で [スキップ] をクリックします。操作の結果を通知するダイアログボックスで、OK をクリックします。

  9. 事前チェックに合格したら、[タスクの開始] をクリックします。

    タスクをすぐに開始する必要がない場合は、[保存] をクリックします。後で [移行タスク] ページで、またはバッチ操作を実行することでタスクを開始できます。 バッチ操作の詳細については、「データ移行タスクのバッチ操作を実行する」をご参照ください。

    データ転送サービスでは、移行タスクの実行中に、移行オブジェクトとその行フィルタリング条件を変更できます。詳細については、「移行オブジェクトとそのフィルタ条件を表示および変更する」をご参照ください。データ移行タスクは、開始されると、選択した移行タイプに基づいて実行されます。詳細については、「移行の詳細を表示する」をご参照ください。

参考資料