8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-01-17

【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にインポートします。

▼イメージ図
やることイメージ.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関連リソース
リソースカテゴリ(用途) サービス名 詳細設定 参考資料
データベース
(移行先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
  • アーキテクチャイメージ

作成リソース.png

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
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 '<マスターユーザ名>@(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=database-1.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) とは?

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

CPATはJavaベースのツールとなるため、Java実行環境(JRE)が必要です。

$ sudo rpm -ivh jre-8u431-linux-x64.rpm
$ sudo rpm -Uvh jre-8u431-linux-x64.rpm
  • 利用するJREのための環境変数を設定します。JAVA_HOME でJREを指定することで実行可能です。
    bash_profile に以下の設定を入れます。
bash_profileに追記
export JAVA_HOME=/usr/java/jre1.8.0-x64
  • 環境変数を反映します。
$ source ~/.bash_profile

これでJREのインストール作業は完了です。

次に、踏み台のEC2にCPATをインストールします。

実行結果
[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

1-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 移行前アドバイザ・ツールのコマンドライン・プロパティ

実行結果
[ec2-user@ip-172-31-1-222 cpat]$ ./premigration.sh --connectstring jdbc:oracle:thin:@database-1.xxxxxxxx.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.

CPAT-1002: Invalid or unknown schema names were passed to the Premigration Advisor.  The following schema name(s) could not be found in the database: hr
Correct or remove the nonexistent name(s) and retry the application.  Note that case matters.  User 'TEST' is not considered the same as user 'test'.

[ec2-user@ip-172-31-1-222 cpat]$

データベースの詳細情報の後、Premigration Advisor Report Check Summaryとして、実行された様々なチェックがBlockingWarningInformationalPassingに分類されて記載され、各チェックごとにそのチェックの説明や結果の影響、対応策が記載されます。

3. 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バケットおよびバケット内のすべてのオブジェクト
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 オプションを含むオプショングループに関連付けられている必要があります。
    オプションの追加 を参考にオプショングループを作成します。

    • 追加オプション: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に接続するための資格証明を登録する

[OCI]Autonomous DatabaseからAmazon S3にARNを用いたロールベースの認証でアクセスしてデータ連携してみた を参考に、Autonomous DatabaseからS3へアクセスできるように連携します。

ARNを使用したクレデンシャルの作成
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => '<作成するクレデンシャルの名前>',
    params =>
        JSON_OBJECT('aws_role_arn' value '<作成したロール名>',          
                    'external_id_type' value 'database_ocid')
  );
END;
/
ARNを使用したAmazon S3へのアクセス
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 ~]$

インポートが完了しました。

まとめ

AWS RDS for Oracle を Oracle Autonomous Database(ATP)に移行する際の事前チェック、Data Pumpを使用した移行を検証しました。
ご参考になれば幸いです。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?