【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を使ったデータの移行を検証します。
本記事は以下の情報を参考に記載しています。
参考記事:
- 【技術ブログ】Data Pumpを使用した、AWS RDSからOracle Autonomous Databaseへの移行
- 【OCIチュートリアル】302 : Cloud Premigration Advisor Tool(CPAT)を活用しよう
- 【OCIチュートリアル】303 : 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:
- DNS 名とポート番号を入力し、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=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)が必要です。
- RPMベースのLinux x64版Javaのインストール方法よりJREのパッケージをダウンロードし、インストールします。
$ sudo rpm -ivh jre-8u431-linux-x64.rpm
$ sudo rpm -Uvh 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
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:移行対象のスキーマ名。空白区切りで複数指定可能。
-
[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
として、実行された様々なチェックがBlocking
、Warning
、Informational
、Passing
に分類されて記載され、各チェックごとにそのチェックの説明や結果の影響、対応策が記載されます。
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バケットおよびバケット内のすべてのオブジェクト
- アクション:
{
"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へアクセスできるように連携します。
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 ~]$
インポートが完了しました。
まとめ
AWS RDS for Oracle を Oracle Autonomous Database(ATP)に移行する際の事前チェック、Data Pumpを使用した移行を検証しました。
ご参考になれば幸いです。