0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OracleプラグインデータベースのAmazon RDS for Oracleへの移行

Posted at

はじめに

2/16のAWS blogにて Migrate your Oracle pluggable database to Amazon RDS for Oracle が発表されました。
RDS for Oracleもマルチテナント構成(※)がサポートされたのは最近だったので、ついに PDB の Unplug & Plug で移行できるようになったのかな、と思ったのですが残念ながらblogの内容は PDB のスキーマを全てexpdpして、それをRDSへimpdpする、という物でした。
(※)正確にはRDSはCDBとPDBが1:1となるシングルテナント構成のみがサポートされています

とはいえ、このような形の移行も利用される方がいらっしゃるだろうし、blogではS3からのimpdpだったこともあり EFS統合 を利用した方が効率的では?と思ったりしたので、EFSからimpdpで移行する方法を試してみることにしました。

ちなみに、RDS Custom for Oracleは2022年11月に マルチテナント構成がサポートされたため、Unplug & Plugでの移行が可能になると思われます。

RDS for Oracleへの移行

構成の概要

ソースのマルチテナントのデータベースからターゲットとなるRDS for Oracleへデータインポートを行います。
今回は以下のような構成で実施しました。

  • ソース:21c XE (XEPDB1)
  • ターゲット:19c SE2 (TESTDB02)
    なお、RDS for Oracleをマルチテナント構成で作成すると、CDBは固定で RDSCDB となります。また、CDBへのアクセス方法が提供されていないため、特に意識する必要はないと思います。
    image.png

前提条件

元の blog にはいろいろと前提が書いてありますが、結局expdp/impdpで移行するのであまり意識する必要はないと思います。

ソース Oracle データベースからデータをエクスポートする

ソースの21c XEPDB1 に接続して、スキーマを確認します。

XEPDB1 のスキーマ
SQL> SELECT p.PDB_ID, p.PDB_NAME, t.OWNER, t.TABLE_NAME
  2  FROM DBA_PDBS p, CDB_TABLES t
  3  WHERE p.PDB_ID > 2 AND
  4  t.owner not like '%SYS%' and  t.OWNER NOT IN ('ORDDATA','DBSFWUSER',
  5         'CTXSYS',
  6         'RDSADMIN','PUBLIC',
  7         'XDB',
  8         'OUTLN',
  9         'ORACLE_OCM',
 10         'DBSNMP',
 11         'DBUPTIME',
 12         'GSMADMIN_INTERNAL',
 13         'SVCSAMLMSRO',
 14         'REMOTE_SCHEDULER_AGENT','PERFSTAT')
 15  /

    PDB_ID PDB_NAME   OWNER      TABLE_NAME
---------- ---------- ---------- ----------
         3 XEPDB1     SCOTT      DEPT
         3 XEPDB1     SCOTT      EMP
         3 XEPDB1     SCOTT      BONUS
         3 XEPDB1     SCOTT      SALGRADE
         3 XEPDB1     TESTUSR    CTRTBL
         3 XEPDB1     TESTUSR    TEST
         3 XEPDB1     TESTUSR    T1

7行が選択されました。

SCOTTスキーマとTESTUSRスキーマがユーザスキーマになるため、データポンプでエクスポートします。
今回は21cから19cにインポートするので、VERSIONパラメータで19.0.0を指定しておきます。

スキーマのエクスポート
C:¥>expdp '/@xepdb1 as sysdba' directory=TESTDIR dumpfile=21cscott.expdp.dump logfile=TESTDIR:20230217_scott.log job_name=job_expdp1 VERSION=19.0.0 schemas=SCOTT,TESTUSR

Export: Release 21.0.0.0.0 - Production on 金 2月 17 14:09:59 2023
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.

接続先: Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
"SYS"."JOB_EXPDP1"を起動しています: "/********@xepdb1 AS SYSDBA" directory=TESTDIR dumpfile=21cscott.expdp.dump logfile=TESTDIR:20230217_scott.log job_name=job_expdp1 VERSION=19.16.0 schemas=SCOTT,TESTUSR
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
オブジェクト型SCHEMA_EXPORT/STATISTICS/MARKERの処理中です
オブジェクト型SCHEMA_EXPORT/USERの処理中です
オブジェクト型SCHEMA_EXPORT/SYSTEM_GRANTの処理中です
オブジェクト型SCHEMA_EXPORT/ROLE_GRANTの処理中です
オブジェクト型SCHEMA_EXPORT/DEFAULT_ROLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLESPACE_QUOTAの処理中です
オブジェクト型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMAの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINTの処理中です
. . "SCOTT"."EMP"                               8.695 KB      12行がエクスポートされました
. . "SCOTT"."DEPT"                              6.023 KB       4行がエクスポートされました
. . "TESTUSR"."TEST"                            5.976 KB       3行がエクスポートされました
. . "SCOTT"."SALGRADE"                          5.953 KB       5行がエクスポートされました
. . "TESTUSR"."CTRTBL"                          5.523 KB       5行がエクスポートされました
. . "TESTUSR"."T1"                              5.070 KB       4行がエクスポートされました
. . "SCOTT"."BONUS"                                 0 KB       0行がエクスポートされました
マスター表"SYS"."JOB_EXPDP1"は正常にロード/アンロードされました
******************************************************************************
SYS.JOB_EXPDP1に設定されたダンプ・ファイルは次のとおりです:
  I:\EXPDIR\21CSCOTT.EXPDP.DUMP
ジョブ"SYS"."JOB_EXPDP1"が金 2月 17 14:10:50 2023 elapsed 0 00:00:50で正常に完了しました

ターゲット(RDS for Oracle)にデータをインポートする

ターゲットとなる19c SE2 RDS for Oracleについては、予めEFS統合を設定しておきます。
EFS統合については以前の Amazon RDS for Oracle と Amazon Elastic File System (EFS) 統合を試してみた を参照ください。

ターゲットとなるRDS側の情報を確認します、CDBはRDSCDBとなっていることが確認できます。
また、PDB側にユーザスキーマがないことも確認できます。

RDSの事前確認
SQL> select name, created, platform_name, cdb from v$database;

NAME      CREATED   PLATFORM_NAME                      CDB
--------- --------- -------------------------------- - ---
RDSCDB    17-SEP-22 Linux x86 64-bit                   YES

SQL> select pdb_name, status from cdb_pdbs;

PDB_NAME        STATUS
--------------- ----------
TESTDB02        NORMAL

SQL> SELECT p.PDB_ID, p.PDB_NAME, t.OWNER, t.TABLE_NAME
FROM DBA_PDBS p, CDB_TABLES t
WHERE p.PDB_ID > 2 AND
t.owner not like '%SYS%' and  t.OWNER NOT IN ('ORDDATA','DBSFWUSER',
       'CTXSYS',
       'RDSADMIN','PUBLIC',
       'XDB',
       'OUTLN',
       'ORACLE_OCM',
       'DBSNMP',
       'DBUPTIME',
       'GSMADMIN_INTERNAL',
       'SVCSAMLMSRO',
       'REMOTE_SCHEDULER_AGENT','PERFSTAT')
/

no rows selected

ソースデータからエクスポートしたデータを、ターゲットにインポートします。

スキーマのインポート
$ impdp admin/********@testdb02.**********.ap-northeast-1.rds.amazonaws.com:1521/TESTDB02 directory=DPDIR_EFS dumpfile=21CSCOTT.EXPDP.DUMP logfile=20230217_impdp.log

Import: Release 21.0.0.0.0 - Production on Fri Feb 17 06:56:45 2023
Version 21.8.0.0.0

Copyright (c) 1982, 2022, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Master table "ADMIN"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "ADMIN"."SYS_IMPORT_FULL_01":  admin/********@testdb02.**********.ap-northeast-1.rds.amazonaws.com:1521/TESTDB02 directory=DPDIR_EFS dumpfile=21CSCOTT.EXPDP.DUMP logfile=20230217_impdp.log
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_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/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "SCOTT"."EMP"                               8.695 KB      12 rows
. . imported "SCOTT"."DEPT"                              6.023 KB       4 rows
. . imported "TESTUSR"."TEST"                            5.976 KB       3 rows
. . imported "SCOTT"."SALGRADE"                          5.953 KB       5 rows
. . imported "TESTUSR"."CTRTBL"                          5.523 KB       5 rows
. . imported "TESTUSR"."T1"                              5.070 KB       4 rows
. . imported "SCOTT"."BONUS"                                 0 KB       0 rows
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Job "ADMIN"."SYS_IMPORT_FULL_01" successfully completed at Fri Feb 17 15:57:22 2023 elapsed 0 00:00:34

ターゲットでオブジェクトが作成されている事を確認します。

インポート後の確認
SQL> SELECT p.PDB_ID, p.PDB_NAME, t.OWNER, t.TABLE_NAME
FROM DBA_PDBS p, CDB_TABLES t
WHERE p.PDB_ID > 2 AND
t.owner not like '%SYS%' and  t.OWNER NOT IN ('ORDDATA','DBSFWUSER',
       'CTXSYS',
       'RDSADMIN','PUBLIC',
       'XDB',
       'OUTLN',
       'ORACLE_OCM',
       'DBSNMP',
       'DBUPTIME',
       'GSMADMIN_INTERNAL',
       'SVCSAMLMSRO',
       'REMOTE_SCHEDULER_AGENT','PERFSTAT')
/

    PDB_ID PDB_NAME   OWNER      TABLE_NAME
---------- ---------- ---------- ----------
         3 TESTDB02   SCOTT      BONUS
         3 TESTDB02   TESTUSR    TEST
         3 TESTDB02   SCOTT      EMP
         3 TESTDB02   SCOTT      SALGRADE
         3 TESTDB02   TESTUSR    T1
         3 TESTDB02   TESTUSR    CTRTBL
         3 TESTDB02   SCOTT      DEPT

7 rows selected.

まとめ

これでデータの移行は完了となり、ソースのオンプレのPDBのデータがターゲットのRDS for Oracleに移行されました。
手順としては簡単ですが、データ量によってはやはり時間がかかってきますので、利用する際には検証が必要だと思います。

AWSのblogではインポート後にトリガやシーケンスのメンテナンスについて記載されてます。
利用している場合には、メンテナンスを実施しておきましょう。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?