目次
はじめに
みなさん、こんにちは。
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で使用できる手法は限られています。
Datapump はStandard Editionでも使用できる標準機能となっていますので、Standard Editionを採用されているお客様でも問題なく使用可能です。
※一部の圧縮機能などはEnterprise Edition機能です。
また、Oracle Database 12cからはマルチテナント・アーキテクチャが導入され、プラガブルデータベース(PDB)が使用できるようになりました。
PDBは様々な移行方法が用意されており、それに伴いデータ移行も敷居が低くなりましたが、Oracle Database 11g以前にはPDBは存在しません。
そのため、11g以前から移行を行う場合には、Datapumpがよく使用されています。
検証内容
今回検証した内容はこちらです。
- 11g環境でのexpdpの実行
- OCIでのオブジェクトストレージの作成及びDUMPファイルのアップロード
- OCI上のクラウドサーバーへのDUMPファイルのダウンロード
- 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をご検討の際は弊社までお問い合わせください。
お問い合わせはこちら