Oracle の export/import について以下の質問を受けた。
full=yでExportした後に、特定のスキーマの全オブジェクトをImportで戻す場合、戻らないオブジェクトって何かありますか?
ないと思います。
シーケンスオブジェクトも、元を消しとけばExport時の状態に戻るよね?
戻ると思います。
Viewは戻らない。なぜならデータではなく、DDLが記憶されていて流れるから。(これほんと??)
戻ると思います。
OTN のマニュアル(オリジナルのエクスポートおよびインポート) を読む限り、上記の回答であっている。実際に検証してみたが、やはりあっていた。
検証
- 検証環境
$ uname -a Linux centos51 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST 2009 i686 i686 i386 GNU/Linux $ echo 'select * from v$version;' |sqlplus / as sysdba ... BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod PL/SQL Release 10.2.0.4.0 - Production CORE 10.2.0.4.0 Production TNS for Linux: Version 10.2.0.4.0 - Production NLSRTL Version 10.2.0.4.0 - Production
- オブジェクトを作成する。
$ sqlplus scott/tiger SQL> select table_name from user_tables; no rows selected SQL> create sequence seq1 start with 1 increment by 1 maxvalue 500 minvalue 1 cycle; SQL> create table t1 (id number(4)); SQL> create table t2 (id number(4)); SQL> create view v1 as select 't1' table_name, count(1) row_count from t1 union select 't2' table_name, count(1) row_count from t2;
- データを投入する。
SQL> begin for i in 1..100 loop insert into t1 (id) values(seq1.nextval); insert into t2 (id) values(seq1.nextval); end loop; end; / SQL> commit;
- 投入したデータが入っていることを確認する。
SQL> col table_name for a10 SQL> select * from v1; TABLE_NAME ROW_COUNT ---------- ---------- t1 100 t2 100 SQL> select sequence_name, last_number from user_sequences; SEQUENCE_NAME LAST_NUMBER ------------------------------ ----------- SEQ1 201
- export する。
$ export NLS_LANG=American_America.JA16EUC $ exp system/manager file=scott.dmp owner=scott
- 全てのオブジェクトを削除する。
$ sqlplus scott/tiger SQL> drop view v1; SQL> drop table t1 purge; SQL> drop table t2 purge; SQL> drop sequence seq1; SQL> col object_name for a11 SQL> select object_name from user_objects; no rows selected
- import する。
$ export NLS_LANG=American_America.JA16EUC $ imp system/manager file=scott.dmp fromuser=scott touser=scott
- 全てのオブジェクトとそのデータが import されていることを確認する。
$ sqlplus scott/tiger SQL> col object_name for a11 SQL> select object_name from user_objects; OBJECT_NAME ----------- SEQ1 T1 T2 V1 SQL> col table_name for a10 SQL> select * from v1; TABLE_NAME ROW_COUNT ---------- ---------- t1 100 t2 100 SQL> select sequence_name, last_number from user_sequences; SEQUENCE_NAME LAST_NUMBER ------------------------------ ----------- SEQ1 201
補足
import を実行すると、内部的にはSQL(DDLやDML)が実行されていると思う。imp コマンドで show=y オプションをつけるとDDL が表示されるし、dump ファイルを strings でみると、DDL や DML が見える。import を実行したら、たぶんサーバプロセスが生成されるのでそいつのトレースをとれば何やってるかわかると思う。今回はトレースの取得まではしていない。
- imp コマンドで show=y オプションをつける
$ imp system/manager file=scott.dmp fromuser=scott touser=scott show=y Import: Release 10.2.0.4.0 - Production on Wed Jan 13 14:13:01 2010 Copyright (c) 1982, 2007, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options Export file created by EXPORT:V10.02.01 via conventional path import done in JA16EUC character set and AL16UTF16 NCHAR character set . importing SCOTT's objects into SCOTT "BEGIN " "sys.dbms_logrep_imp.instantiate_schema(schema_name=>SYS_CONTEXT('USERENV','" "CURRENT_SCHEMA'), export_db_name=>'ORCL', inst_scn=>'261305');" "COMMIT; END;" "ALTER SESSION SET CURRENT_SCHEMA= "SCOTT"" "CREATE SEQUENCE "SEQ1" MINVALUE 1 MAXVALUE 500 INCREMENT BY 1 START WITH 20" "1 CACHE 20 NOORDER CYCLE" "CREATE TABLE "T1" ("ID" NUMBER(4, 0)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAX" "TRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL D" "EFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS" . . skipping table "T1" "ALTER SESSION SET CURRENT_SCHEMA= "SCOTT"" "CREATE TABLE "T2" ("ID" NUMBER(4, 0)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAX" "TRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL D" "EFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS" . . skipping table "T2" "ALTER SESSION SET CURRENT_SCHEMA= "SCOTT"" "CREATE FORCE VIEW "SCOTT"."V1" ("TABLE_NAME","ROW" "_COUNT") AS " "select 't1' table_name, count(1) row_count from t1" " union" " select 't2' table_name, count(1) row_count from t2" Import terminated successfully without warnings.
- strings コマンドで dump の中身をのぞいてみる。
$ strings scott.dmp >EXPORT:V10.02.01 DSYSTEM RUSERS 8192 Wed Jan 13 14:5:28 2010scott.dmp #C## #C## +09:00 BYTE UNUSED INTERPRETED DISABLE:ALL METRICSU CONNECT SCOTT METRICSUpre-schema procedural objects and actions PROCACTION BEGIN sys.dbms_logrep_imp.instantiate_schema(schema_name=>SYS_CONTEXT('USERENV','CURRENT_SCHEMA'), export_db_name=>'ORCL', inst_scn=>'261305'); COMMIT; END; METRICEU 11 METRICSUforeign function library names for user METRICEU 11 METRICSUPUBLIC type synonyms METRICEU 11 METRICSUprivate type synonyms METRICEU 11 METRICSUobject type definitions for user METRICEU 11 METRICSUpre-schema procedural objects and actions METRICEU 11 METRICSUdatabase links METRICEU 11 METRICSUsequence numbers CREATE SEQUENCE "SEQ1" MINVALUE 1 MAXVALUE 500 INCREMENT BY 1 START WITH 201 CACHE 20 NOORDER CYCLE METRICEU 12 METRICSUcluster definitions METRICEU 12 METRICSUXDB Schemas by user METRICEU 12 TABLE "T1" CREATE TABLE "T1" ("ID" NUMBER(4, 0)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS INSERT INTO "T1" ("ID") VALUES (:1) TABLE "T2" CREATE TABLE "T2" ("ID" NUMBER(4, 0)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS INSERT INTO "T2" ("ID") VALUES (:1) ENDTABLE METRICSUsynonyms METRICEU 100 METRICSUviews CREATE VIEW "V1" ("TABLE_NAME","ROW_COUNT") AS select 't1' table_name, count(1) row_count from t1 union select 't2' table_name, count(1) row_count from t2 METRICEU 101 METRICSUstored procedures METRICEU 101 METRICSUoperators METRICEU 101 METRICSUAnalyze cluster statements METRICEU 101 METRICSUreferential integrity constraints METRICEU 101 METRICSUtriggers METRICEU 101 METRICSUindextypes METRICEU 101 METRICSUbitmap, functional and extensible indexes METRICEU 101 METRICSUposttables actions METRICEU 101 METRICSUmaterialized views METRICEU 101 METRICSUsnapshot logs METRICEU 101 METRICSUjob queues METRICEU 101 METRICSUrefresh groups and children METRICEU 101 METRICSUdimensions METRICEU 101 METRICSUPost-inst procedural actions METRICEU 101 METRICSUpost-schema procedural objects and actions METRICEU 112 METRICSUstatistics METRICEU 112 METRICEUG0 EXIT EXIT