OracleデータベースからOceanBaseデータベースのOracle互換モードへのデータ移行タスクを新規作成し、構造移行、全量移行、増分同期を通じて、ソースデータベースの既存業務データと増分データをOceanBaseデータベースのOracle互換モードに移行できます。
注意
データ移行タスクが長期間非アクティブ状態(タスク状態が 失敗、一時停止、または 完了)にある場合、増分ログの保持期間などの影響でタスクを再開できない可能性があります。データ移行システムは、非アクティブ状態が7日を超えるタスクを自動的に解放し、関連リソースを回収します。タスクに対してアラートを設定し、タスク関連の異常を速やかに処理することを推奨します。
前提条件
ターゲット側のOceanBaseデータベースのOracle互換モードで対応するスキーマが作成されていること。
Oracleソースインスタンスではアーカイブログが有効になっており、データ移行サービスの増分レプリケーション開始前にすでにログファイルの切り替えが行われていること。
OracleソースインスタンスにはLogMinerツールがインストールされており、正常に使用できること。
ターゲット側のOceanBaseクラスタインスタンスとテナントが作成されていること。詳細については、インスタンスの作成およびテナントの作成を参照してください。
ソース側とターゲット側に、データ移行タスク専用のデータベースユーザーが作成され、関連する権限が付与されていること。詳細については、ユーザー権限の説明を参照してください。
Oracleインスタンスでデータベースレベルまたはテーブルレベルのサプリメンタルログが有効になっていることを確認してください。
データベースレベルのPKおよびUKサプリメンタルログを有効にすると、同期不要のテーブルで不要なログが大量に生成される場合に、LogMiner Readerのログ取得負荷やOracle自身の負荷が増加します。そのため、データ移行サービスはOracleデータベースでテーブルレベルのPKおよびUKサプリメンタルログのみを有効にすることをサポートしています。ただし、移行タスクの作成時に非PK列または非UK列にETLフィルターが設定されている場合は、該当列のサプリメンタルログを有効にするか、すべての列のサプリメンタルログを直接有効にしてください。
Oracleマシンとデータ移行サービスマシン間で時刻同期(NTPサービスの設定など)が必要です。そうでない場合、データリスクが生じる可能性があります。Oracle RACの場合は、複数のOracleインスタンス間でも時刻同期が必要です。
利用制限
データ移行タスクの新規作成は、プロジェクトロールが プロジェクト所有者、プロジェクト管理者、または データサービス管理者 のユーザーのみが実行できます。
データ送信元データベースの操作制限
構造移行および全量移行段階では、データベースまたはテーブル構造変更のDDL操作を実行しないでください。そうでない場合、データ移行タスクが中断する可能性があります。
現在、データ移行はOracleデータベースの10G/11G/12C/18C/19Cバージョンをサポートしています。12C以降のバージョンには、コンテナデータベース(Container Database、CDB)とプラガブルデータベース(Pluggable Database、PDB)が含まれます。同時に、OceanBaseデータベースのOracle互換モードV2.x、V3.x、V4.xもサポートしています。
データ移行サービスは、通常のテーブルとビューの移行のみをサポートします。
データ移行サービスは、データベース名、テーブル名、列名がASCIIコードであり、特殊文字(改行、スペース、および .|"'`()=;/& を含む)を含まないオブジェクトの移行のみをサポートします。
ターゲット側がデータベースの場合、データ移行サービスはターゲット側にトリガー(Trigger)が存在することをサポートしていません。存在すると、データ移行が失敗する可能性があります。
データ移行サービスは、テーブル内のすべての列がLOB型(BLOB/CLOB/NCLOB)である場合の増分データ移行をサポートしていません。
データソース識別子とユーザーアカウントなどは、データ移行サービスシステム内でグローバルに一意である必要があります。
Oracleデータベースの増分ログ解析は、最大で5TB/1日をサポートします。
Oracleデータベース11G及びそれ以前のバージョンでは、名前が30バイトを超えるデータベースオブジェクトの作成はサポートされていません。
データ移行サービスは、ソース側のOracleデータベースで特定の
UPDATEコマンドを実行することをサポートしていません。以下の例は、サポートされていないUPDATEコマンドです。UPDATE TABLE_NAME SET KEY=KEY+1;上記の例では、
TABLE_NAMEがテーブル名、KEYがプライマリキーとして定義されたNUMERIC型の列です。
注意事項
Oracleデータベースの増分同期を実行する場合、Oracleデータベースの単一アーカイブファイルのサイズは2GB未満にすることを推奨します。
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);Oracleインスタンスの文字セット設定は、AL32UTF8、AL16UTF16、ZHS16GBK、GB18030が可能です。データ送信元の文字セットがUTF-8の場合、データ送信先ではデータ送信元と互換性のある文字セット(例:UTF-8、UTF-16など)を使用し、文字セットの不整合によるデータ送信先での文字化けなどの問題を回避することを推奨します。
Oracleデータベースの主キーなしテーブルをOceanBaseデータベースのOracle互換モードに移行する際、ROWIDが変更される可能性のあるインポート、エクスポート、Alter Table、FlashBack Table、パーティションの分割または結合などの操作をすべてのテーブルに対して禁止します。
ノード間のシステム時刻の同期が取れていない場合、またはクライアント端末とサーバー間のシステム時刻の同期が取れていない場合、増分同期の遅延時間が不正確になる可能性があります。
例えば、システム時刻が標準時より前の時刻を示している場合、遅延時間が負の値になる可能性があります。標準時より後の時刻を示している場合、遅延が発生する可能性があります。
中国がかつて夏時間を導入していた歴史的背景から、OracleデータベースからOceanBaseデータベースのOracle互換モードへの増分同期において、1986年~1991年の夏時間開始日と終了日、および1988年4月10日~4月17日の期間について、
TIMESTAMP(6) WITH TIME ZONE型のデータでは、ソース側とターゲット側で1時間の時刻差が生じる可能性があります。DDL同期を有効にしていない場合、データ送信先の一意インデックスを変更した後は、データ移行タスクを再起動する必要があります。再起動しない場合、データの不整合が発生する可能性があります。
データ送信元とデータ送信先の文字エンコーディング設定が異なる場合、構造移行ではフィールド長の定義を拡大するポリシーが提供されます。例えば、フィールド長を1.5倍に拡大したり、長さの単位をBYTEからCHARに変更したりします。
データ送信元にタイムゾーン情報を含むデータ型(例:TIMESTAMP WITH TIME ZONE)が存在する場合、データ送信先のデータベースが対応するタイムゾーンをサポートし、データ送信元のものと一致していることを確認してください。そうでない場合、データ移行プロセス中にデータの不整合が発生する可能性があります。
データベース内のテーブルの統合シナリオでは:
データ送信元とデータ送信先の関係をマッピングするために、マッチングルールの方法を使用することを推奨します。
ターゲット側でテーブル構造を自ら作成することを推奨します。データ移行サービスを使用して作成する場合は、構造移行の手順で失敗したオブジェクトをスキップしてください。
Oracleデータベースのリサイクルビン内のオブジェクトを確認してください。オブジェクトが100を超えると、内部テーブルのクエリがタイムアウトしやすくなるため、リサイクルビンのオブジェクトクリーンアップを実行してください。
リサイクルビンが有効になっているか確認してください。
SELECT Value FROM V$parameter WHERE Name = 'recyclebin';リサイクルビン内のオブジェクト数を確認してください。
SELECT COUNT(*) FROM RECYCLEBIN;
新規データ移行タスクを作成する際、増分同期 のみを設定した場合、データ移行ではデータ送信元データベースのアーカイブログを48時間以上保存することが求められます。
新規にデータ移行タスクを作成する際、全量移行 + 増分同期 を設定した場合、データ移行ではソース側データベースのアーカイブログを少なくとも7日間以上保持することが求められます。そうでない場合、増分ログを取得できないためデータ移行タスクが失敗したり、ソース側とターゲット側のデータが不整合になったりする可能性があります。
データ送信元がOracleデータベースの増分同期タスク(Kafka経由で増分データを取得する場合を除く)では、単一トランザクションが複数のアーカイブにまたがる場合、LogMinerはアーカイブをまたがるトランザクションについて完全なデータ情報を正しく返せないため、データが欠落する可能性があります。データの一貫性を確保するため、フルデータ検証とデータ訂正を設定することを推奨します。
データ型のマッピング
注意
CLOB型およびBLOB型データは48MB未満である必要があります。
ROWID、BFILE、XMLType、UROWID、UNDEFINED、UDT型データの移行はサポートされていません。
LONGまたはLONG RAW型のテーブルに対する増分同期はサポートされていません。
Oracleデータベース |
OceanBaseデータベース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データベースOracle互換モードでは、NVARCHAR2型のフィールドはNULL値をサポートしていません。ソース側にNULL値が存在する場合、文字列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 注意:この型は増分同期をサポートしていません。 |
Oracleテーブルのパーティション変換
データ移行サービスがOracleデータベースを移行する際、業務で使用するSQLに必要な変換を行います。
説明
本記事のパーティション変換ルールは、すべてのパーティションタイプに適用されます。
元テーブル定義 |
変換後の出力 |
|---|---|
CREATE TABLE T_RANGE_0 (A INT, B INT, PRIMARY KEY (B) )PARTITION BY RANGE(A)(....); |
CREATE TABLE "T_RANGE_0" ("A" NUMBER, "B" NUMBER NOT NULL,CONSTRAINT "T_RANGE_10_UK" UNIQUE ("B") )PARTITION BY RANGE ("A")( .... ); |
CREATE TABLE T_RANGE_10 ("A" INT, "B" INT, "C" DATE, "D" NUMBER GENERATED ALWAYS AS (TO_NUMBER(TO_CHAR("C",'dd'))) VIRTUAL, CONSTRAINT "T_RANGE_10_PK" PRIMARY KEY (A) )PARTITION BY RANGE(D)( .... ); |
CREATE TABLE T_RANGE_10 ("A" INT NOT NULL,"B" INT,"C" DATE,"D" NUMBER GENERATED ALWAYS AS (TO_NUMBER(TO_CHAR("C",'dd'))) VIRTUAL,CONSTRAINT "T_RANGE_10_PK" UNIQUE (A) )PARTITION BY RANGE(D)( .... ); |
CREATE TABLE T_RANGE_1 (A INT,B INT,UNIQUE (B) )PARTITION BY RANGE(A)( partition P_MAX values less than (10) ); |
元テーブル定義をサポートします |
CREATE TABLE T_RANGE_2 (A INT,B INT NOT NULL,UNIQUE (B) )PARTITION BY RANGE(A)( partition P_MAX values less than (10) ); |
元テーブル定義をサポートします |
CREATE TABLE T_RANGE_3 (A INT,B INT,UNIQUE (A) )PARTITION BY RANGE(A)( .... ); |
元テーブル定義をサポートします |
CREATE TABLE T_RANGE_4 (A INT NOT NULL,B INT,UNIQUE (A) )PARTITION BY RANGE(A)( .... ); |
CREATE TABLE "T_RANGE_4" ("A" NUMBER NOT NULL,"B" NUMBER,PRIMARY KEY ("A") )PARTITION BY RANGE ("A")( .... ); |
CREATE TABLE T_RANGE_5 (A INT,B INT,UNIQUE (A, B) )PARTITION BY RANGE(A)( partition P_MAX values less than (10) ); |
元テーブル定義をサポートします |
CREATE TABLE T_RANGE_6 (A INT NOT NULL,B INT,UNIQUE (A, B) )PARTITION BY RANGE(A)( partition P_MAX values less than (10) ); |
元テーブル定義をサポートします |
CREATE TABLE T_RANGE_7 (A INT NOT NULL,B INT NOT NULL,UNIQUE (A, B) )PARTITION BY RANGE(A)( partition P_MAX values less than (10) ); |
CREATE TABLE "T_RANGE_7" ("A" NUMBER NOT NULL,"B" NUMBER NOT NULL,PRIMARY KEY ("A", "B") )PARTITION BY RANGE ("A")( .... ); |
CREATE TABLE T_RANGE_8 ("A" INT,"B" INT,"C" INT NOT NULL,UNIQUE (A),UNIQUE (B),UNIQUE (C) )PARTITION BY RANGE(B)( partition P_MAX values less than (10) ); |
元テーブル定義をサポートします |
Oracleインスタンスのシステム構成の確認と変更
以下の操作を実行する必要があります:
注意
AWS RDS Oracleインスタンスで以下の操作を実行する際には、権限制限があります。詳細については、RDS for Oracle ユーザーと権限を参照してください。
データ送信元のOracleデータベースでアーカイブモードを有効にします。
データ送信元のOracleデータベースでサプリメンタルログを有効にします。
(オプション) Oracleデータベースのシステムパラメータを設定します。
説明
インスタンスタイプをセルフマネージドOracleに設定した場合、システムパラメータ
_log_parallelism_maxを設定できます。
データ送信元のOracleデータベースでアーカイブモードを有効にします。
AWS RDS Oracleインスタンスでアーカイブモードを有効にする
AWS RDS Oracleインスタンスでアーカイブモードを有効にする場合、保存時間に基づく設定のみをサポートし、サイズによる制御はサポートされません。
EXEC rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);
セルフマネージドOracleデータベースでアーカイブモードを有効にする
SELECT log_mode FROM v$database;
log_mode フィールドは archivelog であることが必要です。そうでない場合は、以下の方法で変更してください。
以下のコマンドを実行して、アーカイブモードを有効にします。
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;以下のコマンドを実行して、アーカイブログのパスとクォータを確認します。
recovery fileのパスとクォータを確認し、db_recovery_file_dest_sizeの設定値は可能な限り大きく設定することを推奨します。また、アーカイブを有効にした後は、RMANなどの方法で定期的にアーカイブログをクリーンアップする必要があります。SHOW PARAMETER db_recovery_file_dest;業務ニーズに応じて、アーカイブログのクォータを変更します。
ALTER SYSTEM SET db_recovery_file_dest_size =50G SCOPE = BOTH;
データ送信元のOracleデータベースでサプリメンタルログを有効にします。
AWS RDS Oracleインスタンスでサプリメンタルログを有効にする
EXEC rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD');
EXEC rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','PRIMARY KEY');
EXEC rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD','UNIQUE');
サプリメンタルログを有効にした後、アーカイブログに切り替えます。
EXEC rdsadmin.rdsadmin_util.switch_logfile;
AWS RDS Oracleインスタンスでサプリメンタルログを有効にすると、テーブルレベルの制御機能が欠けているため、以下の影響が発生します:
PKとUKのみの設定がサポートされており、データをフィルタリングする条件の設定に制限があります。データをフィルタリングする必要がある場合は、
alter_supplemental_logging('ADD','ALL')を設定する必要がありますが、これによりログ量が大幅に増加します。ソース側とターゲット側のテーブル構造(主キー、UK関連)が一致しない場合、データ品質の問題が発生する可能性があります。
セルフマネージドOracleデータベースでサプリメンタルログを有効にする
LogMiner Readerは、Oracleシステムでテーブルレベルのサプリメンタルログのみを有効にする設定をサポートしています。移行プロセス中に、ソース側のOracleデータベースで新しいテーブルが作成され、それを移行する必要がある場合は、DML操作を実行する前に、PKとUKのサプリメンタルログを有効にする必要があります。そうでない場合、データ移行サービスはログが不完全であるという例外を報告します。
注意
サプリメンタルログはOracleプライマリデータベースで有効にする必要があります。
データ送信元とデータ送信先のインデックスが一致しない、ETLが想定通りに動作しない、パーティションテーブルの移行性能が低下するなどの問題が発生した場合は、以下のサプリメンタルログを追加する必要があります:
データベースレベルまたはテーブルレベルの
supplemental_log_data_pkとsupplemental_log_data_uiを追加します。特定の列をサプリメンタルログに追加します。
データ送信元とデータ送信先のすべてのPKおよびUKに関連する列を追加します。これにより、データ送信元とデータ送信先のインデックスが一致しない問題を解決します。
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が想定通りに行われない可能性があります。 | データベースレベルのPK、UKサプリメンタルログを有効にする必要があります。 関連する列を手動でサプリメンタルログに追加します。 |
| PK/UK/パーティション列の追加、削除、変更、またはETL列の変更 | 起動時にサプリメンタルログを追加するルールを満たせず、データの不整合やデータ移行のパフォーマンス低下が発生する可能性があります。 | 上記のサプリメンタルログのルールに従って、適宜追加してください。 |
LogMiner Readerは以下の2つの方法でチェックを行います。サプリメンタルログが有効になっていない場合は終了します。
データベースレベルで
supplemental_log_data_pkとsupplemental_log_data_uiを有効にします。以下のコマンドを実行して、サプリメンタルログが有効になっているか確認します。クエリ結果がすべて
YESであれば、サプリメンタルログが有効になっています。SELECT supplemental_log_data_pk, supplemental_log_data_ui FROM v$database;有効になっていない場合は、以下の操作を実行してください:
以下のステートメントを実行して、サプリメンタルログを有効にします。
ALTER DATABASE ADD supplemental log DATA(PRIMARY KEY, UNIQUE) columns;有効になった後、アーカイブログを2回切り替え、タスクを開始する前に5分以上待機します。Oracle RACの場合は、各インスタンスで交互にログを切り替えます。
ALTER SYSTEM SWITCH LOGFILE;Oracle RACの場合、あるインスタンスでログを複数回切り替えた後、別のインスタンスでログを切り替えると、最初にファイルを取得しようとした際に、後から切り替えたインスタンスがサプリメンタルログを有効にする前のログを取得してしまう可能性があります。
テーブルレベルで
supplemental_log_data_pkとsupplemental_log_data_uiを有効にします。以下のステートメントを実行して、データベースレベルの
supplemental_log_data_minが有効になっているか確認します。SELECT supplemental_log_data_min FROM v$database;クエリ結果が
YESまたはIMPLICITであれば、有効になっていることを示します。以下のステートメントを実行して、同期対象のテーブルのテーブルレベルサプリメンタルログが有効になっているか確認します。
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;有効になった後、アーカイブログを2回切り替え、タスクを開始する前に5分以上待機します。Oracle RACの場合は、各インスタンスで交互にログを切り替えます。
ALTER SYSTEM SWITCH LOGFILE;
Oracleデータベースのシステムパラメータの設定(オプション)
セルフマネージドOracleデータベースを使用する場合、システムパラメータ _log_parallelism_max を1に設定することを推奨します。このシステムパラメータは通常、デフォルトで2に設定されています。
_log_parallelism_maxの値を確認します。以下の2つの方法で確認できます:方法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';
_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;
システムパラメータ
_log_parallelism_maxを変更した後、インスタンスを再起動し、アーカイブログを2回切り替え、タスクを開始する前に5分以上待機してください。
サポートされているデータ送信元およびデータ送信先インスタンスの種類
クラウドベンダー |
データ送信元 |
データ送信先 |
|---|---|---|
| AWS | RDS Oracle | OceanBase Oracle Compatible(Transactional) |
| AWS | Self-managed Oracle | OceanBase Oracle Compatible(Transactional) |
| Google Cloud | Self-managed Oracle | OceanBase Oracle Compatible(Transactional) |
| Alibaba Cloud | Self-managed Oracle | OceanBase Oracle Compatible(Transactional) |
操作手順
データ移行タスクを新規作成します。
OceanBase Cloudコンソールにログインします。
左側のナビゲーションバーで、データサービス > データ移行 をクリックします。
データ移行 ページで、データ移行 タブをクリックします。
データ移行 タブで、右上の タスクを作成する をクリックします。
タスク名を編集するテキストボックスに、カスタムの移行タスク名を入力します。
数字、英字の組み合わせを使用することをお勧めします。名前にはスペースを含めることができず、長さは64文字を超えてはなりません。
ソースとターゲットの設定 ページで、各パラメータを設定します。
ソース セクションで、各パラメータを設定します。
既に作成・保存された<UI-TERM key="obcloud-console.MainMenu.home.constant.DataSource">データソース</UI-TERM>を参照する必要がある場合、**<UI-TERM key="oms-cloud.Migration.compents.MigrationSourceTarget.form.title">ソース</UI-TERM>** の右側にある **<UI-TERM key="oms-cloud.components.SearchFilterSelect.ReferenceDataSource">クイック入力</UI-TERM>** をクリックし、ドロップダウンリストから対象のデータソースを選択します。選択後、**<UI-TERM key="oms-cloud.Migration.compents.MigrationSourceTarget.form.title">ソース</UI-TERM>** エリアの各設定は自動的に入力されます。現在の設定を新しいデータソースとして保存する場合は、**<UI-TERM key="oms-cloud.components.SearchFilterSelect.ReferenceDataSource">クイック入力</UI-TERM>** の右側にある **<UI-TERM key="oms-cloud.DataVerify.hooks.useModifyParamsDrawer.Save">保存</UI-TERM>** アイコンをクリックします。
また、**<UI-TERM key="oms-cloud.components.SearchFilterSelect.ReferenceDataSource">クイック入力</UI-TERM>** のドロップダウンリストで **<UI-TERM key="oms-cloud.components.SearchFilterSelect.ManageDataSources">データソースの管理</UI-TERM>** をクリックすると、**<UI-TERM key="obcloud-console.MainMenu.home.constant.DataSource">データソース</UI-TERM>** ページに移動し、データソースの表示や管理を行えます。**<UI-TERM key="src.components.SearchInput.E96B01AA">データソース</UI-TERM>** ページでは、異なるタイプのデータソースを一元的に管理できます。詳細については、[データソース](../250.data-sources-management/100.create-data-sources.md)モジュールのドキュメントを参照してください。
|パラメータ|説明|
|-----------------------|----------------|
| <UI-TERM key="oms-cloud.pages.Performance.CloudVendor">クラウドベンダー</UI-TERM> | 現在は **<UI-TERM key="dss.src.constants.endpoint.AlibabaCloud">Alibaba Cloud</UI-TERM>**、**<UI-TERM key="oceanbase-intl-business.Src.constants.CloudProvider.AWS">AWS</UI-TERM>**、および **<UI-TERM>Google Cloud</UI-TERM>** のみをサポートしています。|
| データベースタイプ | ソースを **Oracle** と選択します。 |
| インスタンスタイプ | <ul><li>クラウドベンダーを <b>AWS</b> に設定した場合、インスタンスタイプは <b>RDS Oracle</b> と <b>セルフマネージド Oracle</b> をサポートします。</li><li>クラウドベンダーを <b>Alibaba Cloud</b> または <b>Google Cloud</b> に設定した場合、インスタンスタイプは <b>セルフマネージド Oracle</b> をサポートします。</li></ul> |
|リージョン | データ送信元データベースのリージョンを選択します。|
| <UI-TERM key="oms-cloud.Detail.components.MigrationConnectInfo.dbEngine">接続タイプ</UI-TERM> | **<UI-TERM key="oceanbase-intl-console.Connect.Step2.Privatelink.Endpoint">エンドポイント</UI-TERM>** と **<UI-TERM key="oms-cloud.pages.Migration.New.components.MigrationSourceTarget.SourceMigration.instanceType.PublicIP">パブリック接続</UI-TERM>** が含まれます。**<UI-TERM key="obcloud-console.components.InstanceFilterPanel.CloudVendor">クラウドベンダー</UI-TERM>** を **<UI-TERM key="oceanbase-intl-console.utils.textFormat.getCloudProviderText.AlibabaCloud">Alibaba Cloud</UI-TERM>**、**<UI-TERM key="oceanbase-intl-business.Src.constants.CloudProvider.AWS">AWS</UI-TERM>**、または **<UI-TERM>Google Cloud</UI-TERM>** に設定した場合、**<UI-TERM key="oms-cloud.components.BusinessComponents/helpers.PeerToPeerConnection">ピアリング接続</UI-TERM>** もサポートされます。<ul><li>**<UI-TERM key="oms-cloud.pages.Migration.New.components.MigrationSourceTarget.SourceMigration.instanceType.PrivateLink">エンドポイント</UI-TERM>** 接続方式を選択した場合、ページに表示されているアカウントIDをエンドポイントサービスの許可リストに追加する必要があります。これにより、そのアカウントのエンドポイントがエンドポイントサービスに接続できるようになります。詳細については、[プライベート接続の選択](../250.data-sources-management/400.select-endpoint/200.aws-endpoint.md)を参照してください。<ul><li>**<UI-TERM key="oms-cloud.ConfigureDatabase.formFieldsStructure.baseStructure.CloudVendor">クラウドベンダー</UI-TERM>** を **<UI-TERM key="obcloud-console.modal.SubscriptionConfirmModal.AWSCloud">AWS</UI-TERM>** に設定し、エンドポイントサービス作成時にパラメータ **エンドポイント接続の承諾を要求** で **有効** を選択した場合、データ移行サービスが初めてプライベート接続にアクセスする際、AWSコンソールにアクセスし、受信したConnectionsリクエストに対して **Accept endpoint connection request** 操作を実行するよう求められます。</li><li>クラウドベンダーを **<UI-TERM key="oms-cloud.Migration.constants.GoogleCloud">Google Cloud</UI-TERM>** に設定した場合、Published Servicesに認可プロジェクトを追加してください。認可後は、データソースの接続テスト時に手動で認可する必要はありません。</li></ul></li><li>**<UI-TERM key="oms-cloud.pages.Migration.New.components.MigrationSourceTarget.SourceMigration.instanceType.PublicIP">パブリック接続</UI-TERM>** 接続方式を選択した場合、ページに表示されている<UI-TERM key="obcloud-console.MainMenu.home.constant.DataSource">データソース</UI-TERM> IPアドレスをOracleデータベースインスタンスの許可リストに追加して、接続性を確保する必要があります。詳細については、[パブリック接続の選択](../250.data-sources-management/500.select-public-ip/200.aws-public.md)を参照してください。<main id="notice" type='explain'><h4>説明</h4><p> ソースと<UI-TERM key="oms-cloud.Migration.compents.MigrationSourceTarget.TargetMigration.form.title">ターゲット</UI-TERM>のリージョンを選択すると、ページに許可リストに追加する必要がある<UI-TERM key="obcloud-console.MainMenu.home.constant.DataSource">データソース</UI-TERM> IPアドレスが表示されます。</p></main></li><li><b>ピアリング接続</b>を選択した場合、ドロップダウンリストから利用可能なピアリング接続を選択し、ページに表示されているIPアドレスをOracleデータベースインスタンスのセキュリティグループのインバウンドルールまたは許可リストに追加して、接続性を確保してください。具体的な操作については、[AWSピアリング接続](../250.data-sources-management/600.select-peering/200.aws-peering.md)、[Alibaba Cloudピアリング接続](../250.data-sources-management/600.select-peering/400.alibaba-peering.md)、および [Google Cloudピアリング接続](../250.data-sources-management/600.select-peering/500.google-peering.md)を参照してください。</li></ul>|
| ピアリング接続ID | 接続タイプが **<UI-TERM key="oms-cloud.components.ActionCell.AliyunDeleteModal.PeerToPeerConnection">ピアリング接続</UI-TERM>** の場合にのみ表示されます。ドロップダウンリストから利用可能なピアリング接続を選択します。ドロップダウンリストには、現在のクラウドベンダーとリージョンが一致し、状態が **<UI-TERM key="oms-cloud.src.constants.privateLink.Connected">接続済み</UI-TERM>** であるピアリング接続のみが表示され、対応するVPC IDとCIDRが表示されます。利用可能な接続がない場合、**<UI-TERM key="src.component.WorkflowClusterSelector.5731DB26">作成する</UI-TERM>** をクリックして、新しいタブでデータサービスのピアリング接続を作成できます。 |
|接続情報|<ul><li>**<UI-TERM key="oms-cloud.pages.Migration.New.components.MigrationSourceTarget.SourceMigration.ConnectionType">接続タイプ</UI-TERM>** を **<UI-TERM key="oms-cloud.pages.Migration.New.Endpoint.Mysql.HUAWEI_CLOUD.instanceType.PrivateLink">エンドポイント</UI-TERM>** に設定した場合、エンドポイントサービス名を入力してください。</li><li>**<UI-TERM key="oms-cloud.Detail.components.MigrationConnectInfo.dbEngine">接続タイプ</UI-TERM>** を **<UI-TERM key="oms-cloud.pages.Migration.New.components.MigrationSourceTarget.SourceMigration.instanceType.PublicIP">パブリック接続</UI-TERM>** に設定した場合、データベースホストのIPアドレスとポート番号を入力してください。</li><li><b>接続タイプ</b> を <b>ピアリング接続</b> に設定した場合、データベースホストのプライベートIPアドレス、またはドメイン名とポート番号を入力してください。</li></ul> |
|Service Name | OracleデータベースのService名。|
|データベースアカウント| データ移行用のOracleデータベースのユーザー名。|
|パスワード| データベースユーザーのパスワード。|
ターゲット セクションで、各パラメータを設定します。
作成済みのデータソースを参照する必要がある場合は、ターゲット の右側にある クイック入力 をクリックし、ドロップダウンリストから対象のデータソースを選択します。選択後、ターゲット 領域の各設定は自動的に入力されます。現在の設定を新しいデータソースとして 保存 する場合は、クイック入力 の右側にある 保存 アイコンをクリックします。
クイック入力 のドロップダウンリストで データソースの管理 をクリックすると、データソース ページに移動し、データソースの表示や管理ができます。データソース ページでは、異なる種類のデータソースを一元的に管理できます。詳細については、データソース モジュールのドキュメントを参照してください。
パラメータ説明クラウドベンダー 現在、Alibaba Cloud、AWS、および Google Cloud のみをサポートしています。ソース側と同じクラウドベンダーを選択することも、クラウドベンダーを跨いだデータ移行も可能です。 説明
現在、クラウドベンダーを跨いだデータ移行機能はデフォルトで利用できません。この機能を使用する場合は、OceanBase Cloudのテクニカルサポートにお問い合わせください。
データベースタイプ 現在、データ送信先では OceanBase Oracle Compatible のみをサポートしています。 インスタンスタイプ 現在、Dedicated (Transactional) のみをサポートしています。 リージョン データ送信先データベースのリージョンを選択します。 インスタンス OceanBaseデータベースのOracle互換モードのテナントが存在するインスタンスのIDまたは名前です。インスタンス ページで、ターゲットインスタンスのIDまたは名前を確認できます。 説明
クラウドベンダーがAlibaba Cloudの場合、アカウント間の権限付与をサポートするAlibaba Cloudのマスターアカウントのインスタンスを選択することもできます。詳細については、Alibaba Cloudアカウントの権限付与を参照してください。
テナント OceanBaseデータベースのOracle互換モードのテナントのIDまたは名前です。インスタンス ページで、ターゲットインスタンスを展開し、そのインスタンス下のターゲットテナントのIDまたは名前を確認できます。 データベースアカウント データ移行用のOceanBaseデータベースのOracle互換モードのテナントのユーザー名。 パスワード データベースユーザーのパスワード。 テストして続行 をクリックします。
タイプとオブジェクトの選択 ページで、各パラメータを設定します。
同期トポロジー セクションで、一方向同期 を選択します。
データ移行は 一方向同期 と 双方向同期 をサポートしています。本記事では一方向同期の操作について説明します。双方向同期の詳細については、双方向同期タスクの設定を参照してください。
移行タイプ 領域で、現在のデータ移行タスクの移行タイプを選択します。
移行タイプ には スキーマ移行、完全移行、増分同期 が含まれます。
パラメータ説明構造移行 構造移行では、文字セットのマッピング関係を自ら定義する必要があります。データ移行は、データ送信元データベースのデータ(構造)をデータ送信先データベースにコピーするだけで、ソースデータ(構造)に影響を与えません。 全量移行 全量移行タスクが開始されると、データ移行サービスはソースデータベースのテーブルの既存データをターゲット側データベースの対応するテーブルに移行します。 増分同期 増分同期タスク開始後、データ移行は、データ送信元データベースで変更されたデータ(追加、変更、削除)をデータ送信先データベースの対応するテーブルに同期します。増分同期 には DML同期 と DDL同期 が含まれ、必要に応じてカスタマイズして設定することができます。詳細は DML/DDLのカスタム設定 を参照してください。 移行対象を選択してください セクションで、移行オブジェクトの選択方法を設定します。
オブジェクトの指定 と ルールによる一致 の2つの方法で移行オブジェクトを選択できます。
移行範囲の選択 セクションで、移行するオブジェクトを選択します。
オブジェクトの指定 を選択した場合、データ移行は データベースオブジェクト と データベース全体 をサポートします。テーブル・ビュー移行では、1つまたは複数のデータベース内のテーブルやビューを移行対象として選択できます。データベース移行では、データベース全体を移行対象として選択できます。あるデータベースでテーブル・ビュー移行を選択した場合、そのデータベースはデータベース移行をサポートしなくなります。あるデータベースでデータベース移行を選択した場合、そのデータベースはテーブル・ビュー移行をサポートしなくなります。
データベースオブジェクト または データベース全体 の方法を選択した後、左側で移行するオブジェクトを選択し、> をクリックして右側のリストに追加します。
データ移行は、テキスト形式でのオブジェクトのインポートをサポートしており、ターゲット側のオブジェクトの名前変更、行フィルタリングの設定、列情報の表示、および単一またはすべての移行オブジェクトの削除などの操作が可能です。
説明
データベース移行を選択した場合:
右側のリストにはデータベース名のみが表示され、具体的なオブジェクトは表示されません。
増分同期-DDL同期移行タイプを選択した場合、ソース側に新規作成されたテーブルはターゲット側に同期されます。
操作説明インポート 選択領域の右側にあるリストで、右上の インポート をクリックします。移行オブジェクトのインポートを参照してください。 名前の変更 データ移行では、移行オブジェクトの名前を変更できます。データベース名とテーブル名の変更を参照してください。 行フィルター データ移行では、 WHERE条件を使用した行フィルタリングがサポートされています。SQL条件でデータをフィルタリングするを参照してください。また、列を表示 領域で、移行オブジェクトの列情報を確認できます。削除/すべてクリア データ移行では、データマッピング時に一時的にターゲット側に選択された1つまたは複数のオブジェクトを削除できます。 - 単一移行オブジェクトの削除
選択エリアの右側のリストで、対象オブジェクトの後ろにある 削除 アイコンをクリックすると、その移行オブジェクトを削除できます。 - すべての移行オブジェクトの削除
選択エリアの右側のリストで、右上の すべて削除 をクリックします。ダイアログボックスで、OK をクリックすると、すべての移行オブジェクトが削除されます。
ルールによる一致 を選択した場合、詳細については データベース間のマッチングルールの設定を参照してください。
次へ をクリックします。移行オプション ページで、各パラメータを設定します。
構造移行
タイプとオブジェクトを選択 ステップで、スキーマ移行 を選択し、かつソース側とターゲット側の文字セットが一致しない場合にのみ、以下のパラメータが表示されます。
データ送信元とデータ送信先の文字セットが一致しない場合(例:データ送信元がGBK、データ送信先がUTF-8)、フィールド値の切り捨てやデータの不整合が発生する可能性があります。文字数拡張係数 を設定することで、文字型フィールドの長さを増やすことができます。
注意
拡張後の長さは、データ送信先の最大制限を超えてはなりません。
全量移行
タイプとオブジェクトの選択 ステップで、一方向同期 > 完全移行 を選択した場合にのみ、以下のパラメータが表示されます。
パラメータ説明読み取り並列設定 このパラメータは、全量移行段階でソース側からデータを読み取る並列数を設定します。最大値は512です。並列数が高すぎると、ソース側の負荷が過大になり、業務に影響を与える可能性があります。 書き込み並列設定 このパラメータは、全量移行段階でターゲット側にデータを書き込む並列数を設定します。最大値は512です。並列数が高すぎると、ターゲット側の負荷が過大になり、業務に影響を与える可能性があります。 全量移行レートの制限を有効にするかどうか 実際のニーズに応じて、全量移行レートの制限を有効にするかどうかを決定できます。有効にする場合は、ソース側の読み取りRPS(全量移行段階で1秒間にソース側から最大で読み取れる行数の上限)、ソース側の読み取りBPS(全量移行段階で1秒間にソース側から最大で読み取れるストリーム量の上限)、ターゲット側の書き込みRPS(全量移行段階で1秒間にターゲット側に最大で書き込める行数の上限)、ターゲット側の書き込みBPS(全量移行段階で1秒間にターゲット側に最大で書き込めるストリーム量の上限)を設定してください。 説明
ここで設定されたRPSとBPSは、スロットリング機能としてのみ機能します。全量移行で実際に達成可能な性能は、ソース側、ターゲット側、インスタンス仕様の設定などの要因によって制限されます。
ターゲット側テーブルオブジェクトにレコードが存在する場合の処理ポリシー 処理ポリシーには、移行を停止する と 無視する が含まれます: - 移行を停止する を選択した場合、ターゲット側のテーブルオブジェクトにデータが存在すると、全量移行はエラーとなり、移行は許可されません。ターゲット側のデータを適切に処理した後、移行を続けてください。
注意
エラー発生後に「再開」をクリックすると、データ移行はこの構成オプションを無視し、テーブルデータの移行を続けます。ご注意ください。
- 無視する を選択した場合、ターゲット側のテーブルオブジェクトにデータが存在し、元のデータと書き込むデータが競合すると、データ移行は競合データをログに記録し、元のデータを変更せずに保持するポリシーでデータを書き込みます。
インデックスの後付けを許可するかどうか インデックスの後付け機能は、全量移行の所要時間を短縮できます。ここでは、フルデータ移行完了後にインデックスを作成できるかどうかを設定します。インデックスの後付けを選択する際の注意事項については、表の下部の説明を参照してください。 注意
移行タイプの選択ページで 構造移行 と 全量移行 の両方を選択している場合にのみ、このオプションを設定できます。
- 後付けできるのは、非一意インデックスのみです。
全量移行後にインデックスを作成する場合、OceanBaseデータベースのハードウェア条件と現在の業務トラフィック状況に応じて、CLIツールを使用して以下の業務テナントパラメータを調整することを推奨します。
// ファイルメモリバッファサイズの制限 ALTER SYSTEM SET _temporary_file_io_area_size = '10' tenant = 'xxx'; // OceanBaseデータベースV4.xのレート制限の無効化 ALTER SYSTEM SET sys_bkgd_net_percentage = 100;- 移行を停止する を選択した場合、ターゲット側のテーブルオブジェクトにデータが存在すると、全量移行はエラーとなり、移行は許可されません。ターゲット側のデータを適切に処理した後、移行を続けてください。
増分同期
タイプとオブジェクトを選択 のステップで、一方向同期 > 増分同期 を選択した場合に、以下のパラメータが表示されます。
パラメータ説明書き込み同時実行数設定 このパラメータは、増分同期フェーズでデータ送信先にデータを書き込む同時実行数を設定します。最大制限は512です。同時実行数が高すぎると、データ送信先の負荷が過大になり、業務に影響を与える可能性があります。 増分移行レートの制限 実際のニーズに応じて、増分同期レートの制限を有効にするかどうかを決定できます。有効にする場合は、ターゲット側への書き込みRPS(増分同期フェーズで1秒間にターゲット側に同期できるデータ行数の最大値の制限)とターゲット側への書き込みBPS(増分同期フェーズで1秒間にターゲット側に同期できるトラフィックの最大値の制限)を設定してください。 説明
ここで設定されたRPSとBPSは、レート制限機能としてのみ機能します。増分同期が実際に達成できる性能は、ソース側、ターゲット側、インスタンス仕様の設定などの要因の影響を受けます。
増分同期開始時刻 - 移行タイプの選択時に 全量移行 を選択した場合、このパラメータは表示されません。
- 移行タイプの選択時に 完全移行 を選択しなかったが、増分同期 を選択した場合は、特定の時点以降のデータの移行を指定してください。デフォルトは現在のシステム時刻です。詳細については、増分同期ポイントの設定を参照してください。
詳細オプション
ターゲット側のOceanBaseデータベースのOracle互換モードがV4.3.0以降であり、かつ タイプとオブジェクトを選択 のステップで、スキーマ移行 または 増分同期 > DDL同期 を選択した場合に、このセクションのパラメータが表示されます。
データ送信先のテーブルオブジェクトのストレージタイプには、デフォルト、行ストア、カラムストア、行列ハイブリッド型 が含まれます。この設定は、構造移行または増分同期時のデータ送信先テーブルオブジェクトのストレージタイプを決定するために使用されます。
説明
デフォルト オプションは、ターゲット側のパラメータ設定に基づいて他のオプションを適応させるものです。構造移行のテーブルオブジェクトや増分DDLで新規作成されるテーブルオブジェクトは、設定されたストレージタイプに応じて対応する構造を書き込みます。
次へ をクリックすると、システムはデータ移行タスクの事前チェックを実行します。
事前チェック プロセスでは、データ移行はデータベースユーザーの読み書き権限、データベースのネットワーク接続などが要件を満たしているかどうかをチェックします。すべてのチェックタスクが合格した場合にのみ、データ移行タスクを開始できます。事前チェックでエラーが発生した場合:
問題を調査・解決した後、事前チェックを再実行し、成功するまで繰り返すことができます。
失敗した事前チェック項目の操作列の スキップ をクリックすることもできます。これにより、この操作をスキップする具体的な影響を示すダイアログボックスがポップアップ表示されます。スキップが可能であることを確認したら、ダイアログボックス内の OK をクリックしてください。
事前チェックに成功したら、購入 をクリックし、データ移行インスタンスを購入する ページで購入を進めます。
購入が成功すると、データ移行タスクを開始できます。購入の詳細については、データ移行インスタンスの購入を参照してください。現時点でデータ移行インスタンスを購入する必要がない場合は、保存 をクリックしてデータ移行タスクの詳細ページに移動し、後から必要に応じて手動で購入することができます。
データ移行の詳細ページの右上にある 検証タスクの設定 をクリックすると、データ送信元データベースとデータ送信先データベースのデータ差分を比較できます。詳細については、新規データ検証タスクの作成を参照してください。
データ移行サービスでは、データ移行タスクの実行中に移行オブジェクトを変更できます。詳細については、移行オブジェクトの表示と変更を参照してください。データ移行タスクが開始されると、選択した移行タイプに従って順次実行されます。詳細については、データ移行タスクの詳細を見るの「移行詳細を確認する」モジュールの内容を参照してください。