【OCIクラウド移行ガイド】とは
オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニアによる、OCI移行手順をまとめたシリーズ記事です。 各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。 まとめ記事は以下になります。
今回移行するサービス:Amazon RDS for Oracle
今回、移行対象とするのはAmazon RDS for Oracleです。 Oracle Databaseの一般的な移行方式であるDataPumpを使用して移行します。DataPumpは汎用的で馴染みのある方法ですが、移行時にダウンタイムを要しますので、GoldenGateなど他の移行方式を検討する必要があります。その他の移行方式については、以下のページにまとめがあります。
このRDS for Oracle から Autonomous Database(ADB)への移行検証をします。
Oracle DatabaseからAutonomous Databaseに移行する際に利用できる事前チェックツール「Cloud Premigration Advisor Tool(CPAT)」を使った事前検証と、Data Pumpを使ったデータの移行を検証します。
本記事は以下の情報を参考にしています。
はじめに
移行検証のイメージと流れ
RDSにサンプルスキーマ(HRスキーマ)をロードし、サンプルスキーマのデータを移行します。
RDSに対しCPATを使った事前チェックを実施したのち、ロードしたデータについてData Pumpを使った移行を行います。
データ移行時にはData Pumpで提供されるモジュールを使い、ダンプファイルをS3バケットにエクスポートします。
Autonomous Databaseでは、あらかじめ提供されるDBMS_CLOUDモジュールを使いS3への接続を構成することが可能です。Data Pumpで提供されるモジュールを使い、S3上のダンプファイルをADBにインポートします。
以下の手順で実施します。
- 事前準備
1-1. EC2を踏み台にしたRDSへの接続の構成
1-2. RDSにサンプルスキーマをロードする - CPATを使用して事前検証をする
2-1. CPATとは?
2-2. CPATの実行に必要な環境を構築する
2-3. 実行と結果確認 - Data Pumpを使用してデータを移行する
3-1. データをダンプファイルにエクスポート
3-2. ダンプファイルをアップロードするためのAmazon S3バケットを作成する
3-3. Amazon S3バケットからOracle Autonomous Databaseにダンプファイルをインポートする
前提
以下のリソースはあらかじめ作成済みのものとします。
- OCI関連リソース
リソースカテゴリ(用途) | サービス名 | 詳細設定 | 参考資料 |
---|---|---|---|
データベース (移行先DB) |
Oracle Autonomous Database | 以下の設定で作成 ● ワークロードタイプ:トランザクション処理 ● デプロイメントタイプ:共有インフラストラクチャ ● DBのバージョン:19c ● ネットワーク・アクセスの選択:すべての場所からのセキュアアクセスを許可 |
【OCIチュートリアル】101: ADBインスタンスを作成してみよう |
ネットワーク | VCN/セキュリティリスト/ルート表/ゲートウェイ等 | ADBに接続するための踏み台インスタンスのためのネットワークを構成 | 【OCIチュートリアル】その2 - クラウドに仮想ネットワーク(VCN)を作る |
踏み台インスタンス (ADBへの接続・DataPump実行用インスタンス) |
OCI Compute | Oracle Cloud Developer Imageで立てると、OracleDBへの接続に必要なコンポーネントがあらかじめインストールされた状態で利用可能です。 | 【OCIチュートリアル】204: 開発者向け仮想マシンのセットアップ方法 |
- AWS関連リソース
リソースカテゴリ(用途) | サービス名 | 詳細設定 |
---|---|---|
ネットワーク | VPC/サブネット/ルートテーブル/ネットワーク接続 | 以下の設定で作成 ● VPCにはインターネットゲートウェイをアタッチし、インターネット経由での接続を許可 ● EC2およびRDSは別サブネットに構成し、EC2-RDS間の通信を許可するルールを追加 |
踏み台インスタンス (RDSへの接続用インスタンス) |
EC2 | 以下の設定で作成 ● AMI名:al2023-ami-2023.6.20241121.0-kernel-6.1-x86_64 ● OS:Amazon Linux 2023 ● アーキテクチャ:x86_64 |
データベース(移行元DB) | RDS for Oracle | 以下の設定で作成 ● クラス:db.m5.large ● エンジン:Oracle Standard Edition Two ● エンジンバージョン:19.0.0.0.ru-2024-10.rur-2024-10.r1 ● EC2からRDSにアクセスできるようなネットワーク接続設定を構成 |
クラウドストレージ (ダンプファイル出力先) |
Amazon S3 | 以下の設定で作成 ● 層:Standard Bucket |
- アーキテクチャイメージ
1. 事前準備
1-1. EC2を踏み台にしたRDSへの接続の構成
EC2に必要な設定をいれます。
- Oracle Instant Clientをダウンロードします。
Oracle Instant Client提供ページより必要なクライアントパッケージをダウンロードします。今回はBasic・SQLPlus・Tools(DataPumpを使用するため)をそれぞれRPM形式でダウンロード。
$ wget https://download.oracle.com/otn_software/linux/instantclient/oracle-instantclient-basic-linuxx64.rpm
$ wget https://download.oracle.com/otn_software/linux/instantclient/oracle-instantclient-sqlplus-linuxx64.rpm
$ wget https://download.oracle.com/otn_software/linux/instantclient/oracle-instantclient-tools-linuxx64.rpm
以下3つのファイルがダウンロードできました。
[ec2-user@ip-172-31-1-222 ~]$ ls
oracle-instantclient-basic-linuxx64.rpm oracle-instantclient-sqlplus-linuxx64.rpm oracle-instantclient-tools-linuxx64.rpm
- RPMパッケージをyumでインストールします。
$ sudo yum install -y oracle-instantclient-basic-linuxx64.rpm
$ sudo yum install -y oracle-instantclient-sqlplus-linuxx64.rpm
$ sudo yum install -y oracle-instantclient-tools-linuxx64.rpm
- sqlplusのパスが通るように、環境変数を設定します。
Linux上のユーザーフォルダ直下にあるbash_profile
に以下の設定をいれます。
$ vi ~/.bash_profile
export ORACLE_HOME=/usr/lib/oracle/23/client64
export PATH=${ORACLE_HOME}:${PATH}
export LD_LIBRARY_PATH=${ORACLE_HOME}
- 環境変数を反映します。
$ source ~/.bash_profile
- sqlplusが起動できました。
[ec2-user@ip-172-31-1-222 client64]$ sqlplus
SQL*Plus: Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems on Thu Nov 28 13:22:25 2024
Version 23.6.0.24.10
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Enter user-name:
- sqlplusでDBに接続します。
- HOST:DBエンドポイント名を入力。RDSコンソールより[接続とセキュリティ]>[エンドポイントとポート]のエンドポイントから確認可能です。
- PORT:デフォルトで1521です。
- SID:ご自身で指定したDB 識別子を入力。
参考:【AWSマニュアル】SQL *Plus を使用した DB インスタンスへの接続
$ sqlplus '<マスターユーザ名>@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<DBエンドポイント名>)(PORT=1521))(CONNECT_DATA=(SID=<DB名>)))'
- パスワードを入力し、adminユーザとして接続できました。
[ec2-user@ip-172-31-1-222 client64]$ sqlplus 'admin@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxxx.xxxxxxxx.ap-northeast-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=xxxxx)))'
SQL*Plus: Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems on Thu Nov 28 13:24:02 2024
Version 23.6.0.24.10
Copyright (c) 1982, 2024, Oracle. All rights reserved.
Enter password:
Last Successful login time: Wed Nov 27 2024 02:44:23 +00:00
Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.25.0.0.0
SQL>
1-2. RDSにサンプルスキーマをロードする
移行対象のデータとして、HRスキーマをロードします。
詳細は2 サンプル・スキーマのインストールをご参照ください。
今回はGitHub Webサイトからダウンロードしてきたものをインストールします。
- サンプルスキーマのインストールスクリプトをEC2のローカルにダウンロードします。
$ wget https://github.com/oracle-samples/db-sample-schemas/archive/refs/tags/v23.3.zip
unzip v23.3.zip
-
db-sample-schemas-23.3
に展開されました。
[ec2-user@ip-172-31-1-222 ~]$ ls
db-sample-schemas-23.3
oracle-instantclient-basic-linuxx64.rpm
oracle-instantclient-sqlplus-linuxx64.rpm
oracle-instantclient-tools-linuxx64.rpm
oradiag_ec2-user
v23.3.zip
[ec2-user@ip-172-31-1-222 ~]$
-
hr_install.sql
を実行し、HRスキーマをインストールします。HRスキーマに任意のパスワードを設定し、表領域はデフォルトのUSERS
に設定します。
SQL> @/home/ec2-user/db-sample-schemas-23.3/human_resources/hr_install.sql
Thank you for installing the Oracle Human Resources Sample Schema.
This installation script will automatically exit your database session
at the end of the installation or if any error is encountered.
The entire installation will be logged into the 'hr_install.log' log file.
Enter a password for the user HR:
Enter a tablespace for HR [USERS]:
Do you want to overwrite the schema, if it already exists? [YES|no]:
Old HR schema has been dropped.
・
・
・
Installation
-------------
Verification:
Table provided actual
----------- ---------- ----------
regions 5 5
countries 25 25
departments 27 27
locations 23 23
employees 107 107
jobs 19 19
job_history 10 10
Thank you!
--------------------------------------------------------
The installation of the sample schema is now finished.
Please check the installation verification output above.
You will now be disconnected from the database.
Thank you for using Oracle Database!
Disconnected from Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.25.0.0.0
- 作成したHRスキーマに接続します。
$ sqlplus 'hr@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=database-1.xxxxxxxx.ap-northeast-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=xxxxx)))'
- 作成されたオブジェクトを確認します。
SQL> set lines 120
SQL> set pages 9999
SQL> col object_name for a30
SQL> select object_type, object_name from user_objects order by 1,2 ;
OBJECT_TYPE OBJECT_NAME
----------------------- ------------------------------
INDEX COUNTRY_C_ID_PK
INDEX DEPT_ID_PK
INDEX DEPT_LOCATION_IX
INDEX EMP_DEPARTMENT_IX
INDEX EMP_EMAIL_UK
INDEX EMP_EMP_ID_PK
INDEX EMP_JOB_IX
INDEX EMP_MANAGER_IX
INDEX EMP_NAME_IX
INDEX JHIST_DEPARTMENT_IX
INDEX JHIST_EMPLOYEE_IX
INDEX JHIST_EMP_ID_ST_DATE_PK
INDEX JHIST_JOB_IX
INDEX JOB_ID_PK
INDEX LOC_CITY_IX
INDEX LOC_COUNTRY_IX
INDEX LOC_ID_PK
INDEX LOC_STATE_PROVINCE_IX
INDEX REG_ID_PK
PROCEDURE ADD_JOB_HISTORY
PROCEDURE SECURE_DML
SEQUENCE DEPARTMENTS_SEQ
SEQUENCE EMPLOYEES_SEQ
SEQUENCE LOCATIONS_SEQ
TABLE COUNTRIES
TABLE DEPARTMENTS
TABLE EMPLOYEES
TABLE JOBS
TABLE JOB_HISTORY
TABLE LOCATIONS
TABLE REGIONS
TRIGGER SECURE_EMPLOYEES
TRIGGER UPDATE_JOB_HISTORY
VIEW EMP_DETAILS_VIEW
34 rows selected.
SQL>
サンプルスキーマをロードできました。
2. CPATを使用して事前検証をする
2-1. CPATとは?
Autonomous Databaseでは一部のデータベースオブジェクトの作成が制限されています。
移行元のOracle Databaseに制限対象のオブジェクトが含まれていないかをチェックするツールとしてCloud Premigration Advisor Tool(CPAT)が提供されています。
こちらを使ってソース・データベースとデータベース・ターゲットの互換性を分析していきます。
本章は以下の情報を参考に記載しています。
- 【ADBチュートリアル】Cloud Premigraiton Advisor Tool (CPAT) とは?
- 【Oracle技術ブログ】Oracle Product ManagerによるCPAT検証シリーズ
2-2. CPATの実行に必要な環境を構築する
CPATはJavaベースのツールとなるため、Java実行環境(JRE)が必要です。
- RPMベースのLinux x64版Javaのインストール方法よりJREのパッケージをダウンロードし、インストールします。
$ sudo rpm -ivh jre-8u431-linux-x64.rpm
- 利用するJREのための環境変数を設定します。
JAVA_HOME
でJREを指定することで実行可能です。
bash_profile
に以下の設定を入れます。
export JAVA_HOME=/usr/java/jre1.8.0-x64
- 環境変数を反映します。
$ source ~/.bash_profile
これでJREのインストール作業は完了です。
次に、踏み台のEC2にCPATをインストールします。
- 以下、My Oracle SupportにアクセスしCPATをダウンロードし、zipファイルを展開します。
Cloud Premigration Advisor Tool (CPAT) Analyzes Databases for Suitability of Cloud Migration (Doc ID 2758371.1)
[ec2-user@ip-172-31-1-222 ~]$ unzip p32613591_112048_Generic.zip -d ~/cpat/
Archive: p32613591_112048_Generic.zip
inflating: /home/ec2-user/cpat/README.txt
inflating: /home/ec2-user/cpat/LICENSE.txt
inflating: /home/ec2-user/cpat/THIRD_PARTY_LICENSES.txt
creating: /home/ec2-user/cpat/bin/
inflating: /home/ec2-user/cpat/bin/cma.cmd
inflating: /home/ec2-user/cpat/bin/cma.sh
inflating: /home/ec2-user/cpat/bin/premigration.ps1
inflating: /home/ec2-user/cpat/premigration.cmd
inflating: /home/ec2-user/cpat/premigration.sh
creating: /home/ec2-user/cpat/lib/
inflating: /home/ec2-user/cpat/lib/premigration.jar
inflating: /home/ec2-user/cpat/lib/ojdbc8-19.3.0.0.jar
inflating: /home/ec2-user/cpat/lib/ucp-19.3.0.0.jar
inflating: /home/ec2-user/cpat/lib/oraclepki-19.3.0.0.jar
inflating: /home/ec2-user/cpat/lib/osdt_core-19.3.0.0.jar
inflating: /home/ec2-user/cpat/lib/osdt_cert-19.3.0.0.jar
inflating: /home/ec2-user/cpat/lib/orai18n-19.3.0.0.jar
inflating: /home/ec2-user/cpat/lib/ons-19.3.0.0.jar
inflating: /home/ec2-user/cpat/lib/simplefan-19.3.0.0.jar
inflating: /home/ec2-user/cpat/lib/commons-cli-1.9.0.jar
creating: /home/ec2-user/cpat/misc/
inflating: /home/ec2-user/cpat/misc/CPATReportSchema.json
[ec2-user@ip-172-31-1-222 ~]$ cd cpat
[ec2-user@ip-172-31-1-222 cpat]$ ls
LICENSE.txt README.txt THIRD_PARTY_LICENSES.txt bin lib misc premigration.cmd premigration.sh
参考情報:CPATを使い始めるまでの手順は以下の記事が参考になりました。
2-3. 実行と結果確認
CPATを実行します。
HRスキーマを移行対象に、移行先をAutonomous Database Transacation Processing(ATP-S) に指定して確認してみます。 以下を実行します。
$ ./premigration.sh --connectstring jdbc:oracle:thin:@<ホスト>:<ポート>/<サービス名> --username <ユーザ名> --targetcloud ATPS --reportformat text --schemas <移行スキーマ名>
- オプションに指定するもの
-
--connectstring:移行元となるデータベースへの接続。
※サービス名はAmazon RDS コンソールの [設定] タブにある DBNAME の値を指定。デフォルトではORCL。 -
--username:データベースに接続するユーザ名。管理者権限またはsysdba権限が必要です。
-
--targetcloud:ターゲットデータベースの指定。
-
--reportformat:出力ファイルの形式です。json,text,または両方(json text)を指定できます。デフォルトはjsonです。
-
--schemas:移行対象のスキーマ名。空白区切りで複数指定可能。
-
参考情報:実行時にオプションとして何をしてすべきかは以下の情報が参考になりました。
- 【マニュアル】20.9.2 移行前アドバイザ・ツールのコマンドライン・プロパティ
- 【Oracle技術ブログ】Options for Running CPAT – Cloud Premigration Advisor Tool – Part 2
[ec2-user@ip-10-0-9-134 cpat]$ ./premigration.sh --connectstring jdbc:oracle:thin:@xxxxx.xxxxx.ap-northeast-1.rds.amazonaws.com:1521:xxxxx --username admin --targetcloud ATPS --reportformat text --schemas HR
Enter password for admin user:
CPAT-1018: Informational: The amount of memory available to CPAT is 230 MB. Oracle recommends running CPAT using a 64-bit JVM on a system with at least 8 GB of memory.
Increase the memory by setting _JAVA_OPTIONS=-Xmx4g or higher if additional memory is available.
Cloud Premigration Advisor Tool Version 24.11.1
CPAT-1013: Informational: No analysis properties file found on the command line. Source analysis will not be as complete as possible.
See the help text for information on using an analysis properties file.
CPAT-4008: Warning: CPAT has detected the database being analyzed is not Oracle Enterprise Edition. The instance is not fully supported by CPAT and results are on a 'best effort' basis. Some validation checks may not work properly, and extra care must be assumed by the user when interpreting results.
Please run CPAT in an Oracle Enterprise Edition.
Cloud Premigration Advisor Tool completed with overall result: Review Required
Cloud Premigration Advisor Tool generated report location: /home/ec2-user/cpat/premigration_advisor_report.txt
[ec2-user@ip-10-0-9-134 cpat]$
レポートとログがカレントディレクトリに出力されました。
[ec2-user@ip-10-0-9-134 cpat]$ ls
LICENSE.txt lib premigration_advisor.log
README.txt misc premigration_advisor_report.txt
THIRD_PARTY_LICENSES.txt premigration.cmd
bin premigration.sh
[ec2-user@ip-10-0-9-134 cpat]$
CPATで出力されたレポートの読み説き方
出力されたpremigration_advisor_report.txtの内容を確認します。
冒頭では、Report Details、Database Details、Report Analysis Notes、Source Database Version Information、Source Database Patch Information などの項目に、レポートの前提情報やソースデータベースの情報などが記載されています。
====================================================================================================================================
Cloud Premigration Advisor Tool (CPAT) Report
====================================================================================================================================
Report Details
~~~~~~~~~~~~~~
Analysis Mode: SCHEMA
CPAT Application Version: 24.11.1
CPAT Checks Version: 24.11.1
Target Cloud Type: ATPS
Migration Method(s): DATAPUMP
Report Generated On: 2025-02-06T10:30:10Z
Report Result: Review Required
Database Details
~~~~~~~~~~~~~~~~
Source Database Applications: No Known Applications Detected
Source Cloud Vendor: Amazon Web Services (Relational Database Service)
Source Database Container Name: RDSSS
Source Database Host Name: ip-172-23-2-16
Source Instance Name: RDSSS
Source Database Name: RDSSS
Source Database Platform ID: 13
Source Database Port String: x86_64/Linux 2.4.xx
Source Oracle SID: RDSSS
Source DB Block Size in KB: 8
Source DB Combined Size of DATA, TEMP, LOG, and CONTROL File Usage in GB: 2.443
Source DB Size of DATA File Usage in GB: 1.837
Source DB Size of TEMP File Usage in GB: 0.098
Source DB Size of LOG File Usage in GB: 0.5
Source DB Size of CONTROL File Usage in GB: 0.009
Source Database Username: ADMIN
Report Analysis Notes
~~~~~~~~~~~~~~~~~~~~~
Note # Note Info
------ ---------------------------------------------------------------------------------------------------------------------------
1 CAUSE: Informational: No analysis properties file found on the command line. Source analysis will not be as complete
as possible.
ACTION: See the help text for information on using an analysis properties file.
2 CAUSE: Informational: This report was generated by CPAT running in SCHEMA mode thus SCHEMA_ONLY scoped checks were
executed but INSTANCE scope checks were not.
ACTION: If FULL mode was intended then omit the --schemas option or include the --full option. See Oracle Support
Document ID 2758371.1 for more information about CPAT analysis 'mode' and check 'scopes'.
3 CAUSE: Warning: CPAT has detected the database being analyzed is not Oracle Enterprise Edition. The instance is not
fully supported by CPAT and results are on a 'best effort' basis. Some validation checks may not work properly, and
extra care must be assumed by the user when interpreting results.
ACTION: Please run CPAT in an Oracle Enterprise Edition.
Source Database Version Information
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PRODUCT VERSION VERSION_FULL STATUS
--------------------------------------- ---------- ------------ ----------
Oracle Database 19c Standard Edition 2 19.0.0.0.0 19.25.0.0.0 Production
Source Database Compatible Version: 19.0.0
Source Database Version: 19.25.0.0.0
Source Database Patch Information
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
COMMENTS SOURCE_VERSION TARGET_VERSION ACTION ACTION_TIME
--------------------------------------------------------------------- -------------- -------------- --------- --------------------
RDBMS_19.25.0.0.0DBRU_LINUX.X64_241010 19 BOOTSTRAP
Patch applied on 19.25.0.0.0: Release_Update - 241010184253 19.0.0.0.0 RU_APPLY 18-OCT-2024 03:19:39
OJVM RELEASE UPDATE: 19.25.0.0.241015 (36878697) 19.1.0.0.0 19.25.0.0.0 APPLY 18-OCT-2024 03:17:16
Database Release Update : 19.25.0.0.241015 (36912597) 19.1.0.0.0 19.25.0.0.0 APPLY 18-OCT-2024 03:19:39
DBMS_STATS FAILING WITH ERROR ORA-01422 WHEN GATHERING STATS FOR USER 19.1.0.0.0 19.25.0.0.0 APPLY 18-OCT-2024 03:19:42
$ TABLE
次に、Premigration Advisor Report Check Summary として、実行された様々なチェックがPassing
、Review Suggested
Review Required
Action Required
に分類されたサマリを確認できます。後続の Premigration Advisor Check Details List にて、各チェックごとにそのチェックの説明や結果の影響、対応策が記載されます。
各チェックがどのように分類されるかの定義はMOSドキュメントにて以下のように記載されています:
分類先 | 定義(原文) | 定義(和訳) |
---|---|---|
Passing | Indicates migration should succeed and applications should see no difference in behavior. | 移行は成功し、アプリケーションに動作の違いは見られないはずであることを示す。 |
Review Suggested | Indicates migration should succeed and applications will likely see no functional difference but database administrators should evaluate each Check with this status to look for any unforeseen consequences. | 移行は成功するはずであり、アプリケーションには機能的な違いは見られないと思われるが、データベース管理者はこのステータスで各チェックを評価し、予期せぬ結果を探す必要があることを示す。 |
Review Required | Indicates migration may succeed (at least in part) but not everything is expected to work exactly like before or some work post migration must be done to bring the target instance into alignment with the source database. | 移行は(少なくとも部分的には)成功する可能性があるが、すべてが移行前とまったく同じように動作するとは予想されないか、移行後にターゲット・インスタンスをソース・データベースと整合させるために何らかの作業を行う必要があることを示します。 |
Action Required | Indicates something that would likely cause the migration to be unsuccessful. Checks with this result typically need to be resolved before attempting migration. | 移行が失敗する可能性が高いことを示します。この結果のチェックは通常、移行を試みる前に解決する必要があります。 |
Failed | The Cloud Premigration Advisor was unable to complete its analysis. Please contact Oracle Support Services. | Cloud Premigration Advisor は分析を完了できませんでした。Oracle サポート サービスにお問い合わせください。 |
Premigration Advisor Report Check Summaryの内容は以下の通りです。
今回の検証では、Review Required Checks
に該当するものが1件、Review Suggested Checks
に該当するものが4件あることが分かります。
------------------------------------------------------------------------------------------------------------------------------------
Premigration Advisor Report Check Summary
------------------------------------------------------------------------------------------------------------------------------------
Number of checks run: A total of 45 checks were performed
Number of schemas analyzed: 1
Number of schemas in source DB: 25
List of schemas analyzed: HR
Fatal Checks: There were 0 checks with Failed results
Action Required Checks: There were 0 checks with Action Required results
Review Required Checks: There were 1 checks with Review Required results: timezone_table_compatibility_higher_serverless
(1 relevant objects)
Review Suggested Checks: There were 4 checks with Review Suggested results: dp_has_low_streams_pool_size (3
relevant objects), has_index_organized_tables (1 relevant objects),
has_default_tablespace_not_data (1 relevant objects), standard_traditional_audit_adb
Passing Checks: There were 40 checks with Passed results:
has_users_with_10g_password_version, nls_national_character_set, has_java_objects,
has_java_source, has_columns_with_media_data_types_adb,
has_external_tables_serverless, has_db_links, has_tables_with_xmltype_column, has_xmltype_tables,
has_unstructured_xml_indexes, has_xmlschema_objects,
has_logging_off_for_tables, has_logging_off_for_partitions,
has_logging_off_for_subpartitions, has_basic_file_lobs, has_ilm_ado_policies,
has_clustered_tables, has_db_link_synonyms,
has_parallel_indexes_enabled, has_data_in_other_tablespaces_serverless,
has_profile_not_default, has_refs_to_user_objects_in_sys, has_role_privileges,
has_sys_privileges, nls_character_set_conversion, nls_nchar_ora_910,
has_libraries_serverless, has_refs_to_restricted_packages_serverless,
has_dbms_credentials, has_incompatible_jobs,
has_columns_with_spatial_data_types, has_sqlt_objects_adb,
has_noexport_object_grants, has_mining_model_issues, has_public_synonyms,
has_csmig_schema, has_illegal_characters_in_comments, unified_and_standard_traditional_audit_adb,
has_columns_with_local_timezone, has_disallowed_triggers
続いて、Premigration Advisor Check Details List では、各チェックについての詳細な分析結果が記載されます。以下の項目に分けて、各チェックの内容や移行への影響、対処方法についてアドバイスされています。
- Description:そのチェックが何を調べるのか、またはなぜそのチェックが実行されるのか
- Failure Impact: Passing以外の結果が出た場合の影響について
- Action:チェックの結果がPassingでなかった場合、その状況に対処するため何をすべきか
今回の検証における、Review Required Checks
に該当するチェックを確認します。
------------------------------------------------------------------------------------------------------------------------------------
Premigration Advisor Check Details List
------------------------------------------------------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Check Name: timezone_table_compatibility_higher_serverless
Check Result: Review Required
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Description: The source database TZ_VERSION cannot be higher than the target TZ_VERSION.
Failure Impact: Migration is not possible until the target TZ_VERSION is the same or higher than the source database TZ_VERSION
Status Message: The target Time Zone version property was not supplied so a reasonable substitute was inferred based on the
target database version or the target cloud parameter. Please ensure the inferred timezone version is
appropriate.
Action: Update Time Zone File Version executing this SQL and then restart your instance
BEGIN
DBMS_CLOUD_ADMIN.ENABLE_FEATURE( feature_name => 'AUTO_DST_UPGRADE');
END;
/
By default, automatic time zone file updates are disabled because the time zone file upgrade process can have
an impact on performance. If you want to turn the AUTO_DST_UPGRADE feature off execute this SQL.
BEGIN
DBMS_CLOUD_ADMIN.DISABLE_FEATURE( feature_name => AUTO_DST_UPGRADE);
END;
/
For more information on updating the Time Zone File Version feature see the instructions here:
https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/manage-time-zone-file-version.html
#GUID-BACC9C4A-C0FA-4912-862A-1A2A24D6A0C2
Relevant Objects:
TARGET_TZ_VERSION SOURCE_TZ_VERSION
----------------- -----------------
32 43
Descriptionより、移行元DBのTZ_VERSIONを移行先DBのTZ_VERSIONより高くすることはできないということが分かりました。これにより、移行先のTZ_VERSIONが移行元データベースのTZ_VERSIONと同じかそれ以上になるまで、移行はできないと記載されています。
解決するためのアクションとしては、タイムゾーン・ファイル・バージョンを更新し、インスタンスを再起動する必要があるということです。具体的にどのようなSQLを実行すべきかについても記載があります。
フルバージョンは以下のリンクよりご参照ください。
premigration_advisor_report.txt (52.62KiB)
CPATを使うことで、DB移行時に問題となりうる点の洗い出しや、それに対処するための具体的に対策についても把握することができました。
参考情報:実行時のトラブルシュート、実行結果の読み方については以下の情報が参考になりました。
- 【MOSドキュメント】 Cloud Premigration Advisor Tool (CPAT) Analyzes Databases for Suitability of Cloud Migration (Doc ID 2758371.1) > Interpreting CPAT Report Data
- 【Oracle技術ブログ】Troubleshooting CPAT – Cloud Premigration Advisor Tool – Part 4
- 【Oracle技術ブログ】CPAT Checks – Cloud Premigration Advisor Tool – Part 5
3. Data Pumpを使用してデータを移行する
本章では以下の記事を参考にしております。
- 【OCIチュートリアル】303 : Data Pumpを利用してデータを移行しよう
3-1. データをダンプファイルにエクスポート
-
admin
ユーザでRDSにログインします。ダンプ・ファイルとログ・ファイルが保持されるdba_directories
を確認します。
SQL> set pages 100 line 200
SQL> col owner for a10
SQL> col directory_name for a20
SQL> col directory_path for a30
SQL> select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH ORIGIN_CON_ID
---------- -------------------- ------------------------------ -------------
SYS OPATCH_INST_DIR /rdsdbbin/oracle/OPatch 0
SYS JAVA$JOX$CUJS$DIRECT /rdsdbbin/oracle/javavm/admin/ 0
ORY$
SYS DATA_PUMP_DIR /rdsdbdata/datapump 0
SYS RDS$DB_TASKS /rdsdbdata/dbtasks 0
SYS BDUMP /rdsdbdata/log/diag/rdbms/rdss 0
s_a/RDSSS/trace
SYS OPATCH_SCRIPT_DIR /rdsdbbin/oracle/QOpatch 0
SYS OPATCH_LOG_DIR /rdsdbbin/oracle/rdbms/log 0
SYS ADUMP /rdsdbdata/admin/RDSSS/adump 0
8 rows selected.
- DBMS_DATAPUMPプロシージャを使って、ダンプファイルを作成します。
SQL> DECLARE
hdnl NUMBER;
BEGIN
hdnl := DBMS_DATAPUMP.open( operation => 'EXPORT', job_mode => 'SCHEMA', job_name => null);
2 3 4 5 DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'hr.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);
DBMS_DATAPUMP.add_file( handle => hdnl, filename => 'exp_hr.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file);
DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''HR'')');
DBMS_DATAPUMP.start_job(hdnl);
6 7 8 9 END;
10 /
PL/SQL procedure successfully completed.
- 出力されたダンプとログファイルを確認します。
SQL> set pages 100 line 200
SQL> col filename for a20
SQL> select * from TABLE(RDSADMIN.RDS_FILE_UTIL.LISTDIR(P_DIRECTORY => 'DATA_PUMP_DIR'));
FILENAME TYPE FILESIZE MTIME
-------------------- ---------- ---------- ---------
datapump/ directory 4096 02-DEC-24
hr.dmp file 720896 02-DEC-24
exp_hr.log file 2008 02-DEC-24
SQL>
- エクスポート・ログの内容を検証します。
SQL> col text for a100
SQL> SELECT TEXT FROM TABLE(RDSADMIN.RDS_FILE_UTIL.READ_TEXT_FILE('DATA_PUMP_DIR','exp_hr.log'));
TEXT
------------------------------------------------------------------------------- ---------------------
Starting "ADMIN"."SYS_EXPORT_SCHEMA_01":
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Processing object type SCHEMA_EXPORT/VIEW/VIEW
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/TRIGGER
. . exported "HR"."EMPLOYEES" 17.07 KB 107 rows
. . exported "HR"."LOCATIONS" 8.437 KB 23 rows
. . exported "HR"."JOB_HISTORY" 7.195 KB 10 rows
. . exported "HR"."JOBS" 7.109 KB 19 rows
. . exported "HR"."DEPARTMENTS" 7.125 KB 27 rows
. . exported "HR"."COUNTRIES" 6.398 KB 25 rows
. . exported "HR"."REGIONS" 5.546 KB 5 rows
Master table "ADMIN"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for ADMIN.SYS_EXPORT_SCHEMA_01 is:
/rdsdbdata/datapump/hr.dmp
Job "ADMIN"."SYS_EXPORT_SCHEMA_01" successfully completed at Mon Dec 2 01:51:57 2024 elapsed 0 00:00
:37
32 rows selected.
DATA_PUMP_DIR
ディレクトリに、hr.dmp
を出力できました。
3-2. ダンプファイルをアップロードするためのAmazon S3バケットを作成する
RDS-S3間のアクセスを有効にする
【AWSマニュアル】Amazon S3 と RDS for Oracle を統合する IAM アクセス許可の設定 を参考に、RDSとS3間のアクセスを有効にするポリシーを設定します。
- Amazon RDS ロール用の IAM ポリシーを作成する
AWS Management Consoleにて、作成済のS3バケットに対し、指定したアクションを許可するポリシーを作成します。
設定項目は以下:- アクション:
ListBucket
GetObject
PutObject
DeleteObject
PutObjectAcl
を選択 - リソース:作成したS3バケットおよびバケット内のすべてのオブジェクト
- アクション:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::<S3バケット名>",
"arn:aws:s3:::<S3バケット名>/*"
]
}
]
}
-
RDS for Oracle DB インスタンスの IAM ロールを作成する
設定項目は以下:- ロールを追加する対象のリソース:
AWSサービス
>RDS
- アクセス許可ポリシー:前ステップにて作成したポリシーを指定
- ロールを追加する対象のリソース:
-
IAMロールをRDSインスタンスにアタッチする
Amazon RDS コンソールにて、IAM ロールを DB インスタンスに関連付けます。 -
オプショングループを作成し、RDSインスタンスにアタッチする
DB インスタンスが S3_INTEGRATION オプションを含むオプショングループに関連付けられている必要があります。
オプションの追加 を参考にオプショングループを作成します。- 追加オプション:
S3_INTEGRATION
- 追加オプション:
RDS詳細画面より、オプショングループをRDSインスタンスに関連付けます。
これでRDS for OracleにS3へのアクセス権限が付きました。
データファイルのアップロード
- ディレクトリからバケットにデータファイルをアップロードします。
S3へのファイル出力は rdsadmin.rdsadmin_s3_tasks.upload_to_s3
を使用します。
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3(
p_bucket_name => '<S3バケット名>',
p_directory_name => 'DATA_PUMP_DIR')
AS TASK_ID FROM DUAL;
SQL> SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3(
p_bucket_name => 'sshataribk',
p_directory_name => 'DATA_PUMP_DIR')
AS TASK_ID FROM DUAL; 2 3 4
TASK_ID
------------------------------------------------------------------------------- -
1733816229813-24
SQL>
下記のエラーが表示される場合、以下をご確認ください:
ERROR at line 1:
ORA-00904: "RDSADMIN"."RDSADMIN_S3_TASKS"."UPLOAD_TO_S3": invalid identifier
Help: https://docs.oracle.com/error-help/db/ora-00904/
☑ IAMポリシーに適切なアクション・リソースが設定されているか
☑ IAMロールに上記のポリシーが紐づいているか・適切なサービス(RDS
)・ユースケース(RDS - Add Role to Database
)が設定されているか
☑ オプショングループに適切なエンジン(oracle-se2
)・メジャーエンジンバージョン(19
)・オプション(S3_INTEGRATION
)・バージョン(1.0
)が設定されているか
☑ RDSインスタンスに上記のオプショングループが紐づいているか・作成したIAMロールが追加されているか
- 上記で取得したTASK-IDを指定し、アップロードタスクログを確認します。
アップロードされていることが確認できました。
SQL> select text from table(rdsadmin.rds_file_util.read_text_file('BDUMP','dbtask-1733816229813-24.log'));
TEXT
--------------------------------------------------------------------------------
2024-12-10 07:37:09.981 UTC [INFO ] File #1: Uploading the file /rdsdbdata/datapump/hr.dmp to Amazon S3 with bucket name sshataribk and key hr.dmp.
2024-12-10 07:37:10.266 UTC [INFO ] The file /rdsdbdata/datapump/hr.dmp was uploaded to Amazon S3 with bucket name sshataribk and key hr.dmp.
2024-12-10 07:37:10.280 UTC [INFO ] File #2: Uploading the file /rdsdbdata/datapump/exp_hr.log to Amazon S3 with bucket name sshataribk and key exp_hr.log.
2024-12-10 07:37:10.335 UTC [INFO ] The file /rdsdbdata/datapump/exp_hr.log was uploaded to Amazon S3 with bucket name sshataribk and key exp_hr.log.
TEXT
--------------------------------------------------------------------------------
2024-12-10 07:37:10.336 UTC [INFO ] The task finished successfully.
SQL>
ダンプファイルをS3にアップロードできました。
2-3. Amazon S3バケットからOracle Autonomous Databaseにダンプファイルをインポートする
Autonomous Databaseに、S3に接続するための資格証明を登録する
Autonomous DatabaseからS3へアクセスできるように連携します。
以下の記事が大変参考になりました。
【Qiita記事】[OCI]Autonomous DatabaseからAmazon S3にARNを用いたロールベースの認証でアクセスしてデータ連携してみた
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => '<作成するクレデンシャルの名前>',
params =>
JSON_OBJECT('aws_role_arn' value '<作成したロール名>',
'external_id_type' value 'database_ocid')
);
END;
/
SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS(
credential_name => '<作成したクレデンシャルの名前>',
location_uri => 'https://<バケット名>.s3.<AWSのリージョン識別子>.amazonaws.com/');
SQL> BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 's3_cred_test',
params =>
JSON_OBJECT('aws_role_arn' value 'arn:aws:iam::907900171235:role/Role_for_ADB', 'external_id_type' value 'database_ocid')
);
END;
/
PL/SQL procedure successfully completed.
SQL> SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS(
credential_name => 's3_cred',
location_uri => 'https://sshataribk.s3.ap-northeast-1.amazonaws.com/'); 2 3
OBJECT_NAME
--------------------------------------------------------------------------------
exp_hr.log
hr.dmp
SQL>
資格証明s3_cred
を作成し、中のオブジェクトをlistできました。
資格証明を使ってダンプファイルをインポートする
- DBMS_CLOUD.GET_OBJECTで、AWS S3からDUMPファイルを取得し、DBのディレクトリに保存します。
BEGIN
DBMS_CLOUD.GET_OBJECT(
credential_name => <作成したクレデンシャルの名前>
object_uri => 'https://<バケット名>.s3.<AWSのリージョン識別子>.amazonaws.com/',
directory_name => 'DATA_PUMP_DIR');
END;
/
- impdpコマンドを使用し、ダンプをインポートします。
impdp <DBユーザ名>/<password>@<ADBへの接続サービス名> directory=data_pump_dir dumpfile=hr.dmp ignore=y
SQL> BEGIN
DBMS_CLOUD.GET_OBJECT(
credential_name => 's3_cred',
object_uri => 'https://sshataribk.s3.ap-northeast-1.amazonaws.com/hr.dmp',
directory_name => 'DATA_PUMP_DIR');
END;
/ 2 3 4 5 6 7
PL/SQL procedure successfully completed.
SQL> exit
Disconnected from Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - Production
Version 23.6.0.24.11
[oracle@devins ~]$ impdp demouser/Welcome12345#@adwss_high directory=data_pump_dir dumpfile=hr.dmp ignore=y
Import: Release 21.0.0.0.0 - Production on Wed Dec 11 06:49:14 2024
Version 21.13.0.0.0
Copyright (c) 1982, 2024, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - Production
Legacy Mode Active due to the following parameters:
Legacy Mode Parameter: "ignore=TRUE" Location: Command Line, Replaced with: "table_exists_action=append"
ORA-39154: Objects from foreign schemas have been removed from import
Master table "DEMOUSER"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "DEMOUSER"."SYS_IMPORT_FULL_01": demouser/********@adwss_high directory=data_pump_dir dumpfile=hr.dmp table_exists_action=append
Job "DEMOUSER"."SYS_IMPORT_FULL_01" successfully completed at Wed Dec 11 06:49:26 2024 elapsed 0 00:00:09
[oracle@devins ~]$
インポートが完了しました。
まとめ
本章ではAmazon RDS for Oracle を Oracle Autonomous Database(ATP)に移行する際の事前チェック、Data Pumpを使用した移行を検証しました。
工程が多く、盛りだくさんの内容になってしまいました。
個人的にはAWSの操作に慣れていないこともあり、RDSの設定、特にRDS-S3間のアクセスを有効にする工程で苦戦しておりました。。
きっとOCIの操作も慣れていない方にとっては、VCNなどネットワーク周りの設定やADBからS3を参照するためのクレデンシャルの設定など、煩雑に感じる工程もあるのではないかと思います。
そんなときに、OCIのリソース作成・設定の手順についてはOCIチュートリアル、ADBについてはADBチュートリアルにまとまっております。
スクリーンショットを交えたわかりやすい解説ブログとなっておりますので、ぜひご活用ください
ご参考になれば幸いです。