關於資料泵impdp引數驗證(一)
關於資料泵impdp匯入的部分引數的使用驗證,本章驗證的引數包括remap_data、remap_datafile、remap_schema、remap_table、remap_tablespace、reuse_datafile。
1. remap_data
1.建立源表並增加資料
SQL> create table t_source (id number,name varchar2(20));
Table created.
SQL> insert into t_source values (1,'aaa');
1 row created.
SQL> insert into t_source values (2,'bbb');
1 row created.
2.匯出源表
[oracle@ENMOEDU ~]$ expdp \'/ as sysdba\' directory=MY_DIR tables=test.t_source
3.建立包和包體
SQL> create or replace package p_stu
2 as
3 function my_upper(text varchar2) return varchar2;
4 end;
5 /
Package created.
SQL> create or replace package body p_stu as
2 function my_upper(text varchar2) return varchar2 as
3 begin
4 return upper(text);
5 end;
6 end;
7 /
4.驗證remap_data
[oracle@ENMOEDU ~]$ impdp \'/ as sysdba\' directory=MY_DIR remap_data=test.t_source.name:test.p_stu.my_upper table_exists_action=replace
SQL> select * from t_source;
ID NAME
---------- --------------------
1 AAA
2 BBB
說明:資料結果從小寫字母變成大寫字母。remap_data引數的意思是匯入指定表時對欄位內容作修改。格式為:remap_data=使用者名稱.表名.欄位:使用者名稱.包名.方法名
2.remap_datafile
注:修改源資料檔名到目錄資料檔名,並參考源資料檔案中建立表空間,建立資料字典,建立目錄。一般會用在全庫匯出後跨平臺匯入。
1. 全庫匯出:
[oracle@ENMOEDU dmp]$ expdp \'/ as sysdba\' directory=my_dir full=y dumpfile=all.dmp
2. 刪除test使用者和所屬test_space表空間
SQL> drop user test cascade;
User dropped.
SQL> drop tablespace test_space;
Tablespace dropped.
3.手動刪除表空間物理檔案/u01/app/oracle/oradata/enmo/test01.dbf
FILE_ID FILE_NAME
---------- ------------------------------------------------------------
4 /u01/app/oracle/oradata/enmo/users01.dbf
3 /u01/app/oracle/oradata/enmo/undotbs01.dbf
2 /u01/app/oracle/oradata/enmo/sysaux01.dbf
1 /u01/app/oracle/oradata/enmo/system01.dbf
5 /u01/app/oracle/oradata/enmo/test01.dbf
6 /u01/app/oracle/oradata/enmo/bidpro01.dbf
1. 行執全庫匯入,驗證沒有建立test使用者和test_space表空間是否會報錯
1.全庫匯入
impdp \'/ as
sysdba\' directory=my_dir dumpfile=all.dmp full=y
2.匯入完成後使用者和表空間已經自動建立
SQL> select username,default_tablespace from dba_users;
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
SYS SYSTEM
SYSTEM SYSTEM
TEST TEST_SPACE
BIDPRO BIDPRO_SPACE
OUTLN
SYSTEM
3.表空間資料檔案已經自動建立,資料檔案路徑與檔名與源庫一至。
FILE_ID FILE_NAME
---------- ------------------------------------------------------------
4 /u01/app/oracle/oradata/enmo/users01.dbf
3 /u01/app/oracle/oradata/enmo/undotbs01.dbf
2 /u01/app/oracle/oradata/enmo/sysaux01.dbf
1 /u01/app/oracle/oradata/enmo/system01.dbf
5 /u01/app/oracle/oradata/enmo/test01.dbf
6 /u01/app/oracle/oradata/enmo/bidpro01.dbf
說明:非跨平臺時不用指定此remap_datafile引數。全庫匯入會自動建立使用者和表空間,並使用源資料庫資料檔案路徑和資料檔名稱建立表空間。
2. 匯入時使用remap_datafile指定資料檔案路徑和名字
1.刪除test使用者和所屬test_space表空間
SQL> drop user test cascade;
User dropped.
SQL> drop tablespace test_space;
Tablespace
dropped.
2.全庫匯入時使用remap_datafile指定資料檔案
[oracle@ENMOEDU
dmp]$ impdp \'/ as sysdba\' directory=my_dir dumpfile=all.dmp full=y remap_datafile=\"\'/u01/app/oracle/oradata/enmo/test01.dbf\':\'/u01/app/oracle/oradata/enmo
/test_space.dbf\'\"
3.匯入完成後檢視資料檔案狀態
FILE_ID FILE_NAME
---------- ------------------------------------------------------------
4 /u01/app/oracle/oradata/enmo/users01.dbf
3 /u01/app/oracle/oradata/enmo/undotbs01.dbf
2 /u01/app/oracle/oradata/enmo/sysaux01.dbf
1 /u01/app/oracle/oradata/enmo/system01.dbf
5 /u01/app/oracle/oradata/enmo/test_space.dbf
6 /u01/app/oracle/oradata/enmo/bidpro01.dbf
說明:全庫匯入時使用者、表空間、資料檔案都可以自動建立,並可以使用remap_datafile更改資料檔案路徑和資料檔名稱。
3.全庫匯入ASM磁碟管理資料庫(源資料庫為本地檔案管理)
1.如果全庫匯入ASM磁碟管理的資料庫時會提示無法建立表空間,因為匯入表空間的建立語句中還使用原來的資料檔案路徑和名稱。測試結果如下:
[oracle@rac2 dmp]$ impdp \'/ as sysdba\' directory=my_dir dumpfile=all.dmp logfile=all.log full=y
Import: Release 11.2.0.3.0 - Production on Wed Jul 2 22:20:16 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
Master table "SYS"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "SYS"."SYS_IMPORT_FULL_01": "/******** AS SYSDBA" directory=my_dir dumpfile=all.dmp logfile=all.log full=y
Processing object type DATABASE_EXPORT/TABLESPACE
ORA-31684: Object type TABLESPACE:"UNDOTBS1" already exists
ORA-31684: Object type TABLESPACE:"TEMP" already exists
ORA-31684: Object type TABLESPACE:"USERS" already exists
ORA-39083: Object type TABLESPACE failed to create with error:
ORA-01119: error in creating database file '/u01/app/oracle/oradata/enmo/test01.dbf'
說明:全庫匯入不同環境的資料庫時需要使用remap_datafile引數重新指定資料檔案。
2.全庫匯入ASM磁碟管理資料庫時,使用remap_datafile引數
[oracle@rac2 dmp]$ impdp \'/ as sysdba\' directory=my_dir dumpfile=all.dmp logfile=test.log remap_datafile=\"\'/u01/app/oracle/oradata/enmo/test01.dbf\':\'+DATA/rac/datafile/test01\'\" full=y
3.使用者和表空間已經建立
SQL> select username,default_tablespace from dba_users;
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
MGMT_VIEW SYSTEM
SYS SYSTEM
SYSTEM SYSTEM
DBSNMP SYSAUX
SYSMAN SYSAUX
TEST TEST_SPACE
4.資料檔案已經按指定路徑和檔名建立
SQL> select tablespace_name,file_name from dba_data_files;
TABLESPACE_NAME FILE_NAME
------------------------------ ------------------------------------------------------------
SYSTEM +DATA/rac/datafile/system.261.850108223
SYSAUX +DATA/rac/datafile/sysaux.260.850108227
UNDOTBS1 +DATA/rac/datafile/undotbs1.259.850108229
UNDOTBS2 +DATA/rac/datafile/undotbs2.257.850108237
USERS +DATA/rac/datafile/users.256.850108239
TEST_SPACE +DATA/rac/datafile/test01
3.remap_schema
1.用全庫匯出的dmp檔案匯入單個使用者
[oracle@ENMOEDU ~]$ impdp \'/ as sysdba\' directory=my_dir schemas=test remap_schema=test:test1 dumpfile=all.dmp logfile=test1.log
2.匯入完成後使用者被自動建立
SQL> select username,default_tablespace from dba_users;
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
SYS SYSTEM
SYSTEM SYSTEM
TEST1 TEST_SPACE
TEST TEST_SPACE
BIDPRO BIDPRO_SPACE
說明:remap_schema引數指定的目標使用者Test1會被自動建立了。test1所屬表空間預設使用源表表空間。
3.按使用者匯出一個dmp檔案
[oracle@ENMOEDU
~]$ expdp \'/ as sysdba\' directory=my_dir schemas=test dumpfile=test.dmp
4.匯入
[oracle@ENMOEDU
dmp]$ impdp \'/ as sysdba\' directory=my_dir dumpfile=test.dmp
remap_schema=test:test2 logfile=re_sch.log
5.使用者已經建立
USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
SYS SYSTEM
SYSTEM SYSTEM
TEST2 TEST_SPACE
TEST1 TEST_SPACE
TEST TEST_SPACE
說明:與是否全庫匯出的dmp檔案無關,remap_schema指定的目標使用者都會自動被建立。
4. remap_table
注:格式:Remap_table=舊錶名:新表名
1.使用remap_table引數執行匯入
[oracle@ENMOEDU
dmp]$ impdp \'/ as sysdba\' directory=my_dir dumpfile=test.dmp tables=t_source remap_table=t_source:t_source3
Import: Release 11.2.0.3.0 - Production on Thu Jul 10 14:52:51 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39002: invalid operation
ORA-39166: Object SYS.T_SOURCE was not found.
說明:因為是用sysdba使用者來操作的,所以未找到t_source表。
2.在引數tables中指定表的所屬使用者,重新匯入
impdp \'/ as
sysdba\' directory=my_dir dumpfile=test.dmp tables=test.t_source
remap_table=t_source:t_source3
3.匯入完成
SQL> select count(*) from test.t_source3;
COUNT(*)
----------
2
4.刪除使用者(驗證一下按使用者匯入時,使用schemas引數指定使用者,並指定remap_table重新命名錶名,源表是否同樣被匯入。)
SQL> drop user test cascade;
User dropped.
5.匯入時同時使用schemas和remap_table引數
[oracle@ENMOEDU
dmp]$ impdp \'/ as sysdba\' directory=my_dir dumpfile=test.dmp schemas=test
remap_table=t_source:t_source5
6.匯入完成後只有t_source5表,沒有源表t_source。說明remap_table只是將源表重新命名後匯入目標庫。
SQL> select table_name from dba_tables where owner='TEST';
TABLE_NAME
------------------------------
PRO_BDG_ALLOCATION_TBL
T_SOURCE2
T_TASKDONE
T_BASEITEM
T_TARGET
T_SOURCE5
TEST.T_TARGET
PRO_APP_PROJECT_BASEINFO_TBL
PRO_APP_INVEST_BUDGET_TBL
PRO_BDG_APPBDG_CTRL_TBL
PRO_ATH_PROORBDG_CTRL_TBL
5. remap_tablespace
注:如果引數中使用table_exists_action,並且值為,skip,truncate,append,那麼目標庫中的資料將不會受到任務影響。
1. 驗證是否會自動建立新的表空間
1.如果目標資料庫中未建立remap_tablespace引數指定表空間,執行匯入
[oracle@ENMOEDU dmp]$ impdp \'/ as sysdba\' directory=my_dir dumpfile=test.dmp remap_schema=test:test1 remap_tablespace=test_space:test_space2 table_exists_action=replace
執行後出現錯誤資訊:ORA-00959: tablespace 'TEST_SPACE2' does not exist說明使用remap_tablespace時表空間不會自動建立,必須手動建立。(可能是因為建立表空間時要先建立資料檔案。)
2.驗證remap_tablespace
1.建立一個表空間
SQL> create tablespace test_space2 datafile '/u01/app/oracle/oradata/enmo/test_space2.dbf' size 20M autoextend on next 5M;
Tablespace created.
2.匯入時不指定table_exists_action,預設skip。
[oracle@ENMOEDU dmp]$ impdp \'/ as sysdba\' directory=my_dir dumpfile=test.dmp remap_schema=test:test1 remap_tablespace=test_space:test_space2
3.匯入完成,資料已經匯入到指定表空間
SQL> select OWNER,TABLE_NAME,TABLESPACE_NAME from dba_tables where table_name =upper('t_source');
OWNER TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
TEST1 T_SOURCE TEST_SPACE2
TEST2 T_SOURCE TEST_SPACE
3.驗證remap_tablespace已經存在的資料是否會移到指定表空間
1.新建立一個無資料的表空間
SQL> create tablespace test_space3 datafile '/u01/app/oracle/oradata/enmo/test_space3.dbf' size 20M autoextend on next 5M;
Tablespace
created.
2.執行匯入(在目標資料庫中,要匯入的資料已經存在於test_space表空間中)
[oracle@ENMOEDU
dmp]$ impdp \'/ as sysdba\' directory=my_dir dumpfile=test.dmp remap_tablespace=test_space:test_space3
3.因為table_exists_action引數預設是skip所以test_space3表空間中沒有資料
SQL> select count(*) from dba_tables where tablespace_name=upper('test_space3');
COUNT(*)
----------
0
說明:因為這些表在目錄庫的表空間中都已經存在了。它們並不會移到remap_tablespace 新指定的表空間中,所以表空間test_space3無資料。
4. 使用remap_tablespace並設定table_exists_action=replace驗證已經存在的資料是否會移到新表空間
1.建立新表空間
SQL> create tablespace space01 datafile '/u01/app/oracle/oradata/enmo/space01.dbf' size 10M autoextend on;
Tablespace created.
2.執行匯入
[oracle@ENMOEDU ~]$ impdp \'/ as sysdba\' directory=my_dir dumpfile=test.dmp schemas=test remap_tablespace=TEST_SPACE:space01 table_exi
sts_action=replace
3.查詢資料是否移到新表空間
SQL> select owner,table_name ,tablespace_name from dba_tables where tablespace_name in ('SPACE01','TEST_SPACE');
OWNER TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------
TEST T_BASEITEM SPACE01
TEST T_TASKDONE SPACE01
TEST PRO_BDG_ALLOCATION_TBL SPACE01
TEST PRO_APP_INVEST_BUDGET_TBL SPACE01
TEST PRO_APP_PROJECT_BASEINFO_TBL SPACE01
TEST PRO_ATH_PROORBDG_CTRL_TBL SPACE01
TEST PRO_BDG_APPBDG_CTRL_TBL SPACE01
說明在設定table_exists_action=replace時會將源表空間中已經存在的表刪除,重新匯入到新表空間中。
6.reuse_datafile
使用已經存在的資料檔案來建立表空間。只有兩個引數值yes,no。指定引數yes,將重新初始化資料檔案,可能造成資料丟失。
1.刪除表空間和使用者,但未刪除資料檔案
SQL> drop tablespace TEST_SPACE;
Tablespace dropped.
SQL> drop user test cascade;
User dropped.
SQL> drop tablespace SPACE01;
Tablespace dropped.
SQL> select tablespace_name ,file_name from dba_data_files;
TABLESPACE_NAME FILE_NAME
-------------------- ------------------------------------------------------------
USERS /u01/app/oracle/oradata/enmo/users01.dbf
UNDOTBS1 /u01/app/oracle/oradata/enmo/undotbs01.dbf
SYSAUX /u01/app/oracle/oradata/enmo/sysaux01.dbf
SYSTEM /u01/app/oracle/oradata/enmo/system01.dbf
BIDPRO_SPACE /u01/app/oracle/oradata/enmo/bidpro01.dbf
2檢視資料檔案(未刪除)
[oracle@ENMOEDU enmo]$ ls -trl
total 6325148
-rw-r----- 1 oracle oinstall 52429312 Jul 11 00:13 redo02.log
-rw-r----- 1 oracle oinstall 30416896 Jul 11 00:13 temp01.dbf
-rw-r----- 1 oracle oinstall 52429312 Jul 11 00:30 redo03.log
-rw-r----- 1 oracle oinstall 828579840 Jul 11 00:31 test01.dbf
-rw-r----- 1 oracle oinstall 5251072 Jul 11 00:35 users01.dbf
-rw-r----- 1 oracle oinstall 828579840 Jul 11 00:35 space01.dbf
-rw-r----- 1 oracle oinstall 3221233664 Jul 11 00:35 bidpro01.dbf
-rw-r----- 1 oracle oinstall 78651392 Jul 11 00:35 undotbs01.dbf
-rw-r----- 1 oracle oinstall 754982912 Jul 11 00:35 system01.dbf
-rw-r----- 1 oracle oinstall 566239232 Jul 11 00:35 sysaux01.dbf
-rw-r----- 1 oracle oinstall 52429312 Jul 11 00:35 redo01.log
-rw-r----- 1 oracle oinstall 10043392 Jul 11 00:35 control01.ctl
3.執行按使用者匯入
[oracle@ENMOEDU enmo]$ impdp \'/ as sysdba\' directory=my_dir dumpfile=test.dmp schemas=test reuse_datafiles=y
Import: Release 11.2.0.3.0 - Production on Fri Jul 11 00:42:26 2014
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39005: inconsistent arguments
ORA-39032: function REUSE_DATAFILES is not supported in SCHEMA jobs
Reuse_datafiles不支援指定schema操作,可能只適用全庫匯出的檔案(全庫匯出的dmp檔案中記錄資料檔案路徑和名稱)。
4.使用全庫匯出的dmp檔案執行匯入
[oracle@ENMOEDU dmp]$ impdp \'/ as sysdba\' directory=my_dir dumpfile=all.dmp schemas=test reuse_datafiles=y
SQL> select tablespace_name ,file_name from dba_data_files;
TABLESPACE_NAME FILE_NAME
-------------------- ------------------------------------------------------------
USERS /u01/app/oracle/oradata/enmo/users01.dbf
UNDOTBS1 /u01/app/oracle/oradata/enmo/undotbs01.dbf
SYSAUX /u01/app/oracle/oradata/enmo/sysaux01.dbf
SYSTEM /u01/app/oracle/oradata/enmo/system01.dbf
TEST_SPACE /u01/app/oracle/oradata/enmo/test01.dbf
BIDPRO_SPACE /u01/app/oracle/oradata/enmo/bidpro01.dbf
刪除資料檔案,驗證如果沒有dmp檔案中記錄的資料檔案。是重新生成資料檔案還是重用其它無用的資料檔案
SQL> drop user test cascade;
User dropped.
SQL> drop tablespace TEST_SPACE;
Tablespace
dropped.
刪除test_space表空間所屬資料檔案
[oracle@ENMOEDU enmo]$ rm test01.dbf
執行全庫匯入
[oracle@ENMOEDU
enmo]$ impdp \'/ as sysdba\' directory=my_dir dumpfile=all.dmp reuse_datafiles=y
只會重用空間指定檔名的資料檔案,如果找不到還是會重新建立資料檔案。
TABLESPACE_NAME FILE_NAME
-------------------- ------------------------------------------------------------
USERS /u01/app/oracle/oradata/enmo/users01.dbf
UNDOTBS1 /u01/app/oracle/oradata/enmo/undotbs01.dbf
SYSAUX /u01/app/oracle/oradata/enmo/sysaux01.dbf
SYSTEM /u01/app/oracle/oradata/enmo/system01.dbf
TEST_SPACE /u01/app/oracle/oradata/enmo/test01.dbf
BIDPRO_SPACE /u01/app/oracle/oradata/enmo/bidpro01.dbf
無用的資料檔案space01.dbf並沒有重用,還是會按dmp檔案中記錄的檔案路徑和名稱生成新的資料檔案。
[oracle@ENMOEDU enmo]$ ls -trl
total 6381720
-rw-r----- 1 oracle oinstall 828579840 Jul 11 00:38 space01.dbf
-rw-r----- 1 oracle oinstall 52429312 Jul 11 01:16 redo02.log
-rw-r----- 1 oracle oinstall 30416896 Jul 11 01:16 temp01.dbf
-rw-r----- 1 oracle oinstall 5251072 Jul 11 01:16 users01.dbf
-rw-r----- 1 oracle oinstall 78651392 Jul 11 01:16 undotbs01.dbf
-rw-r----- 1 oracle oinstall 807411712 Jul 11 01:16 system01.dbf
-rw-r----- 1 oracle oinstall 566239232 Jul 11 01:16 sysaux01.dbf
-rw-r----- 1 oracle oinstall 3221233664 Jul 11 01:16 bidpro01.dbf
-rw-r----- 1 oracle oinstall 52429312 Jul 11 01:16 redo03.log
-rw-r----- 1 oracle oinstall 10043392 Jul 11 01:16 control01.ctl
-rw-r----- 1 oracle oinstall 52429312 Jul 11 01:16 redo01.log
-rw-r----- 1 oracle oinstall
829628416 Jul 11 01:16 test01.dbf
----------end----------
DBA_建瑾
2014.7.15
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29324876/viewspace-1219893/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料泵impdp的table_exists_action引數說明Oracle
- 資料泵引數檔案用於執行資料泵命令
- 資料泵 impdp 操作
- oracle 資料泵引數Oracle
- Impdp資料泵匯入
- 10G資料泵載入命令expdp/impdp的引數說明
- 【impdp】IMPDP中的TRANSFORM引數--【資料泵】EXPDP匯出表結構(真實案例)後傳ORM
- 資料泵基礎(impdp/expdp)
- 使用資料泵impdp匯入資料
- expdp impdp Data Pump(資料泵)使用解析
- EXPDP 和 IMPDP 資料泵的使用_1
- EXPDP 和 IMPDP 資料泵的使用_2
- 資料泵IMPDP 匯入工具的使用
- 使用資料泵(expdp、impdp)遷移資料庫流程資料庫
- 【impdp】資料泵impdp工具選項詳解及應用示例
- Oracle資料泵匯出匯入(expdp/impdp)Oracle
- 按計劃瞭解資料泵expdp/impdp
- 使用impdp,expdp資料泵進入海量資料遷移
- 資料泵的TRANSFORM引數說明及使用ORM
- impdp hangs,慎用impdp parallel引數Parallel
- 關於資料庫標識類引數資料庫
- Oracle使用資料泵 (expdp/impdp)實施遷移Oracle
- 資料庫泵(expdp/impdp)匯入匯出流程資料庫
- 10g 資料泵(Data Dump) -- EXPDP & IMPDP [zt]
- expdp/impdp 使用version引數跨版本資料遷移
- Exp和資料泵(Data Pump)的query引數使用
- 關於修改資料庫引數的測試資料庫
- 關於表的資料塊驗證 DUMP 工具 使用
- 關於資料庫管理員的驗證小結資料庫
- Oracle使用資料泵expdp,impdp進行資料匯出匯入Oracle
- 資料泵引數partition_options 在對於遷移分割槽表的使用。
- 使用version引數解決Oracle資料泵版本差異Oracle
- 1.6.3.1. 關於資料庫管理員身份驗證方法資料庫
- 關於驗證表中有無資料的方法比較
- 【Datapump】Oracle資料泵遷移資料命令參考(expdp/impdp說明)Oracle
- 資料泵datapump(expdp/impdp)的parfile用法,避免跳脫字元字元
- 使用version引數解決Oracle資料泵版本差異(引用)Oracle
- 【匯入匯出】資料泵 job_name引數的使用