Data Transmission Service (DTS) は、自己管理 Oracle データベースから AnalyticDB for PostgreSQL インスタンスへデータを同期します。DTS は、スキーマ同期、完全データ同期、および増分同期をサポートしています。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
エンジンバージョン 9i、10g、11g、12c、18c、または 19c の自己管理 Oracle データベースが稼働中であること
Oracle データベースでアーカイブログモードが有効化されており、アーカイブログファイルにアクセス可能かつ適切な保持期間が設定されていること。詳細については、「アーカイブされたリドゥ・ログ・ファイルの管理」をご参照ください。
Oracle データベースで補足ログが有効化されており、
SUPPLEMENTAL_LOG_DATA_PKおよびSUPPLEMENTAL_LOG_DATA_UIがYesに設定されていること。詳細については、「補足ログ」をご参照ください。AnalyticDB for PostgreSQL インスタンスが作成済みであること。詳細については、「インスタンスの作成」をご参照ください。
DTS の Oracle データ同期における機能と制限事項について理解していること。スムーズな同期を実現するために、データベース評価には Advanced Database & Application Migration (ADAM) をご活用ください。詳細については、「Oracle データベースの準備」および「概要」をご参照ください。
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期および完全データ同期 | 無料 |
| 増分同期 | 課金済み。詳細については、「課金の概要」をご参照ください。 |
データベースアカウントの権限
| データベース | 必要な権限 | 参考情報 |
|---|---|---|
| 自己管理 Oracle データベース | 詳細な権限 | データベースアカウントの準備、CREATE USER、GRANT |
| AnalyticDB for PostgreSQL インスタンス | ターゲットデータベースへの書き込み権限 | AnalyticDB for PostgreSQL インスタンスの初期アカウントには必要な権限が付与されています。詳細については、「データベースアカウントの作成」をご参照ください。RDS_SUPERUSER 権限を持つアカウントも使用可能です。詳細については、「ユーザーと権限の管理」をご参照ください。 |
Oracle データベースからの増分データ同期を行うには、アーカイブログおよび補足ログを有効化して増分データを取得する必要があります。「Oracle データベースの構成」セクション(トピック「Oracle データベースの準備」内)をご参照ください。
同期タスクの作成
ステップ 1:データ同期タスクページを開く
Data Management (DMS) コンソール にログインします。
上部のナビゲーションバーで、Data + AI をクリックします。
左側のナビゲーションウィンドウで、DTS (DTS) > データ同期 を選択します。
操作は、DMS コンソールのモードとレイアウトに基づいて異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。また、「新しい DTS コンソールのデータ同期タスクページ」にアクセスすることもできます。
ステップ 2:ソースおよびターゲットデータベースの構成
データ同期タスク の右側で、データ同期インスタンスが配置されるリージョンを選択します。
説明新しい DTS コンソールを使用する場合は、上部のナビゲーションバーでリージョンを選択します。
タスクの作成 をクリックします。[データ同期タスクの作成] ウィザードで、ソースおよびターゲットデータベースを構成します。
ソースデータベースのパラメーター
パラメーター 説明 タスク名 DTS タスクの名前です。DTS により自動的に生成されます。タスクを容易に識別できるよう、意味のある名前を指定してください。タスク名は一意である必要はありません。 データベースタイプ [Oracle] を選択します。 アクセス方法 ソースデータベースへのアクセス方法です。本例では、[ECS 上の自己管理データベース] を選択します。ソースデータベースが自己管理データベースの場合、ネットワーク環境を事前に構築する必要があります。「準備の概要」をご参照ください。 インスタンスリージョン 自己管理 Oracle データベースが配置されるリージョンです。 ECS インスタンス ID 自己管理 Oracle データベースをホストする Elastic Compute Service (ECS) インスタンスの ID です。 ポート番号 自己管理 Oracle データベースのサービスポート番号です。デフォルト値:1521。 Oracle タイプ 自己管理 Oracle データベースのアーキテクチャです。[非 RAC インスタンス] を選択して SID パラメーターを構成するか、[RAC または PDB インスタンス] を選択して サービス名 パラメーターを構成します。本例では、[非 RAC インスタンス] を選択します。 データベースアカウント 自己管理 Oracle データベースのアカウントです。必要な権限については、「データベースアカウントの権限」セクションをご参照ください。 データベースパスワード データベースアカウントのパスワードです。 ターゲットデータベースのパラメーター
パラメーター 説明 データベースタイプ [AnalyticDB for PostgreSQL] を選択します。 アクセス方法 [Alibaba Cloud インスタンス] を選択します。 インスタンスリージョン AnalyticDB for PostgreSQL インスタンスが配置されるリージョンです。 インスタンス ID AnalyticDB for PostgreSQL インスタンスの ID です。 データベース名 データ同期先の AnalyticDB for PostgreSQL インスタンス内のデータベース名です。 データベースアカウント AnalyticDB for PostgreSQL インスタンスのデータベースアカウントです。必要な権限については、「データベースアカウントの権限」セクションをご参照ください。 データベースパスワード データベースアカウントのパスワードです。 「[接続性のテストと続行]」をクリックします。ソースまたはターゲットデータベースが Alibaba Cloud インスタンスの場合、DTS は自動的に DTS サーバーの CIDR ブロックをそのインスタンスのホワイトリストに追加します。ソースまたはターゲットデータベースが ECS インスタンス上でホストされている自己管理データベースの場合、DTS は自動的に DTS サーバーの CIDR ブロックをその ECS インスタンスのセキュリティグループルールに追加します。ECS インスタンスがデータベースにアクセスできることを確認してください。データベースが複数の ECS インスタンスにデプロイされている場合、各 ECS インスタンスのセキュリティグループルールに DTS サーバーの CIDR ブロックを手動で追加します。ソースまたはターゲットデータベースがデータセンターにデプロイされた自己管理データベース、またはサードパーティのクラウド サービス プロバイダーが提供する自己管理データベースの場合、データベースのホワイトリストに DTS サーバーの CIDR ブロックを手動で追加します。詳細については、「DTS サーバーの CIDR ブロック」をご参照ください。
警告DTS サーバーの CIDR ブロックをデータベースのホワイトリストまたは ECS セキュリティグループルールに追加すると、セキュリティリスクが生じる可能性があります。DTS を使用する前に、資格情報の強化、公開ポートの制限、API 呼び出しの認証、ホワイトリストおよびセキュリティグループルールの定期的な見直し、Express Connect、VPN Gateway、または Smart Access Gateway を介したデータベースと DTS の接続など、予防措置を講じてください。
ステップ 3:同期対象および設定の構成
同期対象および高度な設定を構成します。
| パラメーター | 説明 |
|---|---|
| 同期タイプ | デフォルトでは、[増分同期] が選択されています。また、[スキーマ同期] および [完全データ同期] も選択してください。事前チェック後に、DTS は選択した対象の既存データをソースデータベースからターゲットデータベースへ同期し、その後の増分同期の基盤とします。 |
| 競合テーブルの処理モード | [事前チェックとエラー報告]:ターゲットデータベースにソースデータベースのテーブルと同じ名前のテーブルが含まれているかどうかをチェックします。同一のテーブル名が存在する場合、エラーが返され、タスクは開始できません。この問題を解決するには、オブジェクト名マッピング機能を使用してテーブル名を変更します。詳細については、「オブジェクト名をマッピングする」をご参照ください。 [エラーを無視して続行]:同一テーブル名の事前チェックをスキップします。完全データ同期中、DTS は同じプライマリキーまたは一意キーの値を持つデータレコードを同期せず、ターゲットデータベース内の既存のレコードを保持します。増分同期中、DTS は既存のレコードを上書きします。スキーマが異なる場合、データ初期化が部分的または完全に失敗する可能性があります。 |
| マージテーブル | はい: 同じスキーマを持つ複数のソーステーブルを 1 つの宛先テーブルに統合します。 DTS は、__dts_data_source 列 (TEXT 型) を、データ同期インスタンス ID:ソースデータベース名:ソーススキーマ名:ソーステーブル名 というフォーマットで宛先テーブルに追加します (例: dts********:dtstestdata:testschema:customer1)。 複数のソーステーブルを選択した後、オブジェクト名マッピング機能を使用して、それらの名前を宛先テーブル名に変更します。 詳細については、「オブジェクト名のマッピング」および「複数テーブルのマージ機能を有効にする」をご参照ください。 マージが有効になっている場合は、ソースデータベースまたはテーブルスキーマで DDL 操作を実行しないでください。 いいえ (デフォルト): 各ソーステーブルは、個別の宛先テーブルに同期されます。 |
| DDL操作とDML操作の同期 | 同期する DDL および DML 操作を選択します。「同期可能な SQL 操作」セクションをご参照ください。特定のデータベースまたはテーブルの SQL 操作を選択するには、選択済みのオブジェクト セクション内のオブジェクトを右クリックし、操作を選択します。 |
| ソースオブジェクト | ソースオブジェクト セクションからオブジェクトを選択し、矢印アイコンをクリックして 選択済みのオブジェクト セクションに追加します。テーブルのみ選択可能です。 |
| 選択済みのオブジェクト | 単一のオブジェクトの名前を変更するには、[選択したオブジェクト] セクションでそのオブジェクトを右クリックします。 詳細については、「単一オブジェクトの名前をマッピングする」をご参照ください。 複数のオブジェクトの名前を一度に変更するには、右上隅にある [一括編集] をクリックします。 詳細については、「複数のオブジェクト名を一度にマッピングする」をご参照ください。 データ同期のフィルター条件を設定するには、[選択したオブジェクト] セクションでテーブルを右クリックして条件を指定します。 詳細については、「フィルター条件の設定」をご参照ください。 オブジェクト名マッピング機能を使用してオブジェクトの名前を変更すると、依存オブジェクトが同期に失敗する可能性があります。 |
ステップ 4:高度な設定の構成
[次へ:高度な設定] をクリックして、高度な設定を構成します。
データ検証
データ検証機能の詳細については、「データ検証の設定」をご参照ください。
高度な設定
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング専用クラスター | デフォルトでは、DTS はタスクを共有クラスターにスケジュールします。安定性を向上させるには、専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
| オブジェクト名を引用符で囲む | [はい] に設定した場合、以下のいずれかの条件が満たされるときに、DTS はスキーマ同期および増分同期時にオブジェクト名をシングルクォート (') またはダブルクォート (") で囲みます:ソースデータベースが大文字小文字を区別するが、データベース名に大文字と小文字が混在している場合;ソーステーブル名が英字で始まらず、英数字、アンダースコア (_)、シャープ (#)、ドル記号 ($) 以外の文字を含む場合;スキーマ、テーブル、または列名がターゲットデータベースの予約キーワードであるか、無効な文字を含む場合。タスク完了後、クエリ実行時にオブジェクト名を引用符で囲んで指定する必要があります。 |
| 接続失敗時の再試行時間 | タスク開始後にソースまたはターゲットデータベースへの接続が失敗した場合の再試行時間範囲です。有効値:10 ~ 1440 分。デフォルト値:720 分。この値は最低でも 30 分以上に設定してください。DTS が指定された時間範囲内に再接続できた場合、タスクは再開されます。それ以外の場合は、タスクが失敗します。複数のタスクが同じソースまたはターゲットデータベースを共有する場合、最も短い再試行時間が優先されます。再試行中は、DTS インスタンスに対して課金されます。 |
| その他の障害発生時の再試行時間 | タスク開始後に DDL または DML 操作が失敗した場合の再試行時間範囲です。有効値:1 ~ 1440 分。デフォルト値:10 分。この値は最低でも 10 分以上に設定してください。また、この値は [接続失敗時の再試行時間] よりも小さくする必要があります。 |
| 完全データ移行のスロットリング有効化 | ターゲットデータベースサーバーへの負荷を軽減するために、[ソースデータベースへのクエリ数 (QPS)]、[完全データ移行の RPS]、および [完全移行のデータ移行速度 (MB/s)] を構成します。このパラメーターは、[完全データ同期] を [同期タイプ] で選択した場合にのみ表示されます。 |
| 増分同期のスロットリング有効化 | ターゲットデータベースサーバーへの負荷を軽減するために、[増分同期の RPS] および [増分同期のデータ同期速度 (MB/s)] を構成します。 |
| 環境タグ | DTS インスタンスを識別する環境タグです。ビジネス要件に応じてタグを選択してください。 |
| 実際の書き込みコード | ターゲットデータベースへのデータ書き込みに使用するエンコード形式です。 |
| ETL の構成 | [はい] に設定すると、抽出・変換・書き出し (ETL) が有効になります。コードエディタにデータ処理文を入力します。詳細については、「ETL とは」および「データ移行またはデータ同期タスクで ETL を構成する」をご参照ください。[いいえ] に設定すると、ETL 構成がスキップされます。 |
| モニタリングおよびアラート | タスクが失敗した場合や同期遅延がしきい値を超えた場合に通知を受信するには、[はい] を設定します。アラートしきい値と通知設定を設定します。詳細については、「DTS タスクを作成するときにモニタリングとアラートを設定する」をご参照ください。 |
ステップ 5:テーブルフィールドの構成
[次へ:データベースおよびテーブルフィールドの構成] をクリックします。同期先の AnalyticDB for PostgreSQL インスタンスに同期するテーブルのプライマリキー列および分布列を設定します。
ステップ 6:事前チェックの実行およびインスタンスの購入
タスク設定を保存し、事前チェックを実行します。
この DTS タスクの API パラメーターを表示するには、[次へ:タスク設定の保存および事前チェック] の上にポインターを合わせ、[OpenAPI パラメーターのプレビュー] をクリックします。
[次へ:タスク設定の保存および事前チェック] をクリックします。
説明DTS はタスク開始前に事前チェックを実行します。事前チェックが失敗した場合、各失敗項目の横にある [詳細の表示] をクリックし、問題をトラブルシューティングしてから再度事前チェックを実行してください。無視できないアラート項目がある場合は、問題をトラブルシューティングしてから再度事前チェックを実行してください。無視可能なアラート項目がある場合は、[アラート詳細の確認] をクリックし、ダイアログボックスで [無視] および [OK] をクリックした後、[再度事前チェック] をクリックしてください。アラート項目を無視すると、データ不整合が発生する可能性があります。
[成功率] が [100%] になるまで待ち、その後 [次へ:インスタンスの購入] をクリックします。
購入ページで、以下のパラメーターを構成します。
パラメーター 説明 課金方法 サブスクリプション:長期利用に向け、事前に料金を支払うことでコストを抑えることができます。従量課金:1 時間単位で課金されます。短期的な利用に適しています。不要になった場合は、インスタンスをリリースしてください。 リソースグループ設定 インスタンスが属するリソースグループです。デフォルト:デフォルトリソースグループ。詳細については、「What is Resource Management? インスタンスクラス DTS は、異なる同期速度を持つインスタンスクラスを提供しています。詳細については、「Instance classes of data synchronization instances」をご参照ください。 サブスクリプション期間 サブスクリプションの期間およびインスタンス数です。選択可能なオプション:1~9 ヶ月、1 年、2 年、3 年、または 5 年。サブスクリプション課金方法を選択した場合のみ、このパラメーターが表示されます。 [Data Transmission Service(従量課金)サービス利用規約] を読み、チェックボックスをオンにしてください。
[購入して開始] をクリックします。ダイアログボックスで [OK] をクリックします。
タスクはタスクリストに表示され、進行状況をモニターできます。
制限事項
スキーマ同期中、DTS はソースデータベースから外部キーをターゲットデータベースへ同期します。完全データ同期および増分同期中、DTS はセッションレベルで外部キーの制約チェックおよびカスケード操作を一時的に無効化します。データ同期中にソースデータベースでカスケード更新または削除操作を実行した場合、データ不整合が発生する可能性があります。
ソースデータベースの制限事項
| 制限事項 | 説明 |
|---|---|
| テーブル制約 | 同期対象のテーブルには、プライマリキーまたは一意制約が必要であり、すべてのフィールドが一意である必要があります。そうでない場合、ターゲットデータベースに重複したデータレコードが含まれる可能性があります。 |
| テーブル名の長さ | Oracle 12c 以降では、テーブル名は 30 バイトを超えてはなりません。 |
| テーブル編集制限 | 同期対象としてテーブルを選択し、ターゲットデータベースでテーブルを編集(例:テーブル名または列名の変更)する場合、単一のタスクは最大 1,000 個のテーブルをサポートします。1,000 個を超えるテーブルを同期するタスクを実行すると、リクエストエラーが発生します。1,000 個を超えるテーブルを同期するには、複数のタスクを構成してテーブルをバッチ単位で同期するか、データベース全体を同期してください。 |
| Express Connect 経由の Oracle RAC | 同期タスクの構成時に、データベースに仮想 IP アドレス (VIP) を指定します。 |
| Oracle RAC 接続 | Single Client Access Name (SCAN) IP アドレスではなく、VIP を使用します。VIP を指定した後、Oracle Real Application Clusters (RAC) データベースのノードフェールオーバーはサポートされません。 |
| リドゥおよびアーカイブログの保持期間 | リドゥログおよびアーカイブログが有効化されている必要があります。増分のみの同期の場合、リドゥログおよびアーカイブログを 24 時間以上保持します。完全および増分の同期の場合、ログを少なくとも 7 日間保持します。完全データ同期が完了した後は、保持期間を 24 時間以上に短縮できます。DTS がリドゥログおよびアーカイブログを取得できない場合、タスクが失敗したり、データ不整合やデータ損失が発生したりする可能性があります。保持期間の要件を満たさない場合、信頼性およびパフォーマンスに関する DTS のサービスレベル契約 (SLA) は無効となります。 |
| プライマリ/セカンダリスイッチオーバー | 同期中にソースデータベースでプライマリ/セカンダリスイッチオーバーが発生すると、タスクが失敗します。 |
| VARCHAR2 の空文字列 | ソースデータベースに VARCHAR2 型の空文字列が含まれており、対応するターゲットデータベースの列に非 NULL 制約が設定されている場合、タスクが失敗します。Oracle データベースでは、VARCHAR2 型の空文字列は NULL 値として扱われます。 |
| LONGTEXT フィールド | データ同期中に LONGTEXT フィールドを更新しないでください。そうしないと、タスクが失敗します。 |
| 初期同期中の DDL | スキーマ同期および完全データ同期中に、データベースまたはテーブルのスキーマを変更する DDL ステートメントを実行しないでください。そうしないと、タスクが失敗します。 |
同期およびターゲットの制限事項
| 制限事項 | 説明 |
|---|---|
| スキーマ同期の範囲 | DTS は、以下のオブジェクトタイプの初期スキーマ同期をサポートしています:テーブル、インデックス、制約、関数、シーケンス、およびビュー。 |
| スキーマの一貫性 | 警告 DTS は、初期スキーマ同期後のソースデータベースとターゲットデータベース間におけるスキーマの一貫性を保証しません。続行する前に、データの型の変換がビジネスに与える影響を評価してください。詳細については、「スキーマ同期のデータ型マッピング」をご参照ください。 |
| トリガー | トリガーは同期できません。データ不整合を防ぐため、ソースデータベースのトリガーを削除することを推奨します。詳細については、「トリガーを含むソースデータベースのデータ同期または移行タスクの設定」をご参照ください。 |
| パーティションテーブル | DTS はパーティション定義を破棄します。パーティションはターゲットデータベースで手動で定義してください。 |
| 同期可能なオブジェクト | 同期対象として選択できるのはテーブルのみです。AO(Append-Optimized)テーブルは選択できません。 |
| 列マッピング | 非完全テーブル同期で列マッピングを使用する場合、またはソースおよびターゲットテーブルのスキーマが一致しない場合、ターゲットテーブルに存在しない列のデータが失われる可能性があります。 |
| 文字列終端子 | AnalyticDB for PostgreSQL は文字列終端子 \0 をサポートしていません。同期対象のデータにこの終端子が含まれている場合、DTS はそれをターゲットデータベースに書き込まず、データ不整合が発生します。 |
| Oracle Data Pump | 増分同期中に Oracle Data Pump を使用してソースデータベースにデータを書き込まないでください。そうしないと、データ損失が発生する可能性があります。 |
| パフォーマンスへの影響 | 完全データ同期では、両方のデータベースの読み取りおよび書き込みリソースが使用されるため、サーバー負荷が増加する可能性があります。ピーク時間帯を避けて同期を実行してください。 |
| テーブル断片化 | 初期完全データ同期中、同時 INSERT 操作によりターゲットテーブルで断片化が発生します。完全データ同期後、ターゲットデータベースの表領域はソースデータベースよりも大きくなります。 |
| 同期遅延 | DTS は、ターゲットデータベースで最新に同期されたデータのタイムスタンプとソースデータベースの現在のタイムスタンプに基づいて遅延を計算します。ソースデータベースで長期間 DML 操作が実行されない場合、遅延の値が不正確になる可能性があります。遅延を更新するには、ソースデータベースで DML 操作を実行してください。データベース全体の同期では、毎秒更新されるハートビートテーブルを作成してください。 |
| ターゲットへの書き込み | データ同期中は、データ不整合を防止するために、ターゲットデータベースへの書き込みに DTS のみを使用してください。Data Management (DMS) などの他のツールを使用してオンライン DDL 操作を実行すると、データ損失が発生する可能性があります。 |
サポートされる同期トポロジー
このシナリオでは、DTS がサポートする一方向同期トポロジーは以下のとおりです。
1 対 1
1 対多
多対 1
カスケード
詳細については、「同期トポロジー」をご参照ください。
同期可能な SQL 操作
| 操作タイプ | SQL ステートメント |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | ADD COLUMN |