データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

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 Database 12cのData Pump拡張機能を活用する:第1部

本記事の例では、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ユーティリティ』本リリースでの変更点

ご意見やご質問があれば、フィードバックタブからお気軽にお寄せください。

  1. オンプレミスのOracleデータベースのRMANバックアップをOCI Object Storageに構成する方法

    クラウドストレージは、容易なアクセシビリティ、高い冗長性とレプリケーション機能、コスト削減につながる多彩なストレージ階層など、多くのメリットを持つことから、近年広く利用されています。こうした利点を活かして、Oracle® Databaseのバックアップをクラウドストレージに保管できます。さらに、オフサイトにバックアップコピーを保持できることも、Oracleデータベースのバックアップをクラウドストレージに取得する大きな理由の一つです。 概要 Oracle Recovery Manager(RMAN)によるバックアップは、Cloud Object Storageに直接保存するよう構成できます。本記

  2. Excelでデータベースを作成する方法【初心者向け・かんたん7ステップ】

    Excelを使って手軽にデータベースを作りたいと思ったことはありませんか?本記事では、たった7つのステップでExcelにデータベースを作成する方法を、初心者の方にもわかりやすく解説します。Microsoft Accessは高機能なデータベースソフトですが、操作が複雑でとっつきにくいと感じる方も多いはず。そんなときこそ、普段使い慣れたExcelが最適な選択肢になります。それでは、具体的な手順を学んでいきましょう。まずは、以下の練習用ワークブックをダウンロードしてください。記事の内容がより理解しやすくなります。Excelでデータベースを作成する7つのステップExcelブックを正しく設計すれば、それ