您好,登錄后才能下訂單哦!
可以看看官網,官網地址:
http://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_import.htm#SUTIL300
transform 可用在這樣的場景中:
要將SLKTESTNEW模式下的表導入到另一個庫下的SH_SMCVDMS_SLK_OWSLK模式下。
該模式下對象實際所占的大小:
SQL> select sum(bytes)/1024/1024 from dba_segments where owner=upper('SLKTESTNEW');
SUM(BYTES)/1024/1024
--------------------
11747.25 -----------很大,會計算所有hwm下的block
導出語句:
expdp system/1111sys directory=dmpdata SCHEMAS=SLKTESTNEW dumpfile=owslk20110630.dmp logfile=owslk20110630.log
導出數據后的dmp大小:
$ du -m OWSLK20110630.DMP
80.63 OWSLK20110630.DMP ----很小,因為expdp只把有效block導出
若不加transform,且導入的表空間小于前面計算的11747.25,中間報錯:
ORA-01659: unable to allocate MINEXTENTS beyond 14 in tablespace SH_SMCVDMS_SLK_OWSLK_DATA01。
也不必為了80M的數據再加入11G的空間。那就用impdp的transform 選項 實現導入。
impdp的transform 選項決定是否去掉ddl語句的各種存儲參數
Purpose
Enables you to alter object creation DDL for specific objects, as well as for all applicable objects being loaded.
Syntax and Description
TRANSFORM = transform_name:value[:object_type]
例如:transform=storage:n:table ,去掉ddl的storage參數,只對table有效,若沒有table這個子句的話,就對所有對象有效,比如index
sql_file 選項加入后只是模擬導入過程,形成sql腳本,不會真正的導入。通過腳本可查看storage選項是否存在,segment_attributes是否存在。
使用transform可降低導入數據的存儲需求,比如若源數據需要30G的表空間,但導出數據后只有300M,再導入的時候不必分配30G,由于transform起作用,把storage去掉了。
這里尤其指出的是在11.2.0.2以上有個新增的參數,SEGMENT_CREATION,如果設置其為n的話,ddl語句就不包含SEGMENT CREATION IMMEDIATE字段。
transform=storage:n
transform=oid:n
transform=segment_attributes:n
TRANSFORM=SEGMENT_CREATION:n
舉例:
沒指定transform,導入形成的dll
CREATE TABLE "SH_SMCVDMS_SLK_OWSLK"."DE_DEMESSAGEIDMAP"
( "DEMESSAGEID" CHAR(40) NOT NULL ENABLE,
..................................
"UPDATE_BY" CHAR(10)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 2952790016 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 -----先要初始化這么大的空間出來,這個不必要。若空間不足導入會終止
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "SH_SMCVDMS_SLK_OWSLK_DATA01" ;
加入了transform=storage:n
CREATE TABLE "SH_SMCVDMS_SLK_OWSLK"."DE_DEMESSAGEIDMAP"
( "DEMESSAGEID" CHAR(40) NOT NULL ENABLE,
..................................
"UPDATE_BY" CHAR(10)
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
TABLESPACE "SH_SMCVDMS_SLK_OWSLK_DATA01" ; ------------把storage部分去掉了,這樣可不必需要那么多的空間,按數據庫默認的initial 64k.
加入了transform=segment_attributes:n
CREATE TABLE "SH_SMCVDMS_SLK_OWSLK"."DE_DEMESSAGEIDMAP"
( "DEMESSAGEID" CHAR(40) NOT NULL ENABLE,
..................................
"UPDATE_BY" CHAR(10)
) ; ---------------這個很干凈了,create table的時候都是使用數據庫的默認存儲參數,表空間也使用的是用戶默認表空間
---模擬導入,形成sql腳本:
impdp system/1111directory=dmp transform=storage:n REMAP_SCHEMA="SLKTESTNEW:sh_smcvdms_slk_owslk" remap_tablespace="SH_DMS_SLK_OWSGM_DATA01:sh_smcvdms_slk_owslk_data01" remap_tablespace="SH_DMS_SLK_OWSGM_LOB01:SH_SMCVDMS_SLK_OWSLK_LOB01" dumpfile=OWSLK20110630.DMP logfile=owslk20110702_storage_n.log sqlfile=owslk0702_storage_n.sql
----真正導入:
impdp system/1111 directory=dmp transform=storage:n REMAP_SCHEMA="SLKTESTNEW:sh_smcvdms_slk_owslk" remap_tablespace="SH_DMS_SLK_OWSGM_DATA01:sh_smcvdms_slk_owslk_data01" remap_tablespace="SH_DMS_SLK_OWSGM_LOB01:SH_SMCVDMS_SLK_OWSLK_LOB01" dumpfile=OWSLK20110630.DMP logfile=owslk20110702_storage_n.log table_exists_action=replace
====end=====
impdp sec/sec directory=expdp_dir dumpfile=sec_expdp.dmp sqlfile=sec_expdp.sql transform=segment_attributes:n
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。