はじめに

みなさん、こんにちは。
Oracle Cloud Infrastructure検証チームです。

今回は、オンプレミス環境からOracle Cloud Infrastructure(OCI)へ移行を考えている方に向けて、 Datapump を利用した移行を検証してみましたので、ご紹介したいと思います。

オンプレミス環境同士で行うデータ移行とどのように異なるのかの参考になれば嬉しいです。

 Datapump とは

Datapump とは、Oracle Databaseの論理バックアップ・リストアツールです。

Database全体やスキーマ単位、テーブル単位などでのリストアが可能です。

コマンドとしてはexpdp/impdpを使用します。
expdpコマンドで論理バックアップをdumpファイルとしてリストアし、impdpコマンドでdumpファイルを取りこみます。

Oracle databaseのサーバリプレースに伴うバージョンアップでデータ移行をする際に、使いやすいツールとなっています。

想定される移行ケース

Datapump を使用して移行を行うケースは大体以下のような場合になります。

ダウンタイムに余裕がある

土曜日と日曜日の2日間で移行が行える場合や、年末年始やゴールデンウイークなどの長期休暇間に移行を行う場合です。

Datapumpデータをエクスポート・インポートするのにデータの量だけ時間がかかるため、ダウンタイムに比較的余裕がある場合に採用されます。

移行元のOracle Databaseのバージョンが比較的古く(11g以前など)、Standard Editionを採用している

Oracle Databaseは様々なデータ移行手段を提供していますが、Standard Editionで使用できる手法は限られています。

DatapumpStandard Editionでも使用できる標準機能となっていますので、Standard Editionを採用されているお客様でも問題なく使用可能です。
※一部の圧縮機能などはEnterprise Edition機能です。

また、Oracle Database 12cからはマルチテナント・アーキテクチャが導入され、プラガブルデータベース(PDB)が使用できるようになりました。

PDBは様々な移行方法が用意されており、それに伴いデータ移行も敷居が低くなりましたが、Oracle Database 11g以前にはPDBは存在しません。

そのため、11g以前から移行を行う場合には、Datapumpがよく使用されています。

検証内容

今回検証した内容はこちらです。

  1. 11g環境でのexpdpの実行
  2. OCIでのオブジェクトストレージの作成及びDUMPファイルのアップロード
  3. OCI上のクラウドサーバーへのDUMPファイルのダウンロード
  4. OCI上のクラウドサーバー上の19c環境へのimpdpの実行

1.11g環境でのexpdpの実行

Oracle Database 11g環境にて、expdpコマンドを使用してdumpファイルを作成します。

まずは、dumpファイルの出力先を確認します。

$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on 水 6月 14 16:52:34 2023

Copyright (c) 1982, 2013, Oracle. All rights reserved.


Oracle Database 11g Release 11.2.0.4.0 - 64bit Production
に接続されました。
SQL> SELECT * FROM DBA_DIRECTORIES;

OWNER DIRECTORY_NAME         DIRECTORY_PATH
----- ---------------------- --------------------------------------------------------------------
SYS   XMLDIR                 /opt/app/oracle/product/11.2.0.4/dbhome_1/rdbms/xml
SYS   ORACLE_OCM_CONFIG_DIR  /opt/app/oracle/product/11.2.0.4/dbhome_1/ccr/hosts/export_11g/state
SYS   DATA_PUMP_DIR      /opt/app /oracle/admin/orcl/dpdump/                                           ←今回使用するディレクトリオブジェクト
SYS   ORACLE_OCM_CONFIG_DIR2 /opt/app/oracle/product/11.2.0.4/dbhome_1/ccr/state

今回はDATA_PUMP_DIRをdumpファイルの出力先として利用します。

今回は、SCOTTスキーマを移行します。
SCOTTスキーマで移行を行うために、DATA_PUMP_DIRに対する読み書き権限を付与します。

SQL> GRANT READ,WRITE ON DIRECTORY DATA_PUMP_DIR TO SCOTT;

権限付与が成功しました。

権限の付与が済んだら、expdpをSCOTTスキーマで実施します。
dumpファイル名は11g_scott.dmpとします。

今回はSCOTTスキーマだけを移行するため、オプションとしてschemas=scottとしています。

また、統計情報については今回は移行の対象外とするためにオプションとしてexclude=statisticsを設定しています。

$ expdp scott/tiger directory=DATA_PUMP_DIR dumpfile=11g_scott.dmp logfile=11g_scott.log schemas=scott exclude=statistics

Export: Release 11.2.0.4.0 - Production on 水 6月 14 16:56:26 2023

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

接続先: Oracle Database 11g Release 11.2.0.4.0 - 64bit Production
"SCOTT"."SYS_EXPORT_SCHEMA_01"を起動しています: scott/******** directory=DATA_PUMP_DIR dumpfile=11g_scott.dmp logfile=11g_scott.log schemas=scott exclude=statistics 
BLOCKSメソッドを使用して見積り中です...
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
BLOCKSメソッドを使用した見積り合計: 192 KB
オブジェクト型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMAの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/COMMENTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/INDEXの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINTの処理中です
. . "SCOTT"."DEPT" 5.929 KB 4行がエクスポートされました
. . "SCOTT"."EMP" 8.484 KB 12行がエクスポートされました
. . "SCOTT"."SALGRADE" 5.859 KB 5行がエクスポートされました
. . "SCOTT"."BONUS" 0 KB 0行がエクスポートされました
マスター表"SCOTT"."SYS_EXPORT_SCHEMA_01"は正常にロード/アンロードされました
******************************************************************************
SCOTT.SYS_EXPORT_SCHEMA_01に設定されたダンプ・ファイルは次のとおりです:
/opt/app/oracle/admin/orcl/dpdump/11g_scott.dmp
ジョブ"SCOTT"."SYS_EXPORT_SCHEMA_01"が水 6月 14 16:56:47 2023 elapsed 0 00:00:20で正常に完了しました

無事正常にexpdpコマンドが完了しましたね。

実際にOS上に出力されていることを確認しましょう。

$ cd /opt/app/oracle/admin/orcl/dpdump/
$ ls -l
合計 244
-rw-r----- 1 oracle oinstall 241664 6月 14 16:56 11g_scott.dmp
-rw-r----- 1 oracle oinstall 1885 6月 14 16:56 11g_scott.log
-rw-r----- 1 oracle oinstall 118 6月 14 16:23 dp.log

dumpファイルとして11g_scott.dmpファイルがきちんと出力されていますね。

このファイルを、OCI上の環境へ転送してあげましょう。

2.OCIでのオブジェクトストレージの作成及びDUMPファイルのアップロード

dumpファイルのOCI環境への転送ですが、様々な方法があります。

今回は、オブジェクトストレージを使用して、ブラウザ上でdumpファイルをアップロードしてみます。

オブジェクトストレージについては以下の記事で紹介していますので、是非ご覧ください。
OCI オブジェクト・ストレージとは

オブジェクトストレージを作成します。
「バケットの作成」をクリックします。

今回はバケット名として、「dumpfile」を設定します。

その他の設定はデフォルトで作成します。

無事作成することが出来ました。

このdumpfileバケット上に、dumpファイルをアップロードしていきます。

「オブジェクト」の項目から「アップロード」を選択します。

選択すると、オブジェクトのアップロード画面が出てきます。

「コンピュータからファイルを選択」の項目にて、dumpファイルをアップロードしてみます。

ファイルの選択が完了したら、画面下部の「アップロード」を選択します。

すると、無事に「11g_scott.dmp」ファイルをアップロードすることが出来ました。

3.OCI上のクラウドサーバーへのDUMPファイルのダウンロード

アップロードしたdumpファイルを、OCI上のコンピュートインスタンスへとダウンロードしていきます。
今回はOCI CLIを使用して、コマンドライン上でオブジェクトストレージへのアクセスをしていきます。

まずは、オブジェクトストレージの中身を確認してみます。

$ oci os object list --namespace <namespace> --bucket-name dumpfile
{
"data": [
{
"archival-state": null,
"etag": "c8a73122-9fc0-4eca-bde0-6de11fcee004",
"md5": "N0qW8Ex1//6sSdhlsmx74w==",
"name": "11g_scott.dmp",                            ←アップロードしたdumpファイルが確認出来ます。
"size": 241664,
"storage-tier": "Standard",
"time-created": "2023-06-15T04:47:57.271000+00:00",
"time-modified": "2023-06-15T04:47:57.271000+00:00"
}
],
"prefixes": []
}

オブジェクトストレージ上にdumpファイルがきちんとアップロードされていることが確認出来ました。

では、このdumpファイルをOCI環境へダウンロードしていきます。

$ cd /tmp/dumpfile
$ oci os object get --namespace <namespace> --bucket-name dumpfile --name 11g_scott.dmp --file /tmp/dump/11g_scott.dmp ←ダウンロードコマンド
$ ls -l
total 236
-rw-r--r-- 1 oracle oinstall 241664 Jun 15 05:03 11g_scott.dmp

実際に/tmp/dumpfileディレクトリ上にdumpファイルをダウンロードすることが出来ました。

OCI CLIを使用することで、アップロードしたファイルをコマンドライン上で容易にダウンロードできましたね

4.OCI上のクラウドサーバー上の19c環境へのimpdpの実行

最後に、dumpファイルを使用してOCI環境上のOracle Database 19c環境にデータ移行していきます。

まずは、dumpファイルのインポートで使用するディレクトリオブジェクトを作成していきます。

$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on 木 6月 15 05:05:38 2023
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.


Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL> CREATE DIRECTORY IMPDIR AS '/tmp/dump';

ディレクトリが作成されました。

SQL> SELECT * FROM DBA_DIRECTORIES;

OWNER DIRECTORY_NAME           DIRECTORY_PATH                                            ORIGIN_CON_ID
----- ------------------------ --------------------------------------------------------- -------------
SYS   IMPDIR                   /tmp/dump                                                 0
SYS   SDO_DIR_WORK                                                                       0
SYS   SDO_DIR_ADMIN            /opt/app/oracle/product/19.3.0/dbhome_1/md/admin          0
SYS   XMLDIR                   /opt/app/oracle/product/19.3.0/dbhome_1/rdbms/xml         0
SYS   XSDDIR                   /opt/app/oracle/product/19.3.0/dbhome_1/rdbms/xml/schema  0
SYS   OPATCH_INST_DIR          /opt/app/oracle/product/19.3.0/dbhome_1/OPatch            0
SYS   ORACLE_OCM_CONFIG_DIR2   /opt/app/oracle/product/19.3.0/dbhome_1/ccr/state         0
SYS   ORACLE_BASE              /opt/app/oracle                                           0
SYS   ORACLE_HOME              /opt/app/oracle/product/19.3.0/dbhome_1                   0
SYS   ORACLE_OCM_CONFIG_DIR    /opt/app/oracle/product/19.3.0/dbhome_1/ccr/state         0
SYS   DATA_PUMP_DIR            /opt/app/oracle/admin/orcl/dpdump/                        0
SYS   OPATCH_SCRIPT_DIR        /opt/app/oracle/product/19.3.0/dbhome_1/QOpatch           0
SYS   OPATCH_LOG_DIR           /opt/app/oracle/product/19.3.0/dbhome_1/rdbms/log         0
SYS   JAVA$JOX$CUJS$DIRECTORY$ /opt/app/oracle/product/19.3.0/dbhome_1/javavm/admin/     0

14行が選択されました。

次に、データのインポートを行うために必要な権限を付与していきます。

SQL> GRANT READ,WRITE ON DIRECTORY IMPDIR TO SYSTEM;

権限付与が成功しました。

SQL> CREATE USER SCOTT IDENTIFIED BY TIGER;

ユーザーが作成されました。

SQL> GRANT UNLIMITED TABLESPACE,CONNECT TO SCOTT;

権限付与が成功しました。

最後に、impdpコマンドでscottスキーマのデータを入れていきます。

$ impdp system/***** directory=IMPDIR dumpfile=11g_scott.dmp logfile=11g_scott_imp.log

Import: Release 19.0.0.0.0 - Production on 木 6月 15 05:16:28 2023
Version 19.3.0.0.0

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

接続先: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
マスター表"SYSTEM"."SYS_IMPORT_FULL_01"は正常にロード/アンロードされました
"SYSTEM"."SYS_IMPORT_FULL_01"を起動しています: system/******** directory=IMPDIR dumpfile=11g_scott.dmp logfile=11g_scott_imp.log 
オブジェクト型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMAの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLEの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/TABLE_DATAの処理中です
. . "SCOTT"."DEPT" 5.929 KB 4行がインポートされました
. . "SCOTT"."EMP" 8.484 KB 12行がインポートされました
. . "SCOTT"."SALGRADE" 5.859 KB 5行がインポートされました
. . "SCOTT"."BONUS" 0 KB 0行がインポートされました
オブジェクト型SCHEMA_EXPORT/TABLE/INDEX/INDEXの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINTの処理中です
オブジェクト型SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINTの処理中です
ジョブ"SYSTEM"."SYS_IMPORT_FULL_01"が木 6月 15 05:16:33 2023 elapsed 0 00:00:04で正常に完了しました

SCOTTスキーマへデータが入っていることを確認していきます。

$ sqlplus scott/tiger

SQL*Plus: Release 19.0.0.0.0 - Production on 木 6月 15 05:16:43 2023
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.


Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
に接続されました。
SQL> show user
ユーザーは"SCOTT"です。
SQL> SELECT OBJECT_NAME,OBJECT_TYPE,STATUS FROM USER_OBJECTS;

OBJECT_NAME OBJECT_TYPE STATUS
----------- ----------- ------
DEPT        TABLE       VALID
EMP         TABLE       VALID
BONUS       TABLE       VALID
SALGRADE    TABLE       VALID
PK_DEPT     INDEX       VALID
PK_EMP      INDEX       VALID

6行が選択されました。

無事にデータの移行が完了していました。
これにて完了です。

さいごに

今回は Datapump によるOCI上への移行検証を紹介いたしました。

オンプレミス環境同士との移行との違いなどがいくつかありますが、基本的なことは変わらないことが伺えましたでしょうか。

最後までご覧いただきありがとうございました!

Oracle Cloudをご検討の際は弊社までお問い合わせください。

お問い合わせはこちら

投稿者プロフィール

技術チーム
技術チーム
DBひとりでできるもんを盛り上げるべく、技術チームが立ち上がり早6年。ひとりでできるもんと言いつつ、技術者が読んでプッとなるような、極めてピンポイントでマニアックな技術ネタを執筆しています!