このトピックでは、data Transmission Service (DTS) を使用して、自己管理型OracleデータベースからAnalyticDB for PostgreSQLインスタンスにデータを移行する方法について説明します。
前提条件
自己管理型Oracleデータベースのエンジンバージョンは、9i、10g、11g、12c、18c、または19cです。
自己管理型OracleデータベースはARCHIVELOGモードで実行されています。 アーカイブされたログファイルにはアクセス可能であり、アーカイブされたログファイルには適切な保存期間が設定されます。 詳細については、『 アーカイブ REDO ログファイルの管理』をご参照ください。
SUPPLEMENTAL_LOG_DATA_PKおよびSUPPLEMENTAL_LOG_DATA_UIを含む補足ログは、自己管理型Oracleデータベースに対して有効になっています。 詳細については、『サプリメンタルロギング』をご参照ください。
移行先のAnalyticDB for PostgreSQLインスタンスが作成されました。 詳細については、次をご参照ください: インスタンスの作成
課金ルール
移行タイプ | タスク設定料金 | インターネットトラフィック料金 |
スキーマ移行とフルデータ移行 | 無料です。 | インターネット経由でAlibaba Cloudからデータが移行された場合にのみ課金されます。 詳細については、「課金の概要」をご参照ください。 |
増分データ移行 | 有料。 詳細については、「課金の概要」をご参照ください。 |
使用上の注意
完全データ移行中、DTSはソースデータベースとターゲットデータベースの読み取りおよび書き込みリソースを使用します。 これは、データベースサーバの負荷を増加させる可能性がある。 データを移行する前に、移行元データベースと移行先データベースのパフォーマンスに対するデータ移行の影響を評価します。 オフピーク時にデータを移行することを推奨します。
データ移行タスクが失敗して停止すると、DTSは自動的にタスクを再開します。 ワークロードをターゲットデータベースに切り替える前に、データ移行タスクを停止またはリリースしてください。 それ以外の場合、タスクの再開後に、ソースデータベースのデータがターゲットデータベースのデータを上書きします。
自己管理型OracleデータベースがReal Application Cluster (RAC) アーキテクチャでデプロイされ、Alibaba Cloud仮想プライベートクラウド (VPC) を介してDTSに接続されている場合、Oracle RACのSingle Client Access Name (SCAN) IPアドレスと各ノードの仮想IPアドレス (VIP) をVPCに接続し、ルートを設定する必要があります。 この設定により、DTSタスクが期待どおりに実行できるようになります。 詳細については、「VPN Gatewayを使用したデータセンターのDTSへの接続」をご参照ください。
重要DTSコンソールでソースOracleデータベースを構成する場合、Oracle RACのSCAN IPアドレスをデータベースエンドポイントまたはIPアドレスとして指定できます。
移行タイプ
移行タイプ | 説明 |
スキーマの移行 | DTSは、オブジェクトのスキーマをソースデータベースからターゲットデータベースに移行します。 DTSは、テーブル、インデックス、制約、関数、シーケンス、およびビューのタイプのオブジェクトのスキーマ移行をサポートしています。 警告
|
フルデータ移行 | DTSは、オブジェクトの履歴データをソースデータベースからターゲットデータベースに移行します。 説明 スキーマ移行中およびフルデータ移行中は、移行するオブジェクトに対してDDL操作を実行しないでください。 そうしないと、オブジェクトの移行に失敗する可能性があります。 |
増分データ移行 | 完全なデータ移行が完了すると、DTSはソースOracleデータベースからredoログファイルを取得します。 次に、DTSは、増分データをソースOracleデータベースからターゲットデータベースにリアルタイムで移行します。 DTSは、増分データ移行中に次のSQL操作を移行できます。
増分データ移行は、データ移行中の自己管理型アプリケーションのサービス継続性を保証します。 |
データベースアカウントに必要な権限
データベース | スキーマ移行 | 完全なデータ移行 | 増分データ移行 |
自己管理型Oracleデータベース | スキーマ所有者の権限 | スキーマ所有者の権限 | データベース管理者 (DBA) |
AnalyticDB for PostgreSQL | ターゲットデータベースの読み取りおよび書き込み権限 | ターゲットデータベースの読み取りおよび書き込み権限 | ターゲットデータベースの読み取りおよび書き込み権限 |
データベースアカウントを作成し、データベースアカウントに権限を付与する方法の詳細については、以下のトピックを参照してください。
自己管理型Oracleデータベース: CREATE USERおよびGRANT
AnalyticDB for PostgreSQLインスタンス: データベースアカウントの作成
Oracleデータベースから増分データを移行する必要があるが、データベースアカウントにDBA権限を付与できない場合は、そのアカウントにきめ細かい権限を付与できます。 次のセクションでは、Oracleデータベースアカウントに特定の権限を付与する方法について説明します。
ログ記録を有効にし、Oracleデータベース・アカウントにきめ細かい権限を付与
Oracleデータベースから増分データを移行する必要があるが、データベース・アカウントにDBA権限を付与できない場合は、アーカイブ・ロギングと補足ロギングを有効にし、アカウントにきめ細かい権限を付与できます。
アーカイブロギングと補足ロギングを有効にします。
データ型
手順
アーカイブロギング
次のステートメントを実行して、アーカイブログを有効にします。
shutdown immediate; startup mount; alter database archivelog; alter database open; archive log list;
補足ロギング
ビジネス要件に基づいて、データベースまたはテーブルレベルで補足ログを有効にします。
説明データベースレベルの補足ログを有効にして、Data Transmission Service (DTS) タスクの安定性を確保できます。 テーブルレベルの補足ロギングを有効にして、ソースOracleデータベースのディスク使用量を減らすことができます。
データベースレベルの補足ロギングの有効化
次のステートメントを実行して、最小限の補足ロギングを有効にします。
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;
Oracleデータベース・アカウントにきめ細かい権限を付与します。
Oracleバージョン9iから11g
# Create a database account named rdsdt_dtsacct and grant permissions to the account. 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 privileges grant select on v_$log to rdsdt_dtsacct; -- v$logfile privileges grant select on v_$logfile to rdsdt_dtsacct; -- v$archived_log privileges grant select on v_$archived_log to rdsdt_dtsacct; -- v$parameter privileges grant select on v_$parameter to rdsdt_dtsacct; -- v$database privileges grant select on v_$database to rdsdt_dtsacct; -- v$active_instances privileges grant select on v_$active_instances to rdsdt_dtsacct; -- v$instance privileges grant select on v_$instance to rdsdt_dtsacct; -- v$logmnr_contents privileges grant select on v_$logmnr_contents to rdsdt_dtsacct; -- system tables 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
# Switch to the pluggable database (PDB). Create a database account named rdsdt_dtsacct and grant permissions to the account. 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 privileges grant select on v_$log to rdsdt_dtsacct; -- v$logfile privileges grant select on v_$logfile to rdsdt_dtsacct; -- v$archived_log privileges grant select on v_$archived_log to rdsdt_dtsacct; -- v$parameter privileges grant select on v_$parameter to rdsdt_dtsacct; -- v$database privileges grant select on v_$database to rdsdt_dtsacct; -- v$active_instances privileges grant select on v_$active_instances to rdsdt_dtsacct; -- v$instance privileges grant select on v_$instance to rdsdt_dtsacct; -- v$logmnr_contents privileges 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 privileges 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; # Switch to the CDB$ROOT, which is the root container of the container database (CDB). Create a database account and grant permissions to the account. ALTER SESSION SET container = CDB$ROOT; # Create a database account named rdsdt_dtsacct and grant permissions to the account. You must modify the default parameters of the Oracle database. 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
# Create a database account named rdsdt_dtsacct and grant permissions to the account. 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 privileges grant select on v_$log to rdsdt_dtsacct; -- v$logfile privileges grant select on v_$logfile to rdsdt_dtsacct; -- v$archived_log privileges grant select on v_$archived_log to rdsdt_dtsacct; -- v$parameter privileges grant select on v_$parameter to rdsdt_dtsacct; -- v$database privileges grant select on v_$database to rdsdt_dtsacct; -- v$active_instances privileges grant select on v_$active_instances to rdsdt_dtsacct; -- v$instance privileges grant select on v_$instance to rdsdt_dtsacct; -- v$logmnr_contents privileges 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;
手順
- 説明
データ管理 (DMS) コンソールにリダイレクトされている場合は、にあるアイコンをクリックして、以前のバージョンのDTSコンソールに移動し。
左側のナビゲーションウィンドウで、[データ移行] をクリックします。
上部の移行タスクページで、ターゲットインスタンスが存在するリージョンを選択します。
ページの右上隅にある [移行タスクの作成] をクリックします。
ソースデータベースとターゲットデータベースを設定します。
セクション
パラメーター
説明
非該当
タスク名
DTSが自動的に生成するタスク名。 わかりやすい名前を指定することをお勧めします。 一意のタスク名を指定する必要はありません。
移行元データベース
インスタンスタイプ
ソースデータベースのアクセス方法。 この例では、ECSインスタンスのユーザー作成データベースが選択されています。
説明別のインスタンスタイプを選択した場合は、自己管理データベースに必要な環境を設定する必要があります。 詳細については、「準備の概要」をご参照ください。
インスタンスリージョン
Elastic Compute Service (ECS) インスタンスが存在するリージョン。 自己管理型Oracleデータベースは、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セキュリティグループルールに自動的または手動で追加されると、セキュリティリスクが発生する可能性があります。 したがって、DTSを使用してデータを移行する前に、潜在的なリスクを理解して認識し、次の対策を含む予防策を講じる必要があります。VPNゲートウェイ、またはSmart Access Gateway。
移行タイプ、操作タイプ、および移行するオブジェクトを選択します。
設定
説明
移行タイプの選択
フルデータ移行のみを実行するには、[スキーマ移行] と [フルデータ移行] を選択します。
データ移行中のサービスの継続性を確保するには、[スキーマ移行] 、[フルデータ移行] 、および [増分データ移行] を選択します。
説明増分データ移行が選択されていない場合、完全データ移行中にソースデータベースにデータを書き込まないことを推奨します。 これにより、ソースデータベースとターゲットデータベース間のデータの整合性が確保されます。
操作タイプの選択
増分データ移行時に移行する操作の種類を選択します。 デフォルトでは、すべての操作タイプが選択されています。
移行するオブジェクトの選択
[使用可能] セクションから1つ以上のオブジェクトを選択し、アイコンをクリックして、オブジェクトを [選択済み] セクションに追加します。
説明移行するオブジェクトとして、列、テーブル、またはスキーマを選択できます。
既定では、オブジェクトがターゲットデータベースに移行された後、オブジェクトの名前は変更されません。 オブジェクト名マッピング機能を使用して、移行先データベースに移行するオブジェクトの名前を変更できます。 詳細は、オブジェクト名のマッピングをご参照ください。
オブジェクト名マッピング機能を使用してオブジェクトの名前を変更すると、そのオブジェクトに依存する他のオブジェクトの移行に失敗する可能性があります。
オブジェクトの名前を変更するかどうかを指定する
オブジェクト名マッピング機能を使用して、移行先インスタンスに移行されるオブジェクトの名前を変更できます。 詳細は、オブジェクト名のマッピングをご参照ください。
ソースデータベースまたはターゲットデータベースへの接続が失敗した場合のリトライ時間範囲の指定
デフォルトでは、DTSがソースデータベースまたはターゲットデータベースへの接続に失敗した場合、DTSは次の12時間以内に再試行します。 業務要件に基づいて再試行時間範囲を指定できます。 指定された時間範囲内にDTSがソースデータベースとターゲットデータベースに再接続された場合、DTSはデータ移行タスクを再開します。 それ以外の場合、データ移行タスクは失敗します。
説明DTSがソースデータベースとターゲットデータベースへの再接続を試行する再試行時間内に、DTSインスタンスの料金が請求されます。 業務要件に基づいて再試行時間範囲を指定することを推奨します。 ソースインスタンスとターゲットインスタンスがリリースされた後、できるだけ早くDTSインスタンスをリリースすることもできます。
オブジェクト名を引用符で囲む
オブジェクト名を引用符で囲むかどうかを指定します。 [はい] を選択し、次の条件が満たされている場合、DTSは、スキーマ移行および増分データ移行中に、オブジェクト名を一重引用符 (') または二重引用符 (") で囲みます。
ソースデータベースのビジネス環境は大文字と小文字が区別され、データベース名には大文字と小文字が含まれます。
ソーステーブル名は、文字で始まるのではなく、文字、数字、および特殊文字以外の文字が含まれます。
説明ソーステーブル名には、アンダースコア (_) 、数字記号 (#) 、およびドル記号 ($) の特殊文字のみを含めることができます。
同期するスキーマ、テーブル、または列の名前は、ターゲットデータベースのキーワード、予約済みキーワード、または無効な文字です。
に移行するテーブルの主キー列と配布キーを指定します。AnalyticDB for PostgreSQLインスタンスを作成します。
説明主キー列と配布キーの詳細については、 制約の定義と テーブルの配布を定義します。
DTSがプライマリキーなしのテーブルを識別した場合、プライマリキーなしのすべてのテーブルのプライマリキーと配布キーをROWIDに設定オプションが前のページに表示されます。 このオプションを選択した場合、DTSはROWIDフィールドをプライマリキーおよび配布キーとして宛先テーブルに追加します。
ページの右下隅にある [事前チェック] をクリックします。
説明データ移行タスクを開始する前に、DTSは事前チェックを実行します。 データ移行タスクは、タスクが事前チェックに合格した後にのみ開始できます。
タスクが事前チェックに合格しなかった場合は、失敗した各項目の横にあるアイコンをクリックして詳細を表示できます。
原因に基づいて問題をトラブルシューティングし、事前チェックを再度実行できます。
問題をトラブルシューティングする必要がない場合は、失敗した項目を無視して、再度事前チェックを実行できます。
タスクが事前チェックに合格したら、[次へ] をクリックします。
[設定の確認] ダイアログボックスで、[チャネル仕様] パラメーターを指定し、[データ送信サービス (従量課金) サービス規約] を選択します。
[購入と開始] をクリックして、データ移行タスクを開始します。
スキーマ移行とフルデータ移行
フルデータ移行中は、手動でタスクを停止しないことをお勧めします。 そうしないと、ターゲットデータベースに移行されたデータが不完全になる可能性があります。 データ移行タスクが自動的に停止するまで待つことができます。
スキーマ移行、完全データ移行、および増分データ移行
増分データ移行タスクは自動的に停止しません。 タスクを手動で停止する必要があります。
重要データ移行タスクを手動で停止する適切な時期を選択することを推奨します。 たとえば、オフピーク時やワークロードを移行先クラスターに切り替える前にタスクを停止できます。
増分データ移行と移行タスクが遅延しませんが移行タスクのプログレスバーに表示されるまで待ちます。 その後、ソースデータベースへのデータの書き込みを数分間停止します。 増分データ移行のレイテンシは、プログレスバーに表示され得る。
増分データ移行のステータスが [移行タスクは遅延なし] に変わるまで待ちます。 次に、移行タスクを手動で停止します。