Data Transmission Service (DTS) を使用すると、PolarDB for PostgreSQL (Compatible with Oracle) クラスターから自己管理 Oracle データベースへデータを移行できます。既存データの転送には完全なデータ移行を、継続的な変更の複製には増分データ移行をサポートしており、サービス停止時間を最小限に抑えることができます。
前提条件
開始する前に、以下の点を確認してください。
ソースとなる PolarDB for PostgreSQL (Compatible with Oracle) クラスターが作成済みである必要があります。詳細については、「PolarDB for PostgreSQL (Compatible with Oracle) クラスターの作成」をご参照ください。
ソースクラスターの
wal_levelパラメーターはlogicalに設定されています。これにより、先行書き込みログ (WAL) で論理エンコーディングが有効になります。詳細については、「クラスターパラメーターの設定」をご参照ください。
必要な権限
| データベース | 必要な権限 |
|---|---|
| ソース PolarDB for PostgreSQL (Compatible with Oracle) クラスター | 特権アカウント |
| 自己管理 Oracle データベース | スキーマオーナー |
アカウントの作成および権限の付与については、以下をご参照ください。
PolarDB for PostgreSQL (Compatible with Oracle):「データベースアカウントの作成」
自己管理 Oracle データベース:「CREATE USER」および「GRANT」
課金
| 移行タイプ | インスタンス構成料金 | インターネットトラフィック料金 |
|---|---|---|
| 完全なデータ移行 | 無料 | Alibaba Cloud からインターネット経由でデータが移行される場合にのみ課金されます。詳細については、「課金概要」をご参照ください。 |
| 増分データ移行 | 課金済み。詳細については、「課金概要」をご参照ください。 | Alibaba Cloud からインターネット経由でデータを移行する場合にのみ課金されます。 |
移行タイプ
| 移行タイプ | 説明 |
|---|---|
| 完全なデータ移行 | ソースからターゲットデータベースへ既存データを移行します。このフェーズ中は、移行対象オブジェクトに対して DDL 操作を実行しないでください。 |
| 増分データ移行 | ソースデータベースの redo ログファイルを読み取り、継続的な変更をターゲットへ複製します。サービス稼働中の移行を実現するには、完全なデータ移行と併せてこのタイプを選択してください。 |
増分移行でサポートされる SQL 操作
| 操作タイプ | SQL ステートメント |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | ソースデータベースアカウントが特権アカウントである場合にのみ利用可能:CREATE TABLE、DROP TABLE、ALTER TABLE(RENAME TABLE、ADD COLUMN、ADD COLUMN DEFAULT、ALTER COLUMN TYPE、DROP COLUMN、ADD CONSTRAINT、ADD CONSTRAINT CHECK、ALTER COLUMN DROP DEFAULT を含む)、TRUNCATE TABLE、CREATE INDEX ON TABLE |
DDL 移行は、2020 年 10 月 1 日以降に作成されたタスクでのみ利用可能です。タスクが 2023 年 5 月 12 日より前に作成された場合は、移行タスクの設定を行う前に、ソースデータベースでトリガーと関数を作成します。詳細については、「PostgreSQL データベース向けの増分 DDL 移行を実装するためのトリガーおよび関数の使用方法」をご参照ください。
以下の DDL 操作は移行されません。
CASCADE や RESTRICT などの追加 DDL 情報
SET session_replication_role = replicaを実行したセッションからの DDL ステートメントDML ステートメントと同じトランザクション内で送信された DDL ステートメント
移行対象として選択されていないオブジェクトに対する DDL ステートメント
増分データ移行では BIT データ型はサポートされていません。
制限事項
スキーマ移行中、DTS はソースからターゲットデータベースへ外部キーを移行します。完全なデータ移行および増分データ移行中は、DTS がセッションレベルで外部キー制約チェックおよびカスケード操作を一時的に無効化します。移行中にソースデータベースでカスケード操作や削除操作を実行すると、データの不整合が発生する可能性があります。
ソースデータベースの制限事項
ソースデータベースサーバーには十分なアウトバウンド帯域幅が必要です。帯域幅が不足していると、移行速度が低下します。
移行対象テーブルには PRIMARY KEY または一意制約 (UNIQUE constraint) が定義されており、すべてのフィールド値が一意である必要があります。これを満たさない場合、ターゲットデータベースに重複レコードが生成される可能性があります。
テーブルを移行対象として選択し、ターゲットデータベースでテーブル名またはカラム名の変更を行う必要がある場合、1 つのタスクで最大 1,000 個のテーブルをサポートします。1,000 個を超えるテーブルを移行する場合は、複数のタスクを設定するか、データベース全体を移行してください。
増分データ移行では、WAL の有効化および WAL ログの保持期間が必須です。所定の期間内にログが保持されない場合、DTS が WAL ログを取得できず、タスクが失敗する可能性があります。例外的な状況では、データ損失または不整合が発生する可能性があります。完全なデータ移行が完了後は、保持期間を 24 時間以上に短縮できます。
増分データ移行のみの場合:24 時間以上
完全なデータ移行および増分データ移行を併用する場合:最低 7 日間
完全なデータ移行中は、データベースまたはテーブルのスキーマを変更する DDL 操作を実行しないでください。タスクが失敗します。
完全なデータ移行のみを実行する場合、移行中はソースデータベースへのデータ書き込みを行わないでください。データ整合性を確保するためには、「完全なデータ移行」と「増分データ移行」の両方を選択してください。
ソースクラスターでプライマリ/セカンダリ スイッチオーバーを実行する予定がある場合、論理サブスクリプションが中断されないようにするために、まず論理レプリケーションスロットフェールオーバー機能を有効化します。詳細については、「論理レプリケーションスロットフェールオーバー」をご参照ください。
増分移行中にソースデータベースに長時間トランザクションが存在する場合、そのトランザクションがコミットされる前に生成された WAL ログが蓄積し、ディスク領域が不足する可能性があります。
その他の制限事項
スキーマ移行はサポートされていません。移行タスクの設定前に、宛先インスタンスに必要なデータベースおよびテーブルを作成してください。
1 つの移行タスクでは、1 つのデータベースからのみデータを移行できます。複数のデータベースを移行する場合は、各データベースごとに個別のタスクを作成してください。
増分移行中に、スキーマを移行対象として選択し、その後そのスキーマ内でテーブルを作成または名前変更する場合、テーブルへデータを書き込む前に、以下のステートメントを実行してください。
ALTER TABLE schema.table REPLICA IDENTITY FULL;schemaおよびtableは、実際のスキーマ名およびテーブル名に置き換えてください。移行遅延の監視のために、DTS はソースデータベース内に
dts_postgres_heartbeatという名前のテーブルを作成します。以下の図にテーブル構造を示します。
増分移行中、DTS はソースデータベース内に
dts_sync_で始まるプレフィックスを持つレプリケーションスロットを作成します。DTS はこのスロットを使用して、過去 15 分間の増分ログを取得できます。DTS インスタンスがリリースされると、レプリケーションスロットは自動的に削除されます。
ソースデータベースのパスワードを変更したり、DTS を IP アドレスホワイトリストから除外したりした場合、レプリケーションスロットは自動的に削除されません。スロットの蓄積を防ぐため、ソースデータベースから手動で削除してください。
移行タスクがリリースまたは失敗した場合、DTS はレプリケーションスロットを自動的にクリアします。ソースクラスターでプライマリ/セカンダリ スイッチオーバーが実行された場合は、セカンダリインスタンスにログインしてレプリケーションスロットをクリアしてください。
完全なデータ移行では同時 INSERT 操作が使用されるため、ターゲットテーブルに断片化が発生します。移行完了後、ターゲットデータベースの表領域はソースデータベースよりも大きくなります。
DTS は FLOAT および DOUBLE カラムの値を取得するために
ROUND(COLUMN,PRECISION)関数を使用します。FLOAT のデフォルト精度は 38 桁、DOUBLE のデフォルト精度は 308 桁です。移行を開始する前に、これらの精度設定が要件を満たすことを確認してください。DTS は失敗したタスクを最大 7 日間再開しようと試みます。ワークロードをターゲットデータベースへ切り替える前に、失敗したタスクを停止またはリリースするか、ターゲットデータベース上の DTS アカウントから書き込み権限を削除する
REVOKEステートメントを実行してください。これを実行しない場合、再開されたタスクによってターゲットデータベースのデータが上書きされる可能性があります。
特殊ケース
自己管理 Oracle データベースがリアルアプリケーションクラスター (RAC) アーキテクチャでデプロイされ、VPC 経由で DTS に接続されている場合、各ノードの Single Client Access Name (SCAN) IP アドレスおよび仮想 IP アドレス (VIP) を VPC に接続し、ルートを設定します。DTS コンソールで Oracle データベースを設定する際は、SCAN IP アドレスを データベースエンドポイント または IP アドレス として指定します。詳細については、「オンプレミスデータベースを Alibaba Cloud に接続する」および「VPN Gateway を使用してデータセンターを DTS に接続する」をご参照ください。
移行タスクの設定
ステップ 1:データ移行タスクページへ移動
Data Management (DMS) コンソール にログインします。
トップナビゲーションバーで、DTS をクリックします。
左側ナビゲーションウィンドウで、DTS (DTS) > データ移行 を選択します。
操作は、DMS コンソールのモードおよびレイアウトに応じて異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。また、新しい DTS コンソールで直接「データ移行タスクページ」にアクセスすることもできます。
ステップ 2:リージョンの選択
データ移行タスク の横にあるドロップダウンリストから、データ移行インスタンスが配置されているリージョンを選択します。
新しい DTS コンソールでは、左上隅からリージョンを選択します。
ステップ 3:ソースおよびターゲットデータベースの設定
タスクの作成 をクリックします。タスクの作成 ウィザードで、以下のパラメーターを使用してソースおよびターゲットデータベースを設定します。
進む前に、ページ上部に表示される 制限事項 を必ずお読みください。このステップを省略すると、タスクの失敗やデータの不整合が発生する可能性があります。
ソースデータベース
| パラメーター | 説明 |
|---|---|
| タスク名 | タスクの名前です。DTS が自動的に名前を割り当てます。タスクを識別しやすくするために、意味のある名前を指定してください。名前は一意である必要はありません。 |
| データベースタイプ | PolarDB (Compatible with Oracle) を選択します。 |
| アクセス方法 | パブリック IP アドレス を選択します。 |
| インスタンスリージョン | ソース PolarDB for PostgreSQL (Compatible with Oracle) クラスターが配置されているリージョンです。 |
| データソース | プライマリノードのエンドポイントとポートのみを設定する場合は、単一データソース を選択します。複数データソース を選択すると、データソースの IP:ポート フィールドに、プライマリノードを含む複数ノードの IP アドレスおよびポート番号を指定できます。複数データソースを設定すると、プライマリ/セカンダリ スイッチオーバー時に DTS が自動的に新しいプライマリノードへ切り替わり、ディザスタリカバリシナリオで有用です。本例では 単一データソース を使用します。 |
| ドメイン名または IP アドレス | ソースクラスター内のプライマリノードのエンドポイントです。ご利用のコンピューターで ping コマンドを実行して、IP アドレスを取得してください。 |
| ポート番号 | ソースデータベースのサービスポートです。デフォルト値:1521。インターネット経由でアクセス可能である必要があります。 |
| データソースの IP:ポート | プライマリノードを含む複数ノードの IP アドレスおよびポート番号です。複数のエントリはカンマ (,) で区切ります。複数データソース を選択した場合に必須です。 |
| Oracle タイプ | 非 RAC インスタンス を選択して SID パラメーターを設定するか、RAC または PDB インスタンス を選択して サービス名 パラメーターを設定します。本例では 非 RAC インスタンス を使用します。 |
| データベース名 | クラスター内のソースデータベースの名前です。 |
| データベースアカウント | ソースクラスターのデータベースアカウントです。必要な権限については、「必要な権限」をご参照ください。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
ターゲットデータベース
| パラメーター | 説明 |
|---|---|
| データベースタイプ | Oracle を選択します。 |
| アクセス方法 | パブリック IP アドレス を選択します。 |
| インスタンスリージョン | ターゲット Oracle データベースが配置されているリージョンです。 |
| ホスト名または IP アドレス | ターゲット Oracle データベースのエンドポイントです。 |
| ポート番号 | ターゲットデータベースのサービスポートです。デフォルト値:1521。 |
| Oracle タイプ | 非 RAC インスタンス を選択して SID パラメーターを設定するか、RAC または PDB インスタンス を選択して サービス名 パラメーターを設定します。本例では 非 RAC インスタンス を使用します。 |
| データベースアカウント | ターゲット Oracle データベースのアカウントです。必要な権限については、「必要な権限」をご参照ください。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
ステップ 4:接続性のテストおよび DTS IP アドレスのホワイトリスト登録
ご利用の自己管理データベースに IP アドレスホワイトリストが設定されている場合、DTS サーバーの CIDR ブロックをホワイトリストに追加してください。その後、接続性のテストと続行 をクリックします。
DTS サーバーの CIDR ブロックをデータベースインスタンスのホワイトリストまたは ECS セキュリティグループルールに追加すると、環境がセキュリティリスクにさらされる可能性があります。続行する前に、アカウントおよびパスワードのセキュリティ強化、公開ポートの制限、API 呼び出しの認証、ホワイトリストルールの定期的なレビューなど、保護措置を講じてください。インターネット経由での公開ではなく、Express Connect、VPN ゲートウェイ、または Smart Access Gateway を使用してデータベースを DTS に接続することを検討してください。
ステップ 5:移行対象および設定の設定
| パラメーター | 説明 |
|---|---|
| 移行タイプ | 既存データのみを移行する場合は、完全なデータ移行 を選択します。移行中にサービスを稼働させ続ける場合は、完全なデータ移行 と 増分データ移行 の両方を選択します。増分データ移行 を選択しない場合、移行中はソースデータベースへのデータ書き込みを行わないでください。 |
| 競合テーブルの処理モード | 事前チェックおよびエラー報告オブジェクト名のマッピング:ターゲットデータベースにソースと同名のテーブルが存在するかどうかをチェックします。同名のテーブルが存在する場合、事前チェックは失敗し、タスクを開始できません。競合テーブルの名前変更には、オブジェクト名マッピング機能を使用してください。詳細については、「」をご参照ください。エラーを無視して続行:名前衝突のチェックをスキップします。ソースとターゲットのスキーマが一致する場合、DTS は重複するプライマリキー値を持つレコードをスキップします。スキーマが異なる場合、特定のカラムのみが移行されるか、タスクが失敗する可能性があります。慎重に使用してください。 |
| ソースオブジェクト | ソースオブジェクト からオブジェクトを選択し、矢印アイコンをクリックして 選択済みオブジェクト に追加します。カラム、テーブル、またはスキーマを選択できます。テーブルまたはカラムを選択した場合、DTS はビュー、トリガー、ストアドプロシージャは移行しません。 |
| 選択済みオブジェクト | 宛先インスタンスの単一オブジェクトの名前を変更するには、[選択したオブジェクト] 内のオブジェクトを右クリックします。 詳細については、「単一オブジェクトの名前をマッピングする」をご参照ください。 複数のオブジェクトの名前を一度に変更するには、右上隅にある [一括編集] をクリックします。 詳細については、「複数のオブジェクト名を一度にマッピングする」をご参照ください。 WHERE 条件を使用してデータをフィルターするには、[選択したオブジェクト] 内のテーブルを右クリックして条件を指定します。 詳細については、「SQL 条件を使用してデータをフィルターする」をご参照ください。 オブジェクトに対して移行する特定の SQL 操作を選択するには、[選択したオブジェクト] 内のオブジェクトを右クリックして操作を選択します。 |
オブジェクト名マッピング機能を使用してオブジェクトの名前を変更すると、それらに依存する他のオブジェクトの移行が失敗する可能性があります。
ステップ 6:高度な設定の設定
次へ:高度な設定 をクリックし、以下のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| アラートの設定 | アラート機能をスキップするには、[いいえ] を選択します。アラートの設定を行うには、[はい] を選択します。タスクが失敗した場合、または移行遅延がしきい値を超えた場合、指定されたアラート連絡先に通知が送信されます。詳細については、「モニタリングとアラートの設定」をご参照ください。 |
| 失敗した接続の再試行時間 | タスク開始後に DTS が失敗した接続を再試行する時間範囲です。有効値:10~1440 分。デフォルト:720 分。30 分を超える値を設定してください。この期間内に DTS が再接続できた場合、タスクは再開されます。そうでない場合、タスクは失敗します。複数のタスクが同じソースまたはターゲットデータベースを共有する場合、最も短い再試行時間範囲が適用されます。 |
| ソースおよびターゲットデータベースにおけるその他の問題発生時の再試行待機時間 | DDL または DML 操作の失敗に対する再試行時間範囲です。有効値:1~1440 分。デフォルト:10 分。10 分を超える値を設定してください。この値は、失敗した接続の再試行時間 の値より小さくする必要があります。 |
| ETL の設定 | ETL 機能を設定するには、はい を選択し、コードエディタにデータ処理文を入力します。詳細については、「データ移行またはデータ同期タスクで ETL を設定する」および「ETL とは?」をご参照ください。スキップするには、いいえ を選択します。 |
DTS が接続を再試行している間も、DTS インスタンスの課金は継続されます。再試行時間範囲はビジネス要件に基づいて設定し、ソースおよびターゲットインスタンスが不要になった時点で速やかに DTS インスタンスをリリースしてください。
ステップ 7:設定の保存および事前チェックの実行
次へ:タスク設定の保存および事前チェック をクリックします。
このタスクの API パラメーターを表示するには、次へ:タスク設定の保存および事前チェック の上にポインターを合わせ、OpenAPI パラメーターのプレビュー をクリックしてください。
DTS はタスク開始前に事前チェックを実行します。事前チェックが失敗した場合、各失敗項目の横にある 詳細の表示 をクリックし、問題を解決してから 再チェック をクリックしてください。
事前チェックのアラートが表示された場合:
無視できないアラートの場合は、詳細の表示 をクリックし、問題を解決してから再チェックを実行してください。
無視できるアラートの場合は、アラート詳細の確認 をクリックします。詳細の表示 ダイアログで 無視 をクリックし、OK をクリックしてから 再チェック をクリックしてください。アラートを無視すると、データの不整合が発生する可能性があります。
ステップ 8:インスタンスの購入
事前チェックの 成功率 が 100 % に達するまで待ち、その後 次へ:インスタンスの購入 をクリックします。
インスタンスの購入 ページで、以下のパラメーターを設定します。
| セクション | パラメーター | 説明 |
|---|---|---|
| 新規インスタンスクラス | リソースグループ | データ移行インスタンスのリソースグループ。デフォルト: デフォルト リソースグループ。詳細については、「Resource Management とは」をご参照ください。 |
| インスタンスクラス | インスタンスクラスは移行速度を決定します。ご使用のシナリオに基づいてクラスを選択してください。詳細については、「データ移行インスタンスの仕様」をご参照ください。 |
ステップ 9:タスクの開始
Data Transmission Service(従量課金)サービス利用規約 のチェックボックスをオンにし、購入および開始 をクリックします。タスク一覧で進行状況を確認できます。