Data Transmission Service(DTS)を使用して、自己管理 Oracle データベースから PolarDB for PostgreSQL(Oracle 互換)クラスターへデータを移行します。DTS はスキーマ移行、完全なデータ移行、および増分データ移行をサポートしているため、アプリケーションの停止を伴わずに移行が可能です。
前提条件
開始する前に、以下の点を確認してください。
ソースの Oracle データベースおよびターゲットの PolarDB for PostgreSQL(Oracle 互換)クラスターがいずれも作成済みである必要があります。PolarDB for PostgreSQL(Oracle 互換)クラスターの作成手順については、「クラスターの作成」をご参照ください。対応するデータベースバージョンについては、「データ移行シナリオの概要」をご参照ください。
ソースの Oracle データベースが ARCHIVELOG モードで実行されており、アーカイブ REDO ログファイルにアクセス可能であり、保持期間が設定済みである必要があります。「アーカイブ REDO ログファイルの管理」をご参照ください。
ソースの Oracle データベースで補足ログが有効化されており、
SUPPLEMENTAL_LOG_DATA_PKおよびSUPPLEMENTAL_LOG_DATA_UIの値がYesに設定されている必要があります。「補足ログ」をご参照ください。DTS の Oracle 移行に関する機能および制限事項を十分に理解している必要があります。移行前に、Advanced Database & Application Migration(ADAM)を使用してソースデータベースを評価してください。「Oracle データベースの準備」および「概要」をご参照ください。
課金
| 移行タイプ | インスタンス構成料金 | インターネットトラフィック料金 |
|---|---|---|
| スキーマ移行および完全なデータ移行 | 無料 | Alibaba Cloud からインターネット経由でデータを移行する場合にのみ課金されます。「課金概要」をご参照ください。 |
| 増分データ移行 | 課金対象です。「課金概要」をご参照ください。 | — |
移行タイプ
| 移行タイプ | 説明 |
|---|---|
| スキーマ移行 | DTS は選択したオブジェクトのスキーマをターゲットクラスターに移行します。対応するオブジェクトタイプ:テーブル、ビュー、シノニム、トリガー、ストアドプロシージャ、ストアドファンクション、パッケージ、ユーザー定義型。 説明 このシナリオでは、DTS はトリガーのスキーマ移行をサポートしていません。データの不整合を防ぐため、移行前にソースデータベース上のトリガーを削除してください。「トリガーを含むソースデータベースに対するデータ同期または移行タスクの構成」をご参照ください。 |
| 完全なデータ移行 | DTS はソースの Oracle データベースから既存のすべてのデータをターゲットクラスターに移行します。 説明 スキーマ移行および完全なデータ移行中に、移行対象のオブジェクトに対して DDL 操作を実行しないでください。 |
| 増分データ移行 | 完全なデータ移行が完了後、DTS はソースの Oracle データベースから REDO ログファイルをポーリングおよび取得し、増分変更をターゲットクラスターに移行します。これにより、移行中もアプリケーションを継続して実行できます。 |
増分移行でサポートされる SQL 操作
| 操作タイプ | SQL ステートメント |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | CREATE TABLE(パーティション句、サブパーティション句、関数は非対応。CREATE TABLE AS SELECT は非対応)、ALTER TABLE(ADD COLUMN、ADD INDEX、DROP COLUMN、DROP INDEX、MODIFY COLUMN、RENAME COLUMN)、DROP TABLE、RENAME TABLE、TRUNCATE TABLE、CREATE INDEX |
データ型のマッピング
「異種データベース間のデータ型マッピング」をご参照ください。
制限事項
スキーマ移行中、DTS は外部キーをターゲットデータベースに移行します。完全なデータ移行および増分データ移行中、DTS はセッションレベルで外部キーの制約チェックおよびカスケード操作を一時的に無効化します。移行中にソースデータベースで実行されたカスケード更新および削除操作により、データの不整合が発生する可能性があります。
ソースデータベースの制限事項
帯域幅
ソースデータベースをホストするサーバーには十分なアウトバウンド帯域幅が必要です。そうでない場合、移行速度が低下します。
Express Connect 経由の Oracle RAC
ソースデータベースが Express Connect 経由で接続された Oracle RAC データベースである場合、ソースの構成時にデータベースに対して仮想 IP アドレス(VIP)を指定してください。Single Client Access Name(SCAN)IP アドレスは使用しないでください。
ソースデータベースが Express Connect、VPN Gateway、Smart Access Gateway、Database Gateway、または Cloud Enterprise Network(CEN)経由で接続された Oracle RAC データベースである場合、SCAN IP アドレスではなく単一の VIP を使用できます。VIP を指定した後、Oracle RAC データベースではノードフェイルオーバーはサポートされません。
VARCHAR2 の空文字列
ソースの VARCHAR2 フィールドに空文字列(Oracle では NULL と評価される)が含まれており、対応するターゲットフィールドに NOT NULL 制約が設定されている場合、移行タスクは失敗します。
移行対象のオブジェクト
テーブルには PRIMARY KEY または一意制約(すべてのフィールドが一意)が必要です。これを満たさない場合、ターゲットデータベースに重複レコードが生成される可能性があります。あるいは、プライマリキーまたは一意制約がないテーブルに対しては、ROWID 値をプライマリキーとして使用できます。
Oracle 12c 以降の場合:テーブル名は 30 バイトを超えてはなりません。
個別のテーブルを選択し、ターゲットでテーブルまたはカラムの名前を変更する必要がある場合、単一の移行タスクでは最大 1,000 個のテーブルをサポートします。1,000 個を超えるテーブルを移行する場合は、複数のタスクを構成するか、データベース全体を移行してください。
増分移行の要件
REDO ログおよびアーカイブログの有効化が必要です。
ログの保持期間:DTS が必要なログを取得できない場合、タスクは失敗します。極端なケースでは、データ損失または不整合が発生する可能性があります。
増分移行のみの場合:REDO ログおよびアーカイブ REDO ログを 24 時間以上保存してください。
完全なデータ移行+増分データ移行の場合:ログを最低 7 日間保存してください。完全移行が完了後、保持期間を 24 時間以上に短縮できます。
ソースデータベースで避けるべき操作
スキーマ移行および完全なデータ移行中:DDL 操作を実行しないでください。移行タスクが失敗します。
完全移行のみの場合:ソースデータベースへの書き込みを避けてください。データの不整合が発生する可能性があります。データ整合性を確保するためには、スキーマ移行、完全なデータ移行、および増分データ移行を同時に選択してください。
任意の移行中:LONGTEXT フィールドの更新を行わないでください。移行タスクが失敗します。
その他の制限事項
パフォーマンスへの影響
移行による両方のデータベースへのパフォーマンス影響を評価してください。ピーク時間帯を避け、オフピーク時間帯に移行を実施してください。完全なデータ移行中、DTS は両方のデータベースの読み取りおよび書き込みリソースを使用するため、サーバー負荷が増加します。
表領域サイズ
完全なデータ移行中、同時 INSERT 操作によりターゲットクラスターのテーブルが断片化します。完全移行後、ターゲットの表領域はソースデータベースよりも大きくなります。
失敗したタスクの再開
DTS は失敗したタスクを最大 7 日間再開しようと試みます。ワークロードをターゲットクラスターに切り替える前に、失敗したタスクを停止または解放してください。あるいは、REVOKE ステートメントを実行して、DTS アカウントの書き込み権限を取り消してください。そうしないと、再開されたタスクによってターゲットデータがソースデータで上書きされる可能性があります。
インデックス
ターゲットクラスターは、ソースの Oracle データベースの ROWID に対応する一意なインデックス(例:pg_oid_1498503_index)を生成します。そのため、ターゲットクラスターにはソースデータベースよりも多くのインデックスが存在します。
文字列終端子
ターゲットクラスターは文字列終端子('\0')をサポートしていません。DTS はこの終端子をターゲットに書き込まないため、ソースとターゲットの間でデータの不整合が発生します。
CHECK 制約
ソースの Oracle データベースの CHECK 制約は、ターゲットクラスターでは非 NULL 制約に変換されます。
文字セットおよびタイムゾーン
ソースおよびターゲットデータベースの文字セットおよびタイムゾーンは互換性がある必要があります。互換性がない設定では、データの不整合やタスクの失敗が発生する可能性があります。
スキーマ移行
互換性のないデータ型によるタスク失敗を回避するため、DTS のスキーマ移行機能を使用してください。
カスタム型および組み込みオブジェクト
カスタム型オブジェクトは移行可能です。一方、組み込みの Oracle オブジェクト(Oracle が自動生成)は移行できません。ターゲットクラスターは Oracle の組み込みオブジェクトをネイティブでサポートしているため、手動での移行は不要です。
シーケンス
DTS はシーケンスなどのメタデータの妥当性をチェックしません。メタデータの妥当性は手動で確認する必要があります。ワークロードをターゲットに切り替えた後、新しく書き込まれるシーケンスはソースの最大値から連続しません。切り替え前にソースから最大シーケンス値を照会し、それらの値をターゲットの初期値として設定してください。「次のステップ」で照会手順をご確認ください。
外部キー、トリガー、および session_replication_role パラメーター
移行対象のテーブルに外部キー、トリガー、またはイベントトリガーが含まれている場合、かつターゲットデータベースのアカウントが特権アカウントまたはスーパーユーザロールの権限を持つアカウントである場合、DTS は完全または増分移行中にセッションレベルで session_replication_role を replica に設定します。アカウントがこれらの権限を持たない場合、ターゲットデータベースで手動で session_replication_role を replica に設定してください。
session_replication_role が replica に設定された状態でソースデータベースでカスケード更新または削除操作が実行された場合、データの不整合が発生する可能性があります。移行タスクを解放した後、session_replication_role を origin に戻してください。
Oracle データベースアカウントの設定
ソースの Oracle データベースにログインし、DTS 用のアカウントを作成して必要な権限を付与します。
以下の権限を備えたアカウントをすでに作成済みの場合は、この手順をスキップしてください。
| データベース | スキーマ移行 | 完全なデータ移行 | 増分データ移行 |
|---|---|---|---|
| 自己管理 Oracle データベース | スキーマ所有者権限 | スキーマ所有者権限 | 詳細な権限 |
| PolarDB for PostgreSQL(Oracle 互換)クラスター | スキーマ所有者権限 | — | — |
アカウントの作成および権限の付与手順については、以下をご参照ください。
自己管理 Oracle データベース:「データベースアカウントの準備」、「CREATE USER」、「GRANT」
PolarDB for PostgreSQL(Oracle 互換)クラスター:「データベースアカウントの作成」
増分データを移行するには、移行タスクの作成前に Oracle データベースでアーカイブログおよび補足ログを有効化してください。「Oracle データベースの構成」をご参照ください。
移行タスクの作成
データ移行タスク ページに移動します。
Data Management(DMS)コンソール にログインします。
トップナビゲーションバーで、DTS の上にポインターを合わせます。
DTS(DTS) > データ移行 を選択します。
ナビゲーションは、DMS コンソールのモードおよびレイアウトによって異なる場合があります。「シンプルモード」および「DMS コンソールのレイアウトおよびスタイルのカスタマイズ」をご参照ください。また、直接「新しい DTS コンソールのデータ移行ページ」にアクセスすることもできます。
データ移行タスク の右側にあるドロップダウンリストから、ご利用の移行インスタンスが配置されているリージョンを選択します。
新しい DTS コンソールでは、左上隅のリージョンを選択します。
タスクの作成 をクリックします。データ移行タスクの作成 ウィザードで、ソースおよびターゲットデータベースを構成します。
警告ソースおよびターゲットデータベースの構成後、次に進む前にページ上部に表示される制限事項を必ずご確認ください。この手順をスキップすると、タスクが失敗したり、データの不整合が発生したりする可能性があります。
セクション パラメーター 説明 該当なし タスク名 タスクの名前です。DTS が自動的に名前を生成します。識別しやすい名前を指定してください。名前は一意である必要はありません。 ソースデータベース データベースタイプ Oracle を選択します。 アクセス方法 ソースデータベースへの接続方法です。本例では パブリック IP アドレス を使用します。その他のアクセス方法の場合は、事前に必要な環境を構築してください。「事前準備の概要」をご参照ください。 インスタンスリージョン ソースの Oracle データベースが配置されているリージョンです。 ホスト名または IP アドレス ソースの Oracle データベースのエンドポイントです。 ポート番号 ソースの Oracle データベースのサービスポートです。デフォルト値:1521。本例では、このポートがインターネット経由でアクセス可能である必要があります。 Oracle タイプ ソースの Oracle データベースのアーキテクチャです。ノン RAC インスタンス を選択して SID パラメーターを構成するか、RAC または PDB インスタンス を選択して サービス名 パラメーターを構成します。本例では ノン RAC インスタンス を使用します。 データベースアカウント ソースの Oracle データベースのアカウントです。「Oracle データベースアカウントの設定」で必要な権限をご確認ください。 データベースパスワード データベースアカウントのパスワードです。 ターゲットデータベース データベースタイプ PolarDB(Oracle 互換) を選択します。 アクセス方法 パブリック IP アドレス を選択します。 インスタンスリージョン ターゲットクラスターが展開されているリージョンです。 データソース 単一データソース を選択してプライマリノードのエンドポイントおよびポートを構成します。複数データソース を選択して、データソースの IP:ポート フィールドに複数ノードの IP アドレスおよびポート番号を指定します。複数データソース を使用すると、プライマリ/セカンダリ スイッチオーバー時に DTS が自動的に新しいプライマリノードに切り替わり、ディザスタリカバリのシナリオに適しています。本例では 単一データソース を使用します。 ドメイン名または IP アドレス ターゲットクラスターのプライマリノードのエンドポイントです。お使いのコンピューターで pingコマンドを実行して IP アドレスを取得してください。ポート番号 ターゲットデータベースのサービスポートです。デフォルト値:1521。 データソースの IP:ポート プライマリノードを含む複数ノードの IP アドレスおよびポート番号です。複数のエントリはカンマ(,)で区切ります。 データベース名 ターゲットクラスター内のデータベース名です。 データベースアカウント ターゲットクラスターのアカウントです。「Oracle データベースアカウントの設定」で必要な権限をご確認ください。 データベースパスワード データベースアカウントのパスワードです。 ソースデータベースに IP アドレスホワイトリストが設定されている場合は、DTS サーバーの CIDR ブロックをホワイトリストに追加してください。その後、接続テスト をクリックします。
警告DTS サーバーの CIDR ブロックをデータベースのホワイトリストまたは ECS セキュリティグループに追加すると、セキュリティリスクが発生する可能性があります。実行前に、アカウント認証情報の強化、公開ポートの制限、API 呼び出しの検証、ホワイトリストルールの定期的な監査などの予防措置を講じてください。パブリック IP アドレスの代わりに、Express Connect、VPN Gateway、または Smart Access Gateway を使用してデータベースと DTS を接続することを検討してください。
移行対象のオブジェクトおよび高度な設定を構成します。
パラメーター 説明 移行タイプ 一度限りの移行の場合は、スキーマ移行 および 完全なデータ移行 を選択します。サービスの停止を伴わずに移行する場合は、増分データ移行 も選択します。 説明増分データ移行 を選択しない場合、データ整合性を保つため、移行中にソースデータベースへの書き込みを避けてください。
プライマリキー/一意キーのないテーブルに非表示のプライマリキーを追加 移行対象のテーブルのいずれかにプライマリキーまたは一意キーがない場合、はい に設定します。DTS は、ターゲットで Oracle の ROWID カラムを非表示のプライマリキーとして使用し、重複データを防止します。このパラメーターは、スキーマ移行、完全なデータ移行、および 増分データ移行 のすべてが選択されている場合にのみ利用可能です。 競合テーブルの処理モード 事前チェックおよびエラー報告:DTS は、ターゲットデータベースにソースと同じ名前のテーブルが存在するかどうかをチェックします。重複が見つかった場合、事前チェックは失敗し、タスクは開始できません。オブジェクト名マッピング機能を使用して競合するテーブルの名前を変更してください。「オブジェクト名のマッピング」をご参照ください。エラーを無視して続行:重複テーブル名の事前チェックをスキップします。ソースおよびターゲットのスキーマが同一で、レコードが既存のターゲットレコードとプライマリキーを共有する場合:完全移行中は DTS がレコードをスキップし、増分移行中は DTS が既存レコードを上書きします。スキーマが異なる場合、特定のカラムのみが移行されるか、タスクが失敗します。慎重に使用してください。 ソースオブジェクト 1 つ以上のオブジェクトを選択します。
アイコンをクリックして、選択済みオブジェクト に移動します。選択済みオブジェクト 単一のオブジェクトの名前を変更するには、右クリックします。「単一オブジェクトの名前をマップする」をご参照ください。複数のオブジェクトを一度に名前変更するには、一括編集 をクリックします。「複数のオブジェクト名を一度にマップする」をご参照ください。 説明オブジェクトの名前を変更すると、それに依存する他のオブジェクトの移行が失敗する可能性があります。行をフィルターするには、テーブルを右クリックして WHERE 条件を指定します。「フィルター条件の指定」をご参照ください。増分移行で特定の SQL 操作を選択するには、オブジェクトを右クリックして操作を選択します。
次へ:高度な設定 をクリックし、以下の設定を構成します。データ検証設定 「データ検証タスクの構成」をご参照ください。
高度な設定
パラメーター 説明 タスクスケジューリング専用クラスター デフォルトでは、DTS はタスクを共有クラスターにスケジュールします。専用クラスターを使用するには、必要な仕様で購入してください。「DTS 専用クラスターとは? 接続失敗時の再試行時間 接続失敗後に DTS が再試行する時間です。有効範囲:10~1440 分。デフォルト値:720 分。30 分より大きい値を設定してください。この期間内に DTS が再接続できた場合、タスクは再開されます。そうでない場合、タスクは失敗します。 説明複数のタスクが同じソースまたはターゲットデータベースを共有する場合、最も最近に構成された再試行時間が優先されます。再試行中は、インスタンスに対して課金されます。
その他の問題発生時の再試行時間 DDL または DML 操作失敗後に DTS が再試行する時間です。有効範囲:1~1440 分。デフォルト値:10 分。10 分より大きい値を設定してください。 重要この値は、接続失敗時の再試行時間 より小さい必要があります。
完全なデータ移行のスロットリングを有効化 完全移行中の読み取り/書き込みリソース使用量を制限して、サーバー負荷を軽減します。ソースデータベースへのクエリ数(QPS)、完全データ移行の RPS、完全移行のデータ移行速度(MB/s) を構成します。完全なデータ移行 が選択されている場合にのみ利用可能です。 増分データ移行のスロットリングを有効化 増分移行中のリソース使用量を制限します。増分データ移行の RPS および 増分移行のデータ移行速度(MB/s) を構成します。増分データ移行 が選択されている場合にのみ利用可能です。 環境タグ DTS インスタンスを識別するための任意のタグです。 実際の書き込みコード ターゲットデータベースへのデータ書き込みに使用するエンコード形式です。 ETL の構成 抽出・変換・書き出し(ETL)機能を有効化します。はい を選択すると、コードエディタでデータ処理ステートメントを入力できます。「データ移行またはデータ同期タスクにおける ETL の構成」をご参照ください。いいえ を選択すると、ETL 構成をスキップします。「ETL とは? モニタリングとアラート タスク失敗または遅延がしきい値を超えた場合のアラートを構成します。はい を選択すると、アラートのしきい値および通知設定を構成できます。「DTS タスク作成時のモニタリングおよびアラートの構成」をご参照ください。 次へ:タスク設定の保存および事前チェック をクリックします。このタスク構成の API パラメーターを表示するには、次へ:タスク設定の保存および事前チェック の上にポインターを合わせ、OpenAPI パラメーターのプレビュー をクリックします。
DTS はタスク開始前に事前チェックを実行します。事前チェックに合格した場合にのみタスクを開始できます。事前チェックに失敗した場合は、各失敗項目の横にある 詳細の表示 をクリックし、問題をトラブルシューティングした後、再チェック をクリックしてください。無視可能な警告項目がある場合は、警告の詳細の確認 > 無視 > OK > 再チェック の順にクリックしてください。警告項目を無視すると、データの不整合が発生する可能性があります。
成功率 が 100% になるまで待機し、次へ:インスタンスの購入 をクリックします。
インスタンスの購入 ページで、インスタンスクラスを構成します。
セクション パラメーター 説明 新規インスタンスクラス リソースグループ 移行インスタンスのリソースグループです。デフォルト値:デフォルトのリソースグループ。「Resource Management とは? インスタンスクラス インスタンスクラスは移行速度を決定します。要件に応じてクラスを選択してください。「データ移行インスタンスのインスタンスクラス」をご参照ください。 Data Transmission Service(従量課金)サービス利用規約 のチェックボックスを読み、選択します。
購入および開始 をクリックします。確認ダイアログで OK をクリックします。データ移行 ページで移行の進行状況を確認できます。
次のステップ
非表示のプライマリキーの削除(該当する場合)
プライマリキー/一意キーのないテーブルに非表示のプライマリキーを追加 を はい に設定した場合、ワークロードをターゲットクラスターに切り替えた後、DTS インスタンスを終了する前に非表示のプライマリキーを削除してください。完全なデータ移行 または 増分書き込み モジュールの 基本情報 タブで、アクション 列の 非表示のプライマリキーの削除 をクリックします。
非表示のプライマリキーを削除した後、ソースおよびターゲットデータベースのデータが同一であることを確認してください。
シーケンスの初期値のリセット
ワークロードをターゲットに切り替えた後、新しく書き込まれるシーケンスはソースデータベースの最大値から連続しません。切り替え前にソースデータベースから最大シーケンス値を照会し、それらの値をターゲットの初期値として設定してください。
ソースの Oracle データベースから最大シーケンス値を照会するには、以下のコマンドを実行します。
DECLARE
CURSOR cur_data IS
SELECT SEQUENCE_NAME, LAST_NUMBER FROM user_sequences;
v_column1_value varchar(1000);
v_column2_value number(20);
BEGIN
dbms_output.enable(NULL);
OPEN cur_data;
LOOP
FETCH cur_data INTO v_column1_value, v_column2_value;
EXIT WHEN cur_data%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('select setval(''' || lower(v_column1_value) || ''', ' || v_column2_value || ');');
END LOOP;
CLOSE cur_data;
END;
/出力には、ソースデータベース内のすべてのシーケンスに対する setval ステートメントが含まれます。ターゲットデータベースで、ワークロードに関連するシーケンスのみのステートメントを実行してください。