Oracle Database 12cでのData Pump拡張機能の活用:パート2 ― PDBのエクスポートと制限事項
TriCoreによる初版公開:2017年6月6日
Oracle® Data Pump(expdp/impdp)は、データベースオブジェクトをデータベース内外でエクスポート・インポートするためのユーティリティです。本連載のパート1では、Oracle Database 12cで導入されたマルチテナントアーキテクチャの概要と、Data Pumpを使ったデータのエクスポート・インポート方法を解説しました。パート2となる本記事では、プラガブルデータベース(PDB)のみを対象としたエクスポートの実施方法と、Data PumpがPDBに課す制限事項について詳しく見ていきます。
PDBのエクスポート方法
コンテナデータベース(CDB)環境では、実際のデータは基盤となる各PDBに属しており、クライアントから見ると各PDBは非CDB(従来型の標準的なOracleデータベース)と同様に振る舞います。そのため、エクスポート対象のオブジェクトはPDBから取得するのが自然なアプローチとなります。

画像出典:Data Pumpアーキテクチャ
PDBに対するData Pumpエクスポートの操作は、非CDBデータベースの場合とほぼ同じです。唯一異なる点は、エクスポートを開始する際のコマンドプロンプトで、接続識別子(コネクト識別子)またはTNS(Transparent Network Substrate)エイリアスを指定する必要があることです。このステップにより、特定のPDBを対象にしたData Pumpエクスポートであることが保証されます。
例として、PRODPDB1という名前のPDBに属するユーザーABBASのスキーマをエクスポートするには、次のコマンドを使用します。
[oracle@labserver ~]$ expdp directory=DP_PDB1 dumpfile=pdb1_abbas.dmp logfile=pdb1_abbas.log schemas=abbas
このコマンドを実行すると、以下のような出力が得られます。
Export: Release 12.1.0.1.0 - Production on Fri Mar 27 00:08:09 2015
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
Username: sys@prodpdb1 as sysdba
Password:
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
Starting "SYS"."SYS_EXPORT_SCHEMA_01": sys/********@prodpdb1 AS SYSDBA directory=DP_PDB1 dumpfile=pdb1_abbas.dmp logfile=pdb1_abbas.log schemas=abbas
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
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 "ABBAS"."TAB1" 67.85 KB 41 rows
Master table "SYS"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_SCHEMA_01 is:
/backup/exp/prodpdb1/pdb1_abbas.dmp
Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Thu Mar 26 14:39:44 2015 elapsed 0 00:01:08
注目すべき点として、ユーザー名を入力する際に、PRODPDB1というPDBへの接続識別子も併せて指定しています。
[oracle@labserver ~]$ expdp directory=DP_PDB1 dumpfile=pdb1_abbas.dmp logfile=pdb1_abbas.log schemas=abbas
Export: Release 12.1.0.1.0 - Production on Fri Mar 27 00:08:09 2015
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
Username: sys@prodpdb1 as sysdba
Password:
次のコマンド出力は、接続識別子prodpdb1がPDB「PRODPDB1」に正しく解決されていることを示しています。
[oracle@labserver ~]$ tnsping prodpdb1
TNS Ping Utility for Linux: Version 12.1.0.1.0 - Production on 27-MAR-2015 00:11:54
Copyright (c) 1997, 2013, Oracle. All rights reserved.
Used parameter files:
/app/oracle/db/12.1.0.1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = labserver.home.com)(PORT = 1525)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = prodpdb1)))
OK (10 msec)
PDBに対するData Pumpの制限事項
重要な注意点として、Data Pumpでは、ルートコンテナ(CDB)が所有するディレクトリオブジェクトをエクスポート・インポートに使用することはできません。また、他のPDBが所有するディレクトリも利用できません。
代わりに、対象のPDB配下にディレクトリを作成する必要があります。Data Pumpのエクスポート・インポート機能を使用するには、そのディレクトリをPDB自身が所有していなければなりません。
もし他のPDBまたはルートコンテナに属するディレクトリを使おうとすると、コマンドは以下のようなエラーを返します。
[oracle@labserver ~]$ expdp directory=DP_PDB2 dumpfile=pdb1_abbas.dmp logfile=pdb1_abbas.log schemas=abbas
Export: Release 12.1.0.1.0 - Production on Fri Mar 27 00:21:08 2015
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
Username: sys@prodpdb1 as sysdba
Password:
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
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-39087: directory name DP_PDB2 is invalid
さらに、デフォルトディレクトリDATA_PUMP_DIRを使ってPDBのエクスポートやインポートを行うこともできません。これは、DATA_PUMP_DIRが常にルートコンテナによって所有されており、その所有権を変更できないためです。
PDB内でデフォルトのDATA_PUMP_DIRを作成しようとすると、次のようなエラーが発生します。
sys@PRODPDB1> show con_name
CON_NAME
------------------------------
PRODPDB1
sys@PRODPDB1> create or replace directory DATA_PUMP_DIR as '/backup/exp/prodpdb1';
create or replace directory DATA_PUMP_DIR as '/backup/exp/prodpdb1'
*
ERROR at line 1:
ORA-65040: operation not allowed from within a pluggable database
このように、Data Pumpでエクスポートやインポートを実行する際は、必ず対象のPDB内で明示的にディレクトリを作成する必要があります。
まとめ
Data Pumpは、Oracle 10gで導入された強化版のエクスポート・インポートツールです。本連載のパート1およびパート2で解説したOracle Database 12cにおけるexpdpの拡張機能を活用することで、このユーティリティの能力を最大限に引き出すことができます。
ご意見やご質問がある場合は、フィードバックタブからお気軽にお寄せください。
参考文献
本記事の執筆にあたっては、以下のドキュメントを参考にしました。
- Changes in This Release for Oracle Database Utilities(Oracle Databaseユーティリティの本リリースでの変更点)
-
Oracle Databaseで統計情報を復元する方法|DBMS_STATSパッケージの活用手順
本記事では、Oracle® Databaseにおいて統計情報をいつ、どのように復元すればよいのかについて解説します。 はじめに データベース管理者(DBA)ならば、最新の統計情報を収集したところ、かえってオプティマイザが非効率な実行計画を選択してしまう――そんな経験をしたことがある方も多いのではないでしょうか。そのような場合には、パフォーマンスが良好だった時点の統計情報へ復元することを検討するとよいでしょう。 ただし、Oracle Databaseのバージョンによって、統計情報の扱い方には微妙な違いがあります。 Oracle 10gからは、統計情報が自動的に保存されるようになり、容易に復元で
-
Excelでデータベースを作成する方法【初心者向け・かんたん7ステップ】
Excelを使って手軽にデータベースを作りたいと思ったことはありませんか?本記事では、たった7つのステップでExcelにデータベースを作成する方法を、初心者の方にもわかりやすく解説します。Microsoft Accessは高機能なデータベースソフトですが、操作が複雑でとっつきにくいと感じる方も多いはず。そんなときこそ、普段使い慣れたExcelが最適な選択肢になります。それでは、具体的な手順を学んでいきましょう。まずは、以下の練習用ワークブックをダウンロードしてください。記事の内容がより理解しやすくなります。Excelでデータベースを作成する7つのステップExcelブックを正しく設計すれば、それ