Oracle Database 12cのData Pump拡張機能を活用する:第1部
本記事は、TriCoreが2017年6月6日に公開した記事をもとに再構成したものです。
Oracle® Data Pump(expdp、impdp)は、データベースオブジェクトをデータベース内外へエクスポート/インポートするための標準的なユーティリティです。多くのデータベース管理者が日常的に利用しているツールですが、Oracle Database 12cでサポートされたマルチテナント・アーキテクチャの登場により、Data Pumpによるデータのエクスポート/インポートの挙動に重要な変化が生じました。
はじめに
この全2回のシリーズでは、Oracle Data Pump Export(expdp)の変更点と、それを活用してデータベース・アーキテクチャの各コンポーネントをエクスポートする具体的な方法を解説します。

本記事の例では、Oracleのメタデータを保持するコンテナ・データベース(CDB)と、実際の業務データを保持する1つ以上のプラガブル・データベース(PDB)を前提としたエクスポート操作を取り上げます。
PDBおよびCDBの詳細については、公式ドキュメント「マルチテナント・アーキテクチャの概要」を参照してください。
データベース全体のエクスポート(フル・エクスポート)
データベースのフル・エクスポートには、必要なデータがすべて含まれるとは限りません。たとえば、ルート・コンテナ(CDB)に接続してfullオプションを指定すれば、そのCDBに属するすべてのPDBもまとめてエクスポートされると思いがちです。しかし、実際にはそうなりません。ルート・コンテナから実行したフル・エクスポートの対象となるのは、ルート・コンテナ自体に属するオブジェクトのみであり、PDB内のオブジェクトは含まれません。
例として、4つのPDBが関連付けられた「PRODCDB」というCDBを考えてみます。次のコマンドで、これらのデータベースの状態を確認できます。
sys@PRODCDB> select name,open_mode,con_id from v$pdbs;
実行結果は以下の通りです。
NAME OPEN_MODE CON_ID
------------------------------ ---------- ----------
PDB$SEED READ ONLY 2
PRODPDB1 READ WRITE 3
PRODPDB2 READ WRITE 4
PRODPDB3 READ WRITE 5
PRODPDB4 READ WRITE 6
この状態でフル・エクスポートを実行すると、EXPDPが処理するのはルート・コンテナに属するオブジェクトだけであり、各プラガブル・データベースのオブジェクトは対象外になります。
エクスポートを実行するコマンドは以下の通りです。
[oracle@labserver ~]$ expdp directory=DPUMP dumpfile=exp_cdb_full_%U.dmp logfile=exp_cdb_full.log full=Y parallel=4
実行ログの主要部分は次のようになります(途中の中間出力は省略しています)。
Export: Release 12.1.0.1.0 - Production on Thu Mar 26 23:10:41 2015
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
Username: / as sysdba
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options
WARNING: Oracle Data Pump operations are not typically needed when connected to the root or seed of a container database.
Starting "SYS"."SYS_EXPORT_FULL_01": /******** AS SYSDBA directory=DPUMP dumpfile=exp_cdb_full_%U.dmp logfile=exp_cdb_full.log full=Y parallel=4
Estimate in progress using BLOCKS method...
Processing object type DATABASE_EXPORT/EARLY_OPTIONS/VIEWS_AS_TABLES/TABLE_DATA
Processing object type DATABASE_EXPORT/NORMAL_OPTIONS/TABLE_DATA
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 90.70 MB
(中略:ルート・コンテナに属するシステムスキーマのオブジェクトが順次処理される)
. . exported "C##ABBAS"."T" 72.67 MB 667728 rows
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type DATABASE_EXPORT/AUDIT
Master table "SYS"."SYS_EXPORT_FULL_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_FULL_01 is:
/backup/exp/prodcdb/exp_cdb_full_01.dmp
/backup/exp/prodcdb/exp_cdb_full_02.dmp
/backup/exp/prodcdb/exp_cdb_full_03.dmp
Job "SYS"."SYS_EXPORT_FULL_01" successfully completed at Thu Mar 26 13:49:26 2015 elapsed 0 00:08:34
この出力からわかるように、fullオプションを指定しても、エクスポートされるのはルート・コンテナに属するオブジェクトだけです。残念ながら、すべてのPDBとルート・コンテナを1回のコマンドでまとめてエクスポートする方法は用意されていません。
CDBのエクスポート
CDB(ルート・データベース)のエクスポートが必要になるケースは多くありません。CDBの主な役割はPDBをホストすることだからです。それでもこの作業が必要になった場合は、一般的には新しいCDBを作成し、既存のPDBをそこへプラグインし直すことになります。こうした場面で管理者が最も関心を持つのは、共通ユーザー(common user)や共通ロールの情報でしょう。
たとえば、CDBに次のような共通ユーザーが存在するとします。
sys@PRODCDB> select USERNAME, COMMON from dba_users where common='YES' and oracle_maintained='N';
USERNAME COM
--------------- ---
C##ABBAS YES
CDBに属する共通ユーザーや共通ロールをエクスポートするには、次のようにschemasパラメータを指定してEXPDPを実行します。
[oracle@labserver ~]$ expdp directory=DATA_PUMP_DIR dumpfile=common_usr_cdb.dmp logfile=common_usr_cdb.log schemas=C##ABBAS
このコマンドの出力は以下の通りです。
Export: Release 12.1.0.1.0 - Production on Thu Mar 26 23:45:26 2015
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
Username: / as sysdba
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options
WARNING: Oracle Data Pump operations are not typically needed when connected to the root or seed of a container database.
Starting "SYS"."SYS_EXPORT_SCHEMA_01": /******** AS SYSDBA directory=DATA_PUMP_DIR dumpfile=common_usr_cdb.dmp logfile=common_usr_cdb.log schemas=C##ABBAS
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 88 MB
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/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
. . exported "C##ABBAS"."T" 72.67 MB 667728 rows
Master table "SYS"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_SCHEMA_01 is:
/backup/exp/prodcdb/common_usr_cdb.dmp
Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Thu Mar 26 14:16:53 2015 elapsed 0 00:01:16
理想的には、ルート・コンテナに共通ユーザーのデータが明示的に格納されている場合を除き、ルート・コンテナのオブジェクトをエクスポートする必要はありません。
まとめ
本記事で紹介した手順を踏めば、Data Pump 12cの新機能を正しく理解し、マルチテナント環境でも目的に応じたエクスポートを効率的に行えるようになります。第2部では、PDBに対するData Pumpの制限事項と、PDBを個別にエクスポートする具体的な方法について詳しく解説します。
参考文献
本記事の執筆にあたり、以下のドキュメントを参考にしました。
- 『Oracle Databaseユーティリティ』本リリースでの変更点
ご意見やご質問があれば、フィードバックタブからお気軽にお寄せください。
-
オンプレミスのOracleデータベースのRMANバックアップをOCI Object Storageに構成する方法
クラウドストレージは、容易なアクセシビリティ、高い冗長性とレプリケーション機能、コスト削減につながる多彩なストレージ階層など、多くのメリットを持つことから、近年広く利用されています。こうした利点を活かして、Oracle® Databaseのバックアップをクラウドストレージに保管できます。さらに、オフサイトにバックアップコピーを保持できることも、Oracleデータベースのバックアップをクラウドストレージに取得する大きな理由の一つです。 概要 Oracle Recovery Manager(RMAN)によるバックアップは、Cloud Object Storageに直接保存するよう構成できます。本記
-
Excelでデータベースを作成する方法【初心者向け・かんたん7ステップ】
Excelを使って手軽にデータベースを作りたいと思ったことはありませんか?本記事では、たった7つのステップでExcelにデータベースを作成する方法を、初心者の方にもわかりやすく解説します。Microsoft Accessは高機能なデータベースソフトですが、操作が複雑でとっつきにくいと感じる方も多いはず。そんなときこそ、普段使い慣れたExcelが最適な選択肢になります。それでは、具体的な手順を学んでいきましょう。まずは、以下の練習用ワークブックをダウンロードしてください。記事の内容がより理解しやすくなります。Excelでデータベースを作成する7つのステップExcelブックを正しく設計すれば、それ