このトピックでは、ApsaraDB RDS for PostgreSQL インスタンスから OceanBase Database の Oracle テナントにデータを同期する方法について説明します。
前提条件
データ伝送サービスには、クラウドリソースにアクセスするための権限があります。 詳細については、「ロールにデータ伝送の権限を付与する」をご参照ください。
ソース ApsaraDB RDS for PostgreSQL インスタンスに、データ同期専用の特権アカウントを作成済みです。 詳細については、「PostgreSQL データソース」をご参照ください。
ターゲットの OceanBase Database の Oracle テナントに、データ同期専用のデータベースユーザーを作成し、そのユーザーに対応する権限を付与済みです。 詳細については、「データベースユーザーを作成する」をご参照ください。
増分同期を実行する必要がある場合は、最初に次の操作を実行します。
データ伝送サービスは、増分同期中の DDL 文の自動同期をサポートしていません。 同期するテーブルで DDL 操作を実行する必要がある場合は、最初にターゲットで対応する DDL 文を実行してから、ソース ApsaraDB RDS for PostgreSQL インスタンスで実行します。
DDL 文の実行後に実行された増分 DML 操作を正しく解析するには、対応するトリガーと DDL 文を記録するためのテーブルを作成する必要があります。 詳細については、「トリガーを作成する」をご参照ください。
差分同期wal_level論理
ApsaraDB RDS for PostgreSQL インスタンスのログレベルを変更する を選択する場合は、 パラメーターを に設定する必要があります。 詳細については、「」をご参照ください。
制限事項
ApsaraDB RDS for PostgreSQL V11.x および V12.x のインスタンスのみがサポートされています。
データ伝送サービスは、オブジェクトのデータベース名、テーブル名、および列名が特殊文字を含まない ASCII エンコードである場合にのみ、オブジェクトの同期をサポートします。 特殊文字は、改行、スペース、および次の文字です。 . | " ' ` ( ) = ; / & \.
データ伝送サービスは、ApsaraDB RDS for PostgreSQL インスタンスから OceanBase Database の Oracle テナントへのビュー、パーティションテーブル、ログに記録されないテーブル、一時テーブル、FOREIGN KEY 制約、またはチェック制約の同期をサポートしていません。
データ伝送サービスは、プライマリデータベースからの増分同期のみをサポートしています。
考慮事項
増分同期を選択した場合、テーブルレベルの
REPLICA IDENTITYオプションは、次の要件を満たしている必要があります。[オブジェクトを指定] を選択した場合、指定したテーブルにはプライマリキーが含まれているか、テーブルの
REPLICA IDENTITYパラメーターが FULL に設定されている必要があります。 そうしないと、ビジネスデータの更新または削除操作は失敗します。[ルールに一致] を選択した場合、ソース ApsaraDB RDS for PostgreSQL インスタンスは、選択したテーブル、選択されていないテーブル、新しいテーブルを含む、選択したデータベースのすべてのテーブルをサブスクライブする必要があり、すべてのテーブルにプライマリキーが含まれているか、テーブルの
REPLICA IDENTITYパラメーターが FULL に設定されている必要があります。 そうしないと、ビジネスデータの更新または削除操作は失敗します。
次の文を実行して、テーブルレベルの
REPLICA IDENTITYオプションを FULL に設定できます。ALTER TABLE table_name REPLICA IDENTITY FULL;ApsaraDB RDS for PostgreSQL インスタンスから OceanBase Database の Oracle テナントにスキーマまたは増分 DDL 操作を同期する場合、テーブル名とフィールド名は、データ伝送サービスのデフォルトの戦略に基づいて大文字に変換されます。 たとえば、ソーステーブル名 a は、デフォルトでターゲットで A に変換されます。 テーブル名またはフィールド名は a、A、または "A" の形式で指定できますが、"a" は指定できません。
ApsaraDB RDS for PostgreSQL インスタンスの Incr-Sync コンポーネントは、パブリケーションとスロットを自動的に作成しますが、インスタンスログのディスク使用量を監視する必要があります。 デフォルトでは、データ伝送サービスは 10 分間隔でインスタンスに通知し、スロットの
confirmed_flush_lsn値を 10 分前の最新のログシーケンス番号 (LSN) に更新します。 したがって、各 Incr-Sync コンポーネントは、ApsaraDB RDS for PostgreSQL インスタンスの少なくとも 10 分間のログを保持します。説明通知間隔、または ApsaraDB RDS for PostgreSQL インスタンスで生成されるログファイルの保存期間を変更する場合は、OceanBase テクニカルサポートにお問い合わせください。
スロットが存在するためにデータ同期中に ApsaraDB RDS for PostgreSQL インスタンスのログをクリアできない場合は、データ同期タスクを削除してからログをクリアする必要があります。 すべてのスロットの中で最小の
slot restart_lsn値によって、ApsaraDB RDS for PostgreSQL インスタンスのログファイルをリサイクルできるかどうかが決まります。 最小値がログファイルの範囲内にある場合、ログファイルはリサイクルされません。ターゲットにデータを同期する場合、ターゲットテーブルにプライマリキーまたは NULL 以外のユニークキーがないと、重複データが存在する可能性があります。
ソースデータベースで UTF-8 文字セットを使用する場合は、文字化けを避けるために、ターゲットデータベースで UTF-8 または UTF-16 などの互換性のある文字セットを使用することをお勧めします。
DECIMAL、FLOAT、および DOUBLE データ型の列に対するデータ伝送サービスの同期精度が期待どおりであるかどうかを確認します。 ターゲットフィールド型の精度がソースフィールド型の精度よりも低い場合、精度が高い値は切り捨てられる可能性があります。 これにより、ソースフィールドとターゲットフィールド間でデータの不整合が発生する可能性があります。
ターゲットでユニークインデックスを変更する場合は、データの不整合を避けるために、データ同期タスクを再起動する必要があります。
ノード間またはクライアントとサーバー間のクロックが同期していない場合、増分同期中のレイテンシが不正確になる可能性があります。
たとえば、クロックが標準時刻よりも早い場合、レイテンシは負になる可能性があります。 クロックが標準時刻よりも遅い場合、レイテンシは正になる可能性があります。
データ同期タスクの作成時に [増分同期] のみを選択した場合、データ伝送サービスでは、ソースデータベースのローカル増分ログを少なくとも 48 時間保持する必要があります。
データ同期タスクの作成時に [完全同期] と [増分同期] を選択した場合、データ伝送サービスでは、ソースデータベースのローカル増分ログを少なくとも 7 日間保持する必要があります。 そうしないと、データ伝送サービスが増分ログを取得できないため、データ同期タスクが失敗したり、ソースデータベースとターゲットデータベースのデータが不整合になる可能性があります。
ソースデータベースまたはターゲットデータベースに、大文字と小文字のみが異なるテーブルオブジェクトが含まれている場合、ソースデータベースまたはターゲットデータベースで大文字と小文字が区別されないため、データ移行の結果が予期したとおりにならない可能性があります。
UNIQUE 制約のある列で NULL 値が許可されている場合、データ損失が発生する可能性があります。 ソース ApsaraDB RDS for PostgreSQL インスタンスに複数の NULL 値が存在する場合、最初の NULL 値のみがターゲット OceanBase Database の Oracle テナントに正常に同期され、後続の NULL 値は UNIQUE 制約違反のために破棄されます。
サポートされているソースおよびターゲットのインスタンスタイプ
次の表では、OB_Oracle は OceanBase Database の Oracle テナントを表します。
ソース | ターゲット |
PostgreSQL (ApsaraDB RDS インスタンス) | OB_Oracle (OceanBase クラスタインスタンス) |
PostgreSQL (ApsaraDB RDS インスタンス) | OB_Oracle (VPC 内の自己管理データベース) |
データ型マッピング
ApsaraDB RDS for PostgreSQL インスタンスのデータ型 | OceanBase Database の Oracle テナントにマッピングされるデータ型 |
int | NUMBER(10) |
smallint | NUMBER(5) |
bigint | NUMBER(20) |
decimal | NUMBER(p,s) |
numeric | NUMBER(p,s) |
real | BINARY_FLOAT |
double precision | BINARY_DOUBLE |
smallserial | NUMBER(5) |
serial | NUMBER(10) |
bigserial | NUMBER(20) |
char | CHAR(n) 説明
|
varchar | VARCHAR2(n) |
text | CLOB |
timestamp | TIMESTAMP(p) |
timestamp with time zone | TIMESTAMP(p) WITH TIME ZONE |
time | DATE |
time with time zone | TIMESTAMP(p) WITH TIME ZONE |
boolean | NUMBER(1) |
bytea | BLOB |
citext | CLOB |
tsvector | CLOB |
手順
ApsaraDB for OceanBase コンソール にログインし、データ同期タスクを購入します。
詳細については、「データ同期タスクを購入する」をご参照ください。
[データ伝送] > [データ同期] を選択します。 表示されるページで、データ同期タスクの [構成] をクリックします。

既存のタスクの構成を参照する場合は、[構成の参照] をクリックします。 詳細については、「データ同期タスクの構成を参照およびクリアする」をご参照ください。
[ソースとターゲットの選択] ページで、パラメーターを構成します。
パラメーター
説明
同期タスク名
数字と文字の組み合わせに設定することをお勧めします。 スペースを含めることはできず、長さは 64 文字を超えることはできません。
ソース
PostgreSQL データソースを作成済みの場合は、ドロップダウンリストから選択します。 それ以外の場合は、ドロップダウンリストの [新しいデータソース] をクリックし、右側に表示されるダイアログボックスで作成します。 詳細については、「PostgreSQL データソースを作成する」をご参照ください。
ターゲット
OceanBase データソースを作成済みの場合は、ドロップダウンリストから選択します。 それ以外の場合は、ドロップダウンリストの [新しいデータソース] をクリックし、右側に表示されるダイアログボックスで作成します。 詳細については、「OceanBase データソース」をご参照ください。
タグ (オプション)
ドロップダウンリストからターゲットタグを選択します。 また、[タグの管理] をクリックして、タグを作成、変更、および削除することもできます。 詳細については、「タグを使用してデータ同期タスクを管理する」をご参照ください。
[次へ] をクリックします。 [同期タイプの選択] ページで、現在のデータ同期タスクの同期タイプを指定します。

サポートされている同期タイプは、[スキーマ同期]、[完全同期]、および [増分同期] です。 [増分同期] は、[DML 同期] のみサポートしています。 サポートされている DML 操作は、
INSERT、DELETE、およびUPDATEです。 必要に応じてオプションを選択できます。 詳細については、「DDL/DML 同期を構成する」をご参照ください。[次へ] をクリックします。 [同期オブジェクトの選択] ページで、同期オブジェクトを選択します。
[オブジェクトを指定] または [ルールに一致] オプションを使用して、同期オブジェクトを指定できます。 このトピックでは、[オブジェクトを指定] オプションを使用して同期オブジェクトを指定する方法について説明します。 一致ルールの構成方法については、「一致ルールを構成および変更する」の「データベース間のデータ移行/同期のためのワイルドカードパターン」セクションをご参照ください。
重要同期するテーブルの名前、およびテーブル内の列の名前には、中国語の文字を含めることはできません。
データベース名またはテーブル名に二重ドル記号 ($$) が含まれている場合、同期タスクを作成することはできません。

[同期オブジェクトの選択] セクションで、[オブジェクトを指定] を選択します。
次の [同期スコープの選択] セクションで、同期するオブジェクトを [ソースオブジェクト] リスト。
クリック [>] して、[ターゲット オブジェクト] リストに追加します。
データ伝送サービスでは、テキストを使用してオブジェクトをインポートできます。 また、オブジェクトの名前変更、オブジェクトの設定、単一またはすべてのオブジェクトの削除も可能です。
説明[ルールに一致] を選択して移行オブジェクトを指定する場合、オブジェクトの名前変更は、指定された一致ルールの構文に基づいて実装されます。 操作エリアでは、フィルター条件のみを設定できます。 詳細については、「一致ルールを構成および変更する」をご参照ください。
操作
説明
オブジェクトのインポート
右側のリストで、右上隅にある オブジェクトのインポート をクリックします。
表示されるダイアログボックスで、[OK] をクリックします。
重要この操作は以前の選択を上書きします。 注意して進めてください。
同期オブジェクトのインポート同期オブジェクトの設定をダウンロードしてインポートする ダイアログボックスで、同期するオブジェクトをインポートします。 CSV ファイルをインポートして、データベースまたはテーブルの名前を変更し、行フィルタリング条件を設定できます。 詳細については、「」をご参照ください。
検証する をクリックします。
検証に成功したら、[OK] をクリックします。
オブジェクトの名前変更
データ伝送サービスでは、同期オブジェクトの名前を変更できます。 詳細については、「データベーステーブルの名前を変更する」をご参照ください。
設定の構成
WHERE句を使用して、行ごとにデータをフィルタリングし、同期オブジェクトの列情報を表示できます。右側のリストで、設定するオブジェクトにカーソルを合わせます。
[設定] をクリックします。
[設定] ダイアログボックスで、次の操作を実行できます。
[行フィルター] セクションで、標準 SQL
WHERE句を指定して、行ごとにデータをフィルタリングします。 詳細については、「SQL 条件を使用してデータをフィルタリングする」をご参照ください。[列の表示] セクションで、同期オブジェクトに関する列情報を表示することもできます。
[OK] をクリックします。
1 つまたはすべてのオブジェクトを削除する
データ伝送サービスでは、データマッピング中に右側のリストに追加された単一またはすべての同期オブジェクトを削除できます。
単一の同期オブジェクトを削除する
右側のリストで、削除するオブジェクトにカーソルを合わせ、[削除] をクリックして同期オブジェクトを削除します。
すべての同期オブジェクトを削除する
右側のリストで、右上隅にある [すべて削除] をクリックします。 表示されるダイアログボックスで、[OK] をクリックしてすべての同期オブジェクトを削除します。
[次へ] をクリックします。 [同期オプション] ページで、パラメーターを構成します。
完全同期
次の表に、[同期タイプの選択] ページで [完全同期] を選択した場合にのみ表示される完全同期パラメーターを示します。

パラメーター
説明
読み取り同時実行性
完全同期中にソースからデータを読み取るための同時実行性。 最大値は 512 です。 同時実行性が高いと、ソースに過度のストレスがかかり、ビジネスに影響を与える可能性があります。
書き込み同時実行性
完全同期中にターゲットにデータを書き込むための同時実行性。 最大値は 512 です。 書き込み同時実行性が高いと、ターゲットに過度のストレスがかかり、ビジネスに影響を与える可能性があります。
完全同期レート制限
必要に応じて、完全同期レートを制限するかどうかを選択できます。 完全同期レートを制限することを選択した場合は、1 秒あたりのレコード数 (RPS) と 1 秒あたりのバイト数 (BPS) を指定する必要があります。 RPS は、完全同期中にターゲットに同期されるデータ行の最大数を 1 秒あたりで指定し、BPS は、完全同期中にターゲットに同期されるデータの最大量をバイト単位で 1 秒あたりで指定します。
説明ここで指定された RPS 値と BPS 値は、調整専用です。 実際の完全同期パフォーマンスは、ソースとターゲットの設定やインスタンスの仕様などの要因の影響を受けます。
ターゲットデータベース内の空でないテーブルの処理
[無視] を選択した場合、挿入するデータがターゲットテーブルの既存のデータと競合すると、データ伝送サービスは競合するデータをログに記録し、既存のデータを保持します。
重要[無視] を選択した場合、データは完全検証のために IN モードでプルされます。 この場合、ターゲットにソースに存在しないデータが含まれていると検証は適用されず、検証パフォーマンスが低下します。
[移行の停止] を選択し、ターゲットテーブルにレコードが含まれている場合、完全移行中に移行がサポートされていないことを示すエラーが報告されます。 この場合、移行を続行する前に、ターゲットテーブルのデータを処理する必要があります。
重要エラーを促すダイアログボックスで [復元] をクリックすると、データ伝送サービスはこのエラーを無視してデータの移行を続行します。 注意して進めてください。
増分同期
次の表に、[同期タイプの選択] ページで [増分同期] を選択した場合にのみ表示される増分同期パラメーターを示します。

パラメーター
説明
書き込み同時実行性
増分同期中にターゲットにデータを書き込むための同時実行性。 最大値は 512 です。 書き込み同時実行性が高いと、ターゲットに過度のストレスがかかり、ビジネスに影響を与える可能性があります。
増分同期レート制限
必要に応じて、増分同期レートを制限するかどうかを選択できます。 増分同期レートを制限することを選択した場合は、RPS と BPS を指定する必要があります。 RPS は、増分同期中にターゲットに同期されるデータ行の最大数を 1 秒あたりで指定し、BPS は、増分同期中にターゲットに同期されるデータの最大量をバイト単位で 1 秒あたりで指定します。
説明ここで指定された RPS 値と BPS 値は、調整専用です。 実際の増分同期パフォーマンスは、ソースとターゲットの設定やインスタンスの仕様などの要因の影響を受けます。
増分同期の開始タイムスタンプ
ソースが PostgreSQL データベースの場合、このパラメーターは使用できません。 デフォルト値は、増分同期が開始された時刻です。
詳細パラメーター
次のパラメーターは、[スキーマの同期] が [同期の種類の選択] ページで選択されていない場合にのみ表示されます。

パラメーター
説明
[データの同期]
このパラメーターを選択すると、ソースのスキーマやその他のカスタムフィールド値などの指定されたデータを、ターゲットの指定されたフィールドに書き込むことができます。
[スキーマ名の同期]
データ伝送サービスは、ソースのスキーマ名を取得し、それを文字列としてターゲットテーブルの指定されたフィールドに書き込みます。
[フィールド名の指定] を指定する場合は、このフィールドがターゲットのすべての関連テーブルのスキーマに存在することを確認してください。
[カスタムデータの同期]
カスタムフィールド値を文字列として、ターゲットのターゲットテーブルの指定されたフィールドに同期できます。
重要データ伝送サービスは、[フィールド名の指定] で指定されたフィールドのタイプ、[フィールド値] で指定された値の有効性、または特殊文字のエスケープを検証しません。 フィールドのタイプと値が要件を満たしていることを確認してください。
このセクションは、ターゲットが OceanBase Database V4.3.0 以降の Oracle テナントであり、[同期タイプの選択] ページで [スキーマ同期] を選択した場合にのみ表示されます。

このパラメーターは、スキーマ同期または増分同期中のターゲットテーブルオブジェクトのストレージタイプを指定します。 ターゲットテーブルオブジェクトでサポートされているストレージタイプは、[デフォルト]、[行ストレージ]、[列ストレージ]、および [ハイブリッド列ストレージ] です。 詳細については、default_table_store_format をご参照ください。
説明[デフォルト] 値は、ターゲットのパラメーター構成に基づいて他のパラメーターが自動的に設定されることを意味します。 スキーマ同期におけるテーブルオブジェクトは、指定されたストレージタイプに基づいて対応するスキーマに書き込まれます。
[事前チェック] をクリックします。
事前チェック中に、データ伝送サービスはソースとターゲット間の接続を検出します。 事前チェック中にエラーが返された場合は、次の操作を実行できます。
問題を特定してトラブルシューティングし、事前チェックを再実行します。
失敗した事前チェック項目の [アクション] 列で [スキップ] をクリックします。操作の結果を通知するダイアログボックスで、
[OK] をクリックします。
事前チェックに合格したら、[タスクの開始] をクリックします。
タスクを今すぐ開始する必要がない場合は、[保存] をクリックします。 後で [同期タスク] ページで、またはバッチ操作を実行することで、タスクを手動で開始できます。 バッチ操作の詳細については、「データ同期タスクのバッチ操作を実行する」をご参照ください。 データ同期タスクが開始されると、選択した同期タイプに基づいて実行されます。 詳細については、「データ同期タスクの詳細を表示する」をご参照ください。
データ伝送サービスでは、データ同期中に同期オブジェクトを削除できます。 詳細については、「同期オブジェクトを表示および変更する」をご参照ください。
重要ApsaraDB RDS for PostgreSQL インスタンスから OceanBase Database の Oracle テナントへのデータ同期中に同期オブジェクトを追加することはできません。
ネットワーク障害またはプロセスの起動が遅いなどの理由でデータ同期タスクで実行例外が発生した場合は、同期タスクの [同期タスク] または [詳細] ページで [復元] をクリックできます。