Data Transmission Service (DTS) を使用して、自己管理 Oracle データベースから AnalyticDB for PostgreSQL インスタンスへデータを移行します。DTS はスキーマ移行、完全なデータ移行、および増分データ移行をサポートしているため、ダウンタイムを最小限に抑えながら移行が可能です。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
バージョン 9i、10g、11g、12c、18c、または 19c の自己管理 Oracle データベースが稼働中であること
Oracle データベースが アーカイブログモード で実行されていること — DTS は LogMiner を使用してアーカイブ REDO ログファイルを読み取り、増分変更をキャプチャします。このモードが有効でない場合、増分データ移行は実行できません。
補足ログ(
SUPPLEMENTAL_LOG_DATA_PKおよびSUPPLEMENTAL_LOG_DATA_UI)が有効になっていること — これにより、LogMiner が DML 操作を正確に再構築するために十分なカラムデータをキャプチャできます。詳細については、「補足ログ」をご参照ください。送信先の AnalyticDB for PostgreSQL インスタンスが作成済みであること。 詳細については、「インスタンスの作成」をご参照ください。
課金
| 移行タイプ | タスク構成料金 | インターネットトラフィック料金 |
|---|---|---|
| スキーマ移行および完全なデータ移行 | 無料 | Alibaba Cloud からインターネット経由でデータが移行された場合にのみ課金されます。詳細については、「課金概要」をご参照ください。 |
| 増分データ移行 | 有料。「課金概要」をご参照ください。 |
移行タイプ
| 移行タイプ | 説明 |
|---|---|
| スキーマ移行 | DTS は、テーブル、インデックス、制約、関数、シーケンス、ビューなど、ソースデータベースからターゲットデータベースへスキーマを移行します。 説明 ソースとターゲットが異種データベースであるため、DTS は移行後のスキーマ整合性を保証しません。データ型変換による影響を事前に評価してください。「異種データベース間のデータ型マッピング」をご参照ください。パーティションテーブルについては、DTS がパーティション定義を破棄します — パーティションはターゲットデータベースで手動で定義してください。 |
| 完全なデータ移行 | DTS は、ソースデータベースからターゲットデータベースへすべての既存データを移行します。スキーマ移行または完全なデータ移行中に、移行対象オブジェクトに対して DDL 操作を実行しないでください。これにより、移行が失敗する可能性があります。 |
| 増分データ移行 | 完全なデータ移行が完了した後、DTS はソース Oracle データベースの REDO ログファイルを読み取り、変更内容をリアルタイムでターゲットにレプリケートします。サポートされる DML 操作:INSERT、UPDATE、DELETE。サポートされる DDL 操作:ADD COLUMN のみ。増分移行中も、アプリケーションは引き続きソースデータベース上で稼働させることができます。 |
注意事項
完全なデータ移行中は、DTS がソースおよびターゲットデータベースの読み取り・書き込みリソースを使用するため、サーバー負荷が高まる可能性があります。影響を軽減するため、非ピーク時間帯に移行を実行してください。
データ移行タスクが失敗し、DTS によって自動的に再開された場合、ワークロードをターゲットデータベースに切り替える前に、タスクを停止または解放してください。これを怠ると、タスク再開後にソースからのデータがターゲットのデータを上書きしてしまう可能性があります。
自己管理 Oracle データベースがリアルアプリケーションクラスター (RAC) アーキテクチャを使用し、Alibaba Cloud VPC 経由で DTS に接続する場合、Oracle RAC のシングルクライアントアクセスネーム (SCAN) IP アドレスおよび各ノードの仮想 IP アドレス (VIP) を VPC に接続し、DTS タスクが期待どおりに実行されるようにルートを設定する必要があります。詳細については、「VPN Gateway を使用したデータセンターから DTS への接続」をご参照ください。
DTS コンソールでソース Oracle データベースを設定する際は、Oracle RAC の SCAN IP アドレスをデータベースエンドポイントまたは IP アドレスとして指定してください。
データベースアカウントに必要な権限
| データベース | スキーマ移行 | 完全なデータ移行 | 増分データ移行 |
|---|---|---|---|
| 自己管理 Oracle データベース | スキーマ所有者権限 | スキーマ所有者権限 | データベース管理者(DBA) |
| AnalyticDB for PostgreSQL | 読み取りおよび書き込み権限 | 読み取りおよび書き込み権限 | 読み取りおよび書き込み権限 |
データベースアカウントの作成および権限付与について詳しくは、以下をご参照ください。
自己管理 Oracle データベース:「CREATE USER」および「GRANT」
AnalyticDB for PostgreSQL インスタンス:「データベースアカウントの作成」
増分データ移行が必要だが、データベースアカウントに DBA 権限を付与できない場合は、代わりに細かい粒度の権限を付与してください。以下のセクションをご参照ください。
DBA 権限が利用できない場合のログ記録の有効化および細かい粒度の権限の付与
Oracle データベースアカウントに DBA 権限を付与できない場合は、以下の手順に従ってアーカイブログ記録および補足ログ記録を有効化し、必要最小限の権限を付与してください。
ステップ 1:ログ記録の有効化
| タイプ | 文 |
|---|---|
| アーカイブログ記録 | shutdown immediate; startup mount; alter database archivelog; alter database open; archive log list; |
| 補足ログ(データベースレベル — DTS タスクの安定性を確保するため推奨) | alter database add supplemental log data; alter database add supplemental log data (primary key,unique index) columns; |
| 補足ログ(テーブルレベル — ソース側のディスク使用率を削減) | alter database add supplemental log data; 次に、各テーブルに対して以下のいずれかを実行します: alter table table_name add supplemental log data (primary key) columns; または: alter table tb_name add supplemental log data (all) columns; |
| 強制ログ記録 | alter database force logging; |
ステップ 2:細かい粒度の権限の付与
下記の表からご使用の Oracle バージョンおよびアーキテクチャを特定し、該当する SQL ブロックを実行してください。
| Oracle データベース | 移動 |
|---|---|
| バージョン 9i、10g、または 11g | Oracle バージョン 9i ~ 11g |
| バージョン 12c ~ 19c、マルチテナント(CDB/PDB)アーキテクチャ | Oracle バージョン 12c ~ 19c — マルチテナントアーキテクチャ |
| バージョン 12c ~ 19c、ノンマルチテナント(ノンCDB)アーキテクチャ | Oracle バージョン 12c ~ 19c — ノンマルチテナントアーキテクチャ |
Oracle バージョン 9i ~ 11g
-- rdsdt_dtsacct という名前のデータベースアカウントを作成し、権限を付与します。
create user rdsdt_dtsacct IDENTIFIED BY rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
grant connect to rdsdt_dtsacct;
grant resource to rdsdt_dtsacct;
grant execute on sys.dbms_logmnr to rdsdt_dtsacct;
grant select on V_$LOGMNR_LOGS to rdsdt_dtsacct;
grant select on all_objects to rdsdt_dtsacct;
grant select on all_tab_cols to rdsdt_dtsacct;
grant select on dba_registry to rdsdt_dtsacct;
grant select any table to rdsdt_dtsacct;
grant select any transaction to rdsdt_dtsacct;
-- v$log の権限
grant select on v_$log to rdsdt_dtsacct;
-- v$logfile の権限
grant select on v_$logfile to rdsdt_dtsacct;
-- v$archived_log の権限
grant select on v_$archived_log to rdsdt_dtsacct;
-- v$parameter の権限
grant select on v_$parameter to rdsdt_dtsacct;
-- v$database の権限
grant select on v_$database to rdsdt_dtsacct;
-- v$active_instances の権限
grant select on v_$active_instances to rdsdt_dtsacct;
-- v$instance の権限
grant select on v_$instance to rdsdt_dtsacct;
-- v$logmnr_contents の権限
grant select on v_$logmnr_contents to rdsdt_dtsacct;
-- システムテーブルの権限
grant select on sys.USER$ to rdsdt_dtsacct;
grant select on SYS.OBJ$ to rdsdt_dtsacct;
grant select on SYS.COL$ to rdsdt_dtsacct;
grant select on SYS.IND$ to rdsdt_dtsacct;
grant select on SYS.ICOL$ to rdsdt_dtsacct;
grant select on SYS.CDEF$ to rdsdt_dtsacct;
grant select on SYS.CCOL$ to rdsdt_dtsacct;
grant select on SYS.TABPART$ to rdsdt_dtsacct;
grant select on SYS.TABSUBPART$ to rdsdt_dtsacct;
grant select on SYS.TABCOMPART$ to rdsdt_dtsacct;
grant select_catalog_role TO rdsdt_dtsacct;Oracle バージョン 12c ~ 19c — マルチテナントアーキテクチャ
以下の SQL を 2 段階で実行します:まずプラガブル・データベース(PDB)で実行し、次にコンテナデータベース(CDB)のルートで実行します。
ステージ 1:PDB に切り替えて権限を付与
-- プラガブル・データベース(PDB)に切り替えます。
ALTER SESSION SET container = ORCLPDB1;
create user rdsdt_dtsacct IDENTIFIED BY rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
grant connect to rdsdt_dtsacct;
grant resource to rdsdt_dtsacct;
grant execute on sys.dbms_logmnr to rdsdt_dtsacct;
grant select on all_objects to rdsdt_dtsacct;
grant select on all_tab_cols to rdsdt_dtsacct;
grant select on dba_registry to rdsdt_dtsacct;
grant select any table to rdsdt_dtsacct;
grant select any transaction to rdsdt_dtsacct;
-- v$log の権限
grant select on v_$log to rdsdt_dtsacct;
-- v$logfile の権限
grant select on v_$logfile to rdsdt_dtsacct;
-- v$archived_log の権限
grant select on v_$archived_log to rdsdt_dtsacct;
-- v$parameter の権限
grant select on v_$parameter to rdsdt_dtsacct;
-- v$database の権限
grant select on v_$database to rdsdt_dtsacct;
-- v$active_instances の権限
grant select on v_$active_instances to rdsdt_dtsacct;
-- v$instance の権限
grant select on v_$instance to rdsdt_dtsacct;
-- v$logmnr_contents の権限
grant select on v_$logmnr_contents to rdsdt_dtsacct;
grant select on sys.USER$ to rdsdt_dtsacct;
grant select on SYS.OBJ$ to rdsdt_dtsacct;
grant select on SYS.COL$ to rdsdt_dtsacct;
grant select on SYS.IND$ to rdsdt_dtsacct;
grant select on SYS.ICOL$ to rdsdt_dtsacct;
grant select on SYS.CDEF$ to rdsdt_dtsacct;
grant select on SYS.CCOL$ to rdsdt_dtsacct;
grant select on SYS.TABPART$ to rdsdt_dtsacct;
grant select on SYS.TABSUBPART$ to rdsdt_dtsacct;
grant select on SYS.TABCOMPART$ to rdsdt_dtsacct;
-- V$PDBS の権限
grant select on V_$PDBS to rdsdt_dtsacct;
grant select on v$database to rdsdt_dtsacct;
grant select on dba_objects to rdsdt_dtsacct;
grant select on DBA_TAB_COMMENTS to rdsdt_dtsacct;
grant select on dba_tab_cols to rdsdt_dtsacct;
grant select_catalog_role TO rdsdt_dtsacct;ステージ 2:CDB$ROOT に切り替えて権限を付与
-- コンテナデータベース(CDB)のルートコンテナ(CDB$ROOT)に切り替えます。
ALTER SESSION SET container = CDB$ROOT;
-- CDB$ROOT でのユーザー作成を可能にするために、Oracle のデフォルトパラメーターを変更します。
alter session set "_ORACLE_SCRIPT"=true;
create user rdsdt_dtsacct IDENTIFIED BY rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
grant connect to rdsdt_dtsacct;
grant select on v_$logmnr_contents to rdsdt_dtsacct;
grant LOGMINING TO rdsdt_dtsacct;
grant EXECUTE_CATALOG_ROLE to rdsdt_dtsacct;
grant execute on sys.dbms_logmnr to rdsdt_dtsacct;Oracle バージョン 12c ~ 19c — ノンマルチテナントアーキテクチャ
-- rdsdt_dtsacct という名前のデータベースアカウントを作成し、権限を付与します。
create user rdsdt_dtsacct IDENTIFIED BY rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
grant connect to rdsdt_dtsacct;
grant resource to rdsdt_dtsacct;
grant select on V_$LOGMNR_LOGS to rdsdt_dtsacct;
grant select on all_objects to rdsdt_dtsacct;
grant select on all_tab_cols to rdsdt_dtsacct;
grant select on dba_registry to rdsdt_dtsacct;
grant select any table to rdsdt_dtsacct;
grant select any transaction to rdsdt_dtsacct;
grant select on v$database to rdsdt_dtsacct;
grant select on dba_objects to rdsdt_dtsacct;
grant select on DBA_TAB_COMMENTS to rdsdt_dtsacct;
grant select on dba_tab_cols to rdsdt_dtsacct;
-- v$log の権限
grant select on v_$log to rdsdt_dtsacct;
-- v$logfile の権限
grant select on v_$logfile to rdsdt_dtsacct;
-- v$archived_log の権限
grant select on v_$archived_log to rdsdt_dtsacct;
-- v$parameter の権限
grant select on v_$parameter to rdsdt_dtsacct;
-- v$database の権限
grant select on v_$database to rdsdt_dtsacct;
-- v$active_instances の権限
grant select on v_$active_instances to rdsdt_dtsacct;
-- v$instance の権限
grant select on v_$instance to rdsdt_dtsacct;
-- v$logmnr_contents の権限
grant select on v_$logmnr_contents to rdsdt_dtsacct;
grant select on sys.USER$ to rdsdt_dtsacct;
grant select on SYS.OBJ$ to rdsdt_dtsacct;
grant select on SYS.COL$ to rdsdt_dtsacct;
grant select on SYS.IND$ to rdsdt_dtsacct;
grant select on SYS.ICOL$ to rdsdt_dtsacct;
grant select on SYS.CDEF$ to rdsdt_dtsacct;
grant select on SYS.CCOL$ to rdsdt_dtsacct;
grant select on SYS.TABPART$ to rdsdt_dtsacct;
grant select on SYS.TABSUBPART$ to rdsdt_dtsacct;
grant select on SYS.TABCOMPART$ to rdsdt_dtsacct;
grant LOGMINING TO rdsdt_dtsacct;
grant EXECUTE_CATALOG_ROLE to rdsdt_dtsacct;
grant execute on sys.dbms_logmnr to rdsdt_dtsacct;
grant select_catalog_role TO rdsdt_dtsacct;移行タスクの作成
DTS コンソール にログインします。
Data Management (DMS) コンソールにリダイレクトされた場合は、「
」アイコンをクリックして、「
」で DTS コンソールの以前のバージョンに戻ります。左側のナビゲーションウィンドウで、データ移行 をクリックします。
移行タスク ページの上部で、宛先インスタンスが配置されているリージョンを選択します。
右上隅で、移行タスクの作成 をクリックします。
ソースおよび宛先データベースを設定します。
セクション パラメーター 説明 該当なし タスク名 DTS が自動生成するタスク名です。タスクを容易に識別できるよう、意味のある名前を指定してください。タスク名は一意である必要はありません。 ソースデータベース インスタンスタイプ ソースデータベースへのアクセス方法です。本例では、 ECS インスタンス上のユーザー作成データベース を選択しています。 重要他のインスタンスタイプを選択する場合は、まず自己管理データベースに必要な環境をセットアップしてください。「事前準備の概要」をご参照ください。
インスタンスリージョン ソース Oracle データベースをホストする Elastic Compute Service(ECS)インスタンスが配置されているリージョンです。 ECS インスタンス ID ソース Oracle データベースをホストする ECS インスタンスの ID です。 データベースタイプ ソースデータベースのタイプです。Oracle を選択します。 ポート番号 ソース Oracle データベースのサービスポートです。デフォルト値:1521。 インスタンスタイプ ソース Oracle データベースのアーキテクチャです。ノンRAC インスタンス を選択して SID パラメーターを指定するか、RAC または PDB インスタンス を選択して サービス名 パラメーターを指定します。本例では ノンRAC インスタンス を使用します。 SID ソース Oracle データベースのシステム ID(SID)です。 データベースアカウント ソース Oracle データベースのアカウントです。必要な権限については、「データベースアカウントに必要な権限」をご参照ください。 データベースパスワード データベースアカウントのパスワード。ソースデータベースの詳細を入力した後、[データベースパスワード] の横にある [接続テスト] をクリックして接続を確認します。[成功] が表示された場合、認証情報は有効です。[失敗] が表示された場合は、[確認] をクリックして詳細を確認し、修正してください。 宛先データベース インスタンスタイプ 宛先データベースのタイプです。AnalyticDB for PostgreSQL を選択します。 インスタンスリージョン 宛先 AnalyticDB for PostgreSQL インスタンスが配置されているリージョンです。 インスタンス ID 宛先 AnalyticDB for PostgreSQL インスタンスの ID です。 データベース名 宛先データベースの名前です。 データベースアカウント 宛先 AnalyticDB for PostgreSQL インスタンスのアカウントです。必要な権限については、「データベースアカウントに必要な権限」をご参照ください。 データベースパスワード データベースアカウントのパスワードです。 
右下隅で、ホワイトリストの設定と次へ をクリックします。
警告DTS サーバーの CIDR ブロックをデータベースのホワイトリストまたは ECS のセキュリティグループルールに追加すると、セキュリティリスクが発生します。進める前に、強力な認証情報を強制する、公開ポートを制限する、API 呼び出しを認証する、ホワイトリストルールを定期的に監査するなどの予防措置を講じてください。また、データベースと DTS の接続には、Express Connect、VPN ゲートウェイ、または Smart Access Gateway を優先的に使用することを推奨します。
移行タイプ、操作タイプ、および移行対象オブジェクトを選択します。
設定項目 説明 移行タイプ スキーマ移行および完全なデータ移行のみを実行する場合は、スキーマ移行 および 完全なデータ移行 を選択します。移行中もアプリケーションを継続して実行する場合は、増分データ移行 も選択してください。 説明増分データ移行 を選択しない場合、データ整合性を保つため、完全なデータ移行中にソースデータベースへの書き込みを避けてください。
操作タイプ 増分データ移行中に移行する操作のタイプを選択します。すべての操作タイプがデフォルトで選択されています。 移行対象オブジェクト 利用可能 セクションからオブジェクトを選択し、
アイコンをクリックして 選択済み セクションに移動します。カラム、テーブル、またはスキーマを選択できます。オブジェクト名はデフォルトで宛先にそのまま保持されます。宛先でオブジェクト名を変更する場合は、オブジェクト名マッピング機能を使用してください。「オブジェクト名マッピング」をご参照ください。説明オブジェクト名を変更すると、依存オブジェクトの移行が失敗する可能性があります。
オブジェクト名マッピング この機能を使用して、宛先インスタンス内のオブジェクト名を変更できます。「オブジェクト名マッピング」をご参照ください。 再試行時間範囲 DTS がソースまたは宛先データベースに接続できない場合、デフォルトで最大 12 時間再試行します。必要に応じてこの範囲を調整してください。再試行期間内に再接続されれば DTS が移行タスクを再開しますが、それ以外の場合はタスクが失敗します。 説明再試行期間中は DTS インスタンスに対して課金されます。ソースおよび宛先インスタンスを解放した後は、速やかに DTS インスタンスも解放してください。
オブジェクト名を引用符で囲む このオプションを選択し、以下のいずれかの条件が満たされる場合、DTS はスキーマ移行および増分データ移行時にオブジェクト名をシングルクォート(')またはダブルクォート(")で囲みます:ソースのビジネス環境が大文字小文字を区別し、データベース名に大文字と小文字が混在している場合;ソーステーブル名が英字で始まらない、または英字・数字・アンダースコア(_)・シャープ記号(#)・ドル記号($)以外の文字を含む場合;スキーマ、テーブル、またはカラム名が宛先データベースにおいてキーワード、予約キーワード、または無効な文字である場合。 
AnalyticDB for PostgreSQL へ移行するテーブルのプライマリキー列および分散キーを指定します。
プライマリキー列と分散キーの詳細については、「制約の定義」および「テーブル分散の定義」をご参照ください。 DTS がプライマリキーのないテーブルを検出した場合、[プライマリキーがないすべてのテーブルのプライマリキーと分散キーを ROWID に設定] オプションが表示されます。 これを選択すると、それらの送信先テーブルに ROWID がプライマリキーおよび分散キーとして追加されます。

右下隅で、事前チェック をクリックします。
DTS は移行タスクを開始する前に事前チェックを実行します。事前チェックに合格した場合にのみタスクを開始できます。いずれかの項目が不合格の場合、
アイコンをクリックして詳細を確認し、原因に基づいて問題を修正してから再度事前チェックを実行してください。重大でない場合は、不合格項目を無視して再チェックを実行することもできます。タスクが事前チェックに合格した後、次へ をクリックします。
設定の確認 ダイアログボックスで、チャネル仕様 パラメーターを設定し、Data Transmission Service(従量課金)サービス規約 を選択します。
購入および開始 をクリックして、移行タスクを開始します。
移行の停止および切り替え
移行の停止方法は、選択した移行タイプによって異なります。
スキーマ移行および完全なデータ移行のみ
タスクを手動で停止しないでください。タスクが自動的に停止するまでお待ちください。早期に停止すると、宛先データベースに不完全なデータが残る可能性があります。
スキーマ移行、完全なデータ移行、および増分データ移行
増分移行タスクは自動的に停止しません。データが完全に同期された時点で、手動でタスクを停止してください。
非ピーク時間帯、またはアプリケーショントラフィックを宛先インスタンスに切り替える直前にタスクを停止してください。
切り替え手順は以下のとおりです。
進行状況バーが 増分データ移行 を表示し、ステータスが 移行タスクに遅延がありません になるまで待ちます。
数分間、ソースデータベースへの書き込みを停止します。増分移行の遅延が一時的に増加する場合があります。
ステータスが 移行タスクに遅延がありません に戻るまで待ちます。
手動で移行タスクを停止します。

アプリケーショントラフィックを宛先 AnalyticDB for PostgreSQL インスタンスに切り替えます。
次のステップ
テーブルのディストリビューションを定義する — 宛先インスタンスで分散キーを設定することで、クエリのパフォーマンスを最適化します。
データベースアカウントの作成 — ターゲットデータベースへのアクセスを管理する
課金概要 — 増分移行タスクの DTS 課金について理解する