Gblog

おもにTips

MVIEW と Data Pump

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')"