PolarDB for PostgreSQL (Oracle互換) は、Alibaba cloudによって開発された次世代のクラウドネイティブリレーショナルデータベースです。 Oracle構文との互換性が高いです。 Data Transmission Service (DTS) を使用して、PolarDB for PostgreSQL (Compatible with Oracle) クラスター間の一方向データ同期を実行できます。
前提条件
ソースPolarDB for PostgreSQL (Compatible with Oracle) クラスターは最新バージョンである必要があります。 クラスターの更新方法の詳細については、「バージョン管理」をご参照ください。
ソースPolarDB for PostgreSQL (Compatible with Oracle) クラスターで同期するテーブルには、プライマリキーまたはUNIQUE NOT NULLインデックスが含まれている必要があります。
ソースのPolarDB for PostgreSQL (Compatible with Oracle) クラスターでは、wal_levelパラメーターはlogicalに設定されています。 これは、論理エンコードに必要な情報が先行書き込みログ (WAL) ログに追加されることを示します。 詳細は、「クラスターパラメーターの設定」をご参照ください。
使用上の注意
DTSは、最初の完全データ同期中に、ソースRDSインスタンスとターゲットRDSインスタンスの読み取りおよび書き込みリソースを使用します。 これにより、RDSインスタンスの負荷が増加する可能性があります。 インスタンスのパフォーマンスが悪い場合、仕様が低い場合、またはデータ量が多い場合、データベースサービスが利用できなくなる可能性があります。 たとえば、ソースRDSインスタンスで多数の低速SQLクエリが実行されている場合、テーブルにプライマリキーがない場合、またはターゲットRDSインスタンスでデッドロックが発生する場合、DTSは大量の読み取りおよび書き込みリソースを占有します。 データ同期の前に、ソースRDSインスタンスとターゲットRDSインスタンスのパフォーマンスに対するデータ同期の影響を評価します。 オフピーク時にデータを同期することを推奨します。 たとえば、ソースRDSインスタンスとターゲットRDSインスタンスのCPU使用率が30% 未満の場合にデータを同期できます。
データ同期タスクは、1つのデータベースからのみデータを同期できます。 複数のデータベースのデータを同期するには、各データベースのデータ同期タスクを作成する必要があります。
データ同期のレイテンシが正確に表示されるように、DTSはソースデータベースにハートビートテーブルを作成します。 ハートビートテーブルの名前は
dts_postgres_heartbeat
です。 次の図は、テーブルのスキーマと内容を示しています。スキーマを同期し、そのスキーマを使用するテーブルを作成するか、RENAMEコマンドを実行して同期するテーブルの名前を変更する場合は、テーブルにデータを書き込む前に、
ALTER table schema.table REPLICA IDENTITY FULL;
コマンドを実行する必要があります。説明上記のサンプルステートメントの
schema
変数とtable
変数を、実際のスキーマ名とテーブル名に置き換えます。ソースデータベースが1つまたは複数の長期トランザクションを有し、増分データがデータ同期タスクで同期される場合、ソースデータベース内の長期トランザクションがコミットされる前に生成されたWALログを蓄積することができる。 その結果、ソースデータベースのディスク容量が不足する可能性があります。
課金
同期タイプ | タスク設定料金 |
スキーマ同期と完全データ同期 | 無料です。 |
増分データ同期 | 有料。 詳細については、「課金の概要」をご参照ください。 |
データ同期をサポートするSQL操作
API 操作 | SQL文 |
DML | 挿入、更新、および削除 |
DDL |
説明 次のシナリオでは、DDL文は同期されません。
|
手順
データ同期インスタンスを購入します。 詳細については、「DTSインスタンスの購入」をご参照ください。
説明購入ページで、ソースインスタンスと宛先インスタンスの両方のパラメーターをPolarDB-Oに設定し、同期トポロジパラメーターを一方向同期に設定します。
DTSコンソールにログインします。
説明データ管理 (DMS) コンソールにリダイレクトされている場合は、のアイコンをクリックして、以前のバージョンのDTSコンソールに移動し。
左側のナビゲーションウィンドウで、[データ同期] をクリックします。
[同期タスク] ページの上部で、ターゲットインスタンスが存在するリージョンを選択します。
データ同期インスタンスを見つけ、[操作] 列の [タスクの設定] をクリックします。
ソースインスタンスとターゲットインスタンスを設定します。
セクション
パラメーター
説明
非該当
同期タスク名
DTSが自動的に生成するタスク名。 タスクを識別するために、わかりやすい名前を指定することを推奨します。 一意のタスク名を使用する必要はありません。
ソースインスタンスの詳細
インスタンスタイプ
このパラメーターの値はPolarDB Instanceに設定されており、変更することはできません。
インスタンスリージョン
購入ページで選択したソースリージョン。 このパラメーターの値は変更できません。
PolarDBインスタンスID
ソースPolarDB for PostgreSQL (Oracle互換) クラスターのID。
データベース名
ソースデータベースの名前。
データベースアカウント
ソースのPolarDB for PostgreSQL (Compatible with Oracle) クラスターの特権アカウント。 特権データベースアカウントの作成方法の詳細については、「データベースアカウントの作成」をご参照ください。
データベースパスワード
データベースアカウントのパスワードを設定します。
ターゲットインスタンスの詳細
インスタンスタイプ
このパラメーターの値はPolarDBに設定されており、変更することはできません。
インスタンスリージョン
購入ページで選択したターゲットリージョン。 このパラメーターの値は変更できません。
PolarDBインスタンスID
移行先のPolarDB for PostgreSQL (Compatible with Oracle) クラスターのID。
データベース名
ターゲットテーブルの名前です。
データベースアカウント
ターゲットPolarDB for PostgreSQL (Compatible with Oracle) クラスターのデータベースアカウント。 アカウントには、データベース所有者の権限が必要です。
重要データベースの作成時にデータベース所有者を指定できます。
データベースパスワード
データベースアカウントのパスワードを設定します。
ページの右下隅にあるホワイトリストと次への設定をクリックします。
、ソースまたはターゲットデータベースがAlibaba Cloudデータベースインスタンス (ApsaraDB RDS for MySQL、ApsaraDB for MongoDBインスタンスなど) の場合、DTSは自動的にDTSサーバーのCIDRブロックをインスタンスのIPアドレスホワイトリストに追加します。 ソースデータベースまたはターゲットデータベースがElastic Compute Service (ECS) インスタンスでホストされている自己管理データベースの場合、DTSサーバーのCIDRブロックがECSインスタンスのセキュリティグループルールに自動的に追加されます。ECSインスタンスがデータベースにアクセスできることを確認する必要があります。 自己管理データベースが複数のECSインスタンスでホストされている場合、DTSサーバーのCIDRブロックを各ECSインスタンスのセキュリティグループルールに手動で追加する必要があります。 ソースデータベースまたはターゲットデータベースが、データセンターにデプロイされているか、サードパーティのクラウドサービスプロバイダーによって提供される自己管理データベースである場合、DTSサーバーのCIDRブロックをデータベースのIPアドレスホワイトリストに手動で追加して、DTSがデータベースにアクセスできるようにする必要があります。 詳細については、「DTSサーバーのCIDRブロックの追加」をご参照ください。
警告DTSサーバーのCIDRブロックがデータベースまたはインスタンスのホワイトリスト、またはECSセキュリティグループルールに自動的または手動で追加されると、セキュリティリスクが発生する可能性があります。 したがって、DTSを使用してデータを同期する前に、潜在的なリスクを理解して認識し、次の対策を含む予防策を講じる必要があります。VPNゲートウェイ、またはSmart Access Gateway。
競合するテーブルと同期するオブジェクトの処理モードを選択します。
設定
説明
既存のターゲットテーブルの処理モード
Precheck and Intercept: 移行元データベースのテーブルと同じ名前のテーブルがターゲットクラスターに含まれているかどうかを確認します。 ソースデータベースとターゲットデータベースに同じテーブル名のテーブルが含まれていない場合は、事前チェックに合格します。 それ以外の場合、事前チェック中にエラーが返され、データ同期タスクを開始できません。
説明ターゲットデータベース内の同じ名前のテーブルを削除または名前変更できない場合は、同期するオブジェクトの名前を変更して、テーブル名の競合を回避できます。 詳細については、「同期するオブジェクトの名前変更」をご参照ください。
無視: ソースデータベースとターゲットデータベースで同じテーブル名の事前チェックをスキップします。
警告[無視] を選択すると、ソースデータベースとターゲットデータベースの間でデータの不整合が発生する可能性があります。 これはビジネスの損失を引き起こす可能性があります。
ソースデータベースとターゲットデータベースが同じスキーマを使用している場合、DTSは、最初の完全データ同期中に、ターゲットデータベースのデータレコードと同じプライマリキーを持つデータレコードを同期しません。 ただし、DTSは増分データ同期中にこれらのデータレコードを同期します。
ソースデータベースとターゲットデータベースのスキーマが異なる場合、初期データ同期が失敗する可能性があります。 この場合、一部の列のみが同期されるか、データ同期タスクが失敗します。
同期するオブジェクトの選択
[使用可能] セクションから1つ以上のオブジェクトを選択し、アイコンをクリックして [選択済み] セクションに追加します。
テーブルまたはデータベースを選択できます。
説明データベースを選択すると、データベース内のすべてのスキーマ変更がターゲットデータベースに同期されます。
既定では、オブジェクトがターゲットデータベースに同期された後、オブジェクトの名前は変更されません。 ターゲットクラスターに同期されるオブジェクトの名前を変更する場合は、オブジェクト名マッピング機能を使用します。 詳細については、「同期するオブジェクトの名前変更」をご参照ください。
データベースとテーブルの名前変更
オブジェクト名マッピング機能を使用して、ターゲットインスタンスに同期されるオブジェクトの名前を変更できます。 詳細は、オブジェクト名のマッピングをご参照ください。
失敗した接続の再試行時間
既定では、DTSがソースデータベースまたはターゲットデータベースへの接続に失敗した場合、DTSは次の720分 (12時間) 以内に再試行します。 必要に応じて再試行時間を指定できます。 DTSが指定された時間内にソースデータベースとターゲットデータベースに再接続すると、DTSはデータ同期タスクを再開します。 それ以外の場合、データ同期タスクは失敗します。
説明DTSが接続を再試行すると、DTSインスタンスに対して課金されます。 ビジネスニーズに基づいて再試行時間を指定することを推奨します。 ソースインスタンスとターゲットインスタンスがリリースされた後、できるだけ早くDTSインスタンスをリリースすることもできます。
ページの右下隅にある [次へ] をクリックします。
初期同期タイプを選択します。
初期同期タイプ
説明
初期スキーマ同期
DTSは、必要なオブジェクトのスキーマを宛先PolarDB for Oracleクラスターに同期します。 DTSは、テーブル、ビュー、シノニム、トリガー、ストアドプロシージャ、関数、パッケージ、ユーザー定義型のオブジェクトの初期スキーマ同期をサポートしています。
重要ただし、オブジェクトにトリガーが含まれている場合、ソースデータベースとターゲットデータベース間でデータの不一致が発生します。 この問題を解決する方法の詳細については、「トリガーを含むソースデータベースのデータ同期または移行タスクの構成」をご参照ください。
初期フルデータ同期
DTSは、オブジェクトの履歴データをソースクラスタからターゲットクラスタに同期します。
重要データ同期中は、同期するオブジェクトに対してDDL操作を実行しないでください。 そうしないと、オブジェクトの同期に失敗する可能性があります。
ページの右下隅にある事前チェックをクリックします。
説明データ同期タスクを開始する前に、DTSは事前チェックを実行します。 データ同期タスクは、タスクが事前チェックに合格した後にのみ開始できます。
タスクが事前チェックに合格しなかった場合は、失敗した各項目の横にあるアイコンをクリックして詳細を表示できます。
詳細に基づいて問題をトラブルシューティングした後、新しい事前チェックを開始します。
問題をトラブルシューティングする必要がない場合は、失敗した項目を無視して新しい事前チェックを開始してください。
次のメッセージが表示されたら、[事前チェック] ダイアログボックスを閉じます。[事前チェックの合格] その後、データ同期タスクが開始されます。
初期同期が完了し、データ同期タスクが同期状態になるまで待ちます。
データ同期タスクのステータスは、[同期タスク] ページで確認できます。