【OCI クラウド移行ガイド】 Amazon RDS for Oracle を OCI Autonomous Databaseへ移行してみた

<H1>【OCIクラウド移行ガイド】とは</h1>
オンプレミスやAWSなど、複数のプラットフォームからOracle Cloud Infrastructureへの移行プロジェクトに取り組んでいるクラウドエンジニアによる、OCI移行手順をまとめたシリーズ記事です。
各回、サンプルワークロードから対象サービスを取り上げ、移行手順をガイドいたします。
まとめ記事は以下になります。

https://qiita.com/yama6/items/b197c0fe3ec75eb02637

<h1>今回移行するサービス：Amazon RDS for Oracle</h1>
今回、移行対象とするのはAmazon RDS for Oracleです。
Oracle Databaseの一般的な移行方式であるDataPumpを使用して移行します。DataPumpは汎用的で馴染みのある方法ですが、移行時にダウンタイムを要しますので、GoldenGateなど他の移行方式を検討する必要があります。その他の移行方式については、以下のページにまとめがあります。

https://blogs.oracle.com/oracle4engineer/post/minamin-cloud-023-basedbexadboracle-database

このRDS for Oracle から Autonomous Database(ADB)への移行検証をします。
Oracle DatabaseからAutonomous Databaseに移行する際に利用できる事前チェックツール「Cloud Premigration Advisor Tool(CPAT)」を使った事前検証と、Data Pumpを使ったデータの移行を検証します。

本記事は以下の情報を参考にしています。
- 【オラクルエンジニア通信】[Data Pumpを使用した、AWS RDSからOracle Autonomous Databaseへの移行](https://blogs.oracle.com/oracle4engineer/post/migrating-from-aws-rds-to-oracle-autonomous-database-ja)

# はじめに
### 移行検証のイメージと流れ
RDSにサンプルスキーマ（HRスキーマ）をロードし、サンプルスキーマのデータを移行します。
RDSに対しCPATを使った事前チェックを実施したのち、ロードしたデータについてData Pumpを使った移行を行います。
データ移行時にはData Pumpで提供されるモジュールを使い、ダンプファイルをS3バケットにエクスポートします。
Autonomous Databaseでは、あらかじめ提供されるDBMS_CLOUDモジュールを使いS3への接続を構成することが可能です。Data Pumpで提供されるモジュールを使い、S3上のダンプファイルをADBにインポートします。

▼イメージ図
![やることイメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1072625/8edd12b9-e90b-daf4-30dd-696d61bf0dc9.png)

以下の手順で実施します。

1. 事前準備
    1-1. EC2を踏み台にしたRDSへの接続の構成
	1-2. RDSにサンプルスキーマをロードする
2. CPATを使用して事前検証をする
	2-1. CPATとは？
	2-2. CPATの実行に必要な環境を構築する
	2-3. 実行と結果確認
3. Data Pumpを使用してデータを移行する
	3-1. データをダンプファイルにエクスポート
	3-2. ダンプファイルをアップロードするためのAmazon S3バケットを作成する
	3-3. Amazon S3バケットからOracle Autonomous Databaseにダンプファイルをインポートする

### 前提

以下のリソースはあらかじめ作成済みのものとします。

- OCI関連リソース

|リソースカテゴリ（用途）|サービス名|詳細設定|参考資料|
|:-----|:-----|:-----|:-----|
|データベース<br>（移行先DB）|Oracle Autonomous Database|以下の設定で作成<br>● ワークロードタイプ：トランザクション処理<br>● デプロイメントタイプ：共有インフラストラクチャ<br>● DBのバージョン：19c<br>● ネットワーク・アクセスの選択：すべての場所からのセキュアアクセスを許可|【OCIチュートリアル】[101: ADBインスタンスを作成してみよう](https://oracle-japan.github.io/ocitutorials/adb/adb101-provisioning/)|
|ネットワーク|VCN/セキュリティリスト/ルート表/ゲートウェイ等|ADBに接続するための踏み台インスタンスのためのネットワークを構成|【OCIチュートリアル】[その2 - クラウドに仮想ネットワーク(VCN)を作る](https://oracle-japan.github.io/ocitutorials/beginners/creating-vcn/)|
|踏み台インスタンス<br>（ADBへの接続・DataPump実行用インスタンス）|OCI Compute|Oracle Cloud Developer Imageで立てると、OracleDBへの接続に必要なコンポーネントがあらかじめインストールされた状態で利用可能です。|【OCIチュートリアル】[204: 開発者向け仮想マシンのセットアップ方法](https://oracle-japan.github.io/ocitutorials/adb/adb204-setup-VM/)|

- AWS関連リソース

|リソースカテゴリ（用途）|サービス名|詳細設定|
|:-----|:-----|:-----|
|ネットワーク|VPC/サブネット/ルートテーブル/ネットワーク接続|以下の設定で作成<br>● VPCにはインターネットゲートウェイをアタッチし、インターネット経由での接続を許可<br>● EC2およびRDSは別サブネットに構成し、EC2-RDS間の通信を許可するルールを追加|
|踏み台インスタンス<br>（RDSへの接続用インスタンス）|EC2|以下の設定で作成<br>● AMI名：al2023-ami-2023.6.20241121.0-kernel-6.1-x86_64<br>● OS：Amazon Linux 2023<br>● アーキテクチャ：x86_64|
|データベース（移行元DB）|RDS for Oracle|以下の設定で作成<br>● クラス：db.m5.large<br>● エンジン：Oracle Standard Edition Two<br>● エンジンバージョン：19.0.0.0.ru-2024-10.rur-2024-10.r1<br>● EC2からRDSにアクセスできるようなネットワーク接続設定を構成|
|クラウドストレージ<br>（ダンプファイル出力先）|Amazon S3|以下の設定で作成<br>● 層：Standard Bucket|

- アーキテクチャイメージ

![作成リソース.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1072625/0dc276cf-8ec2-932c-c0a4-ccf7c3a09e66.png)


# 1. 事前準備
### 1-1. EC2を踏み台にしたRDSへの接続の構成

EC2に必要な設定をいれます。

- Oracle Instant Clientをダウンロードします。
[Oracle Instant Client提供ページ](https://www.oracle.com/jp/database/technologies/instant-client/linux-x86-64-downloads.html)より必要なクライアントパッケージをダウンロードします。今回はBasic・SQLPlus・Tools（DataPumpを使用するため）をそれぞれRPM形式でダウンロード。
```ruby:
$ 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
```
以下３つのファイルがダウンロードできました。
```ruby:実行結果
[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でインストールします。
```ruby:
$ 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` に以下の設定をいれます。
```ruby:
$ vi ~/.bash_profile
```
```ruby:bash_profileに追記
export ORACLE_HOME=/usr/lib/oracle/23/client64
export PATH=${ORACLE_HOME}:${PATH}
export LD_LIBRARY_PATH=${ORACLE_HOME}
```

- 環境変数を反映します。
```ruby:
$ source ~/.bash_profile
```

- sqlplusが起動できました。
```ruby:実行結果
[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 インスタンスへの接続](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ConnectToOracleInstance.SQLPlus.html)

```ruby:
$ sqlplus '<マスターユーザ名>@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<DBエンドポイント名>)(PORT=1521))(CONNECT_DATA=(SID=<DB名>)))'
```

- パスワードを入力し、adminユーザとして接続できました。
```ruby:実行結果
[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 サンプル・スキーマのインストール](https://docs.oracle.com/cd/E96517_01/comsc/installing-sample-schemas.html#GUID-1E645D09-F91F-4BA6-A286-57C5EC66321D)をご参照ください。
今回は[GitHub Webサイト](https://github.com/oracle-samples/db-sample-schemas/releases/tag/v23.3)からダウンロードしてきたものをインストールします。

- サンプルスキーマのインストールスクリプトをEC2のローカルにダウンロードします。
```ruby:
$ wget https://github.com/oracle-samples/db-sample-schemas/archive/refs/tags/v23.3.zip
unzip v23.3.zip
```
- `db-sample-schemas-23.3` に展開されました。
```ruby:実行結果
[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` に設定します。
```ruby:実行結果
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スキーマに接続します。
```ruby:
$ sqlplus 'hr@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=database-1.xxxxxxxx.ap-northeast-1.rds.amazonaws.com)(PORT=1521))(CONNECT_DATA=(SID=xxxxx)))'
```
- 作成されたオブジェクトを確認します。
```ruby:実行結果
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) とは？](https://oracle-japan.github.io/ocitutorials/adb/adb302-cpat/#1-cloud-premigraiton-advisor-tool-cpat-%E3%81%A8%E3%81%AF)
- 【Oracle技術ブログ】Oracle Product ManagerによるCPAT検証シリーズ

###	2-2. CPATの実行に必要な環境を構築する

CPATはJavaベースのツールとなるため、Java実行環境(JRE)が必要です。
- [RPMベースのLinux x64版Javaのインストール方法](https://www.java.com/ja/download/help/linux_x64rpm_install.html)よりJREのパッケージをダウンロードし、インストールします。
```ruby:
$ sudo rpm -ivh jre-8u431-linux-x64.rpm
```
- 利用するJREのための環境変数を設定します。`JAVA_HOME` でJREを指定することで実行可能です。
`bash_profile` に以下の設定を入れます。
```ruby:bash_profileに追記
export JAVA_HOME=/usr/java/jre1.8.0-x64
```
- 環境変数を反映します。
```ruby:
$ 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)](https://support.oracle.com/rs?type=doc&id=2758371.1)
```ruby:実行結果
[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を使い始めるまでの手順は以下の記事が参考になりました。
- 【Oracle技術ブログ】[Starting with CPAT – Cloud Premigration Advisor Tool – Part 1](https://alexzaballa.com/starting-with-cpat-cloud-premigration-advisor-tool-part-1/)


###	2-3. 実行と結果確認

CPATを実行します。
HRスキーマを移行対象に、移行先をAutonomous Database Transacation Processing(ATP-S) に指定して確認してみます。 以下を実行します。
```ruby:
$ ./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 移行前アドバイザ・ツールのコマンドライン・プロパティ](https://docs.oracle.com/cd/F82042_01/sutil/command-line-syntax-parameters-premigration.html#GUID-9F3769F0-2596-4812-BEF7-5760A1635CB6)
- 【Oracle技術ブログ】[Options for Running CPAT – Cloud Premigration Advisor Tool – Part 2](https://alexzaballa.com/running-cpat-cloud-premigration-advisor-tool-part-2/)
 

```ruby:実行結果
[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]$
```
レポートとログがカレントディレクトリに出力されました。

```ruby:
[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 などの項目に、レポートの前提情報やソースデータベースの情報などが記載されています。

```ruby:premigration_advisor_report.txt（冒頭部分）
====================================================================================================================================
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ドキュメントにて以下のように記載されています：
|分類先|定義（原文）|定義（和訳）|
|:-----|:-----|:-----|
|<b>Passing</b>|Indicates migration should succeed and applications should see no difference in behavior.|移行は成功し、アプリケーションに動作の違いは見られないはずであることを示す。|
|<b>Review Suggested</b>|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.|移行は成功するはずであり、アプリケーションには機能的な違いは見られないと思われるが、データベース管理者はこのステータスで各チェックを評価し、予期せぬ結果を探す必要があることを示す。|
|<b>Review Required</b>|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.|移行は（少なくとも部分的には）成功する可能性があるが、すべてが移行前とまったく同じように動作するとは予想されないか、移行後にターゲット・インスタンスをソース・データベースと整合させるために何らかの作業を行う必要があることを示します。|
|<b>Action Required</b>|Indicates something that would likely cause the migration to be unsuccessful. Checks with this result typically need to be resolved before attempting migration.|移行が失敗する可能性が高いことを示します。この結果のチェックは通常、移行を試みる前に解決する必要があります。|
|<b>Failed</b>|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`に該当するものが１件、`Review Suggested Checks`に該当するものが4件あることが分かります。


```ruby:premigration_advisor_report.txt（Premigration Advisor Report Check Summary部分）
------------------------------------------------------------------------------------------------------------------------------------
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`に該当するチェックを確認します。

```ruby:premigration_advisor_report.txt（Premigration Advisor Check Details List部分＞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を実行すべきかについても記載があります。

フルバージョンは以下のリンクよりご参照ください。
<a href="https://objectstorage.ap-osaka-1.oraclecloud.com/n/orasejapan/b/bucket_pub/o/cpat_report%2Fpremigration_advisor_report.txt" target="_blank">premigration_advisor_report.txt</a> (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](https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=94710575649113&id=2758371.1&_afrWindowMode=0&_adf.ctrl-state=vhicq09s5_4#aref_section230) 
- 【Oracle技術ブログ】[Troubleshooting CPAT – Cloud Premigration Advisor Tool – Part 4](https://alexzaballa.com/troubleshooting-cpat-cloud-premigration-advisor-tool-part-4/)
- 【Oracle技術ブログ】[CPAT Checks – Cloud Premigration Advisor Tool – Part 5](https://alexzaballa.com/cpat-checks-cloud-premigration-advisor-tool-part-5/)


# 3. Data Pumpを使用してデータを移行する

本章では以下の記事を参考にしております。
- 【OCIチュートリアル】[303 : Data Pumpを利用してデータを移行しよう](https://oracle-japan.github.io/ocitutorials/adb/adb303-datapump/)

###	3-1. データをダンプファイルにエクスポート
- `admin` ユーザでRDSにログインします。ダンプ・ファイルとログ・ファイルが保持される `dba_directories` を確認します。
```ruby:実行結果
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プロシージャを使って、ダンプファイルを作成します。
```ruby:実行結果
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.
```
- 出力されたダンプとログファイルを確認します。
```ruby:実行結果
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>
```
- エクスポート・ログの内容を検証します。
```ruby:実行結果
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 アクセス許可の設定](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/oracle-s3-integration.preparing.html) を参考に、RDSとS3間のアクセスを有効にするポリシーを設定します。

- Amazon RDS ロール用の IAM ポリシーを作成する
AWS Management Consoleにて、作成済のS3バケットに対し、指定したアクションを許可するポリシーを作成します。
設定項目は以下：
    - アクション：`ListBucket` `GetObject` `PutObject`　`DeleteObject` `PutObjectAcl` を選択
    - リソース：作成したS3バケットおよびバケット内のすべてのオブジェクト
```ruby:IAMポリシーに定義する内容
{
    "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 オプションを含むオプショングループに関連付けられている必要があります。
[オプションの追加](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/oracle-s3-integration.preparing.option-group.html) を参考にオプショングループを作成します。
    - 追加オプション：`S3_INTEGRATION`

RDS詳細画面より、オプショングループをRDSインスタンスに関連付けます。

これでRDS for OracleにS3へのアクセス権限が付きました。

#### データファイルのアップロード
- ディレクトリからバケットにデータファイルをアップロードします。

S3へのファイル出力は `rdsadmin.rdsadmin_s3_tasks.upload_to_s3` を使用します。
```ruby:
SELECT rdsadmin.rdsadmin_s3_tasks.upload_to_s3(
  p_bucket_name    =>  '<S3バケット名>',       
  p_directory_name =>  'DATA_PUMP_DIR') 
AS TASK_ID FROM DUAL;
```
```ruby:実行結果
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>
```
下記のエラーが表示される場合、以下をご確認ください：
```ruby:エラー例
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を指定し、アップロードタスクログを確認します。
アップロードされていることが確認できました。
```ruby:実行結果
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を用いたロールベースの認証でアクセスしてデータ連携してみた](https://qiita.com/500InternalServerError/items/bf5917270c1291a3558f) 


```ruby:ARNを使用したクレデンシャルの作成
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => '<作成するクレデンシャルの名前>',
    params =>
        JSON_OBJECT('aws_role_arn' value '<作成したロール名>',          
                    'external_id_type' value 'database_ocid')
  );
END;
/
```
```ruby:ARNを使用したAmazon S3へのアクセス
SELECT object_name FROM DBMS_CLOUD.LIST_OBJECTS(
           credential_name => '<作成したクレデンシャルの名前>',
           location_uri    => 'https://<バケット名>.s3.<AWSのリージョン識別子>.amazonaws.com/');
```

```ruby:実行結果
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のディレクトリに保存します。

```ruby:
BEGIN 
   DBMS_CLOUD.GET_OBJECT(
     credential_name => <作成したクレデンシャルの名前>
     object_uri => 'https://<バケット名>.s3.<AWSのリージョン識別子>.amazonaws.com/',
     directory_name => 'DATA_PUMP_DIR'); 
END;
/
```
- impdpコマンドを使用し、ダンプをインポートします。
```ruby:
impdp <DBユーザ名>/<password>@<ADBへの接続サービス名> directory=data_pump_dir dumpfile=hr.dmp ignore=y
```

```ruby:実行結果
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チュートリアル](https://oracle-japan.github.io/ocitutorials/)、ADBについては[ADBチュートリアル](https://oracle-japan.github.io/ocitutorials/adb)にまとまっております。
スクリーンショットを交えたわかりやすい解説ブログとなっておりますので、ぜひご活用ください:smile:
ご参考になれば幸いです。