MVIEW (Materialized View) と Data Pump の組み合わせで小ネタ。
移行時に、「MVIEW は移行先で作成すればいいや」ってことで適当なオブジェクトを作って Pump の exclude の動作確認をしてみました。
$ expdp g/g schemas=g exclude=MATERIALIZED_VIEW directory=tmp; ... Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Processing object type SCHEMA_EXPORT/STATISTICS/MARKER 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/COMMENT Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT . . exported "G"."MV_TEST1" 118.3 KB 1000 rows . . exported "G"."TEST1" 118.3 KB 1000 rows Master table "G"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
?
なんかエクスポートしてる???
いや、確かに MATERIALIZED_VIEW は処理されてないみたいだけどさ。
そもそも、MVIEW の構成要素ってなんだっけ?って思って、obj(user_objects) を見てみると。
SQL> col object_name for a15 SQL> col object_type for a20 SQL> select object_name,object_type from obj; OBJECT_NAME OBJECT_TYPE --------------- -------------------- TEST1 TABLE MV_TEST1 TABLE MV_TEST1 MATERIALIZED VIEW
Table と、Materialized View で同じ名前のオブジェクトが作成されている!
で、Data Pump で、Materialized View を exclude しても、表は export される???
・・・なんて、使い勝手の悪い。
仕方がないので、TABLE の名称指定で、表を除外してあげました。
$ expdp g/g schemas=g exclude=MATERIALIZED_VIEW,TABLE:\"IN \(\'MV_TEST1\'\)\" directory=tmp; ... Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Processing object type SCHEMA_EXPORT/STATISTICS/MARKER 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/COMMENT Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT . . exported "G"."TEST1" 118.3 KB 1000 rows Master table "G"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded ...
ちなみにこれ、エスケープしてあげないといけないので、PARAFILE を使うと楽です。
こんな感じ
expdp g/g schemas=g PARFILE=/tmp/pfile.txt directory=tmp;
パラメータファイルはこんなん。
-- /tmp/pfile.txt exclude=MATERIALIZED_VIEW,TABLE:"IN ('MTAB')"