可以看看官網(wǎng),官網(wǎng)地址:
http://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_import.htm#SUTIL300
transform 可用在這樣的場(chǎng)景中:
創(chuàng)新互聯(lián)長(zhǎng)期為數(shù)千家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為沂水企業(yè)提供專(zhuān)業(yè)的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),沂水網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
要將SLKTESTNEW模式下的表導(dǎo)入到另一個(gè)庫(kù)下的SH_SMCVDMS_SLK_OWSLK模式下。
該模式下對(duì)象實(shí)際所占的大?。?/p>
SQL> select sum(bytes)/1024/1024 from dba_segments where owner=upper('SLKTESTNEW');
SUM(BYTES)/1024/1024
--------------------
11747.25 -----------很大,會(huì)計(jì)算所有hwm下的block
導(dǎo)出語(yǔ)句:
expdp system/1111sys directory=dmpdata SCHEMAS=SLKTESTNEW dumpfile=owslk20110630.dmp logfile=owslk20110630.log
導(dǎo)出數(shù)據(jù)后的dmp大?。?/p>
$ du -m OWSLK20110630.DMP
80.63 OWSLK20110630.DMP ----很小,因?yàn)閑xpdp只把有效block導(dǎo)出
若不加transform,且導(dǎo)入的表空間小于前面計(jì)算的11747.25,中間報(bào)錯(cuò):
ORA-01659: unable to allocate MINEXTENTS beyond 14 in tablespace SH_SMCVDMS_SLK_OWSLK_DATA01。
也不必為了80M的數(shù)據(jù)再加入11G的空間。那就用impdp的transform 選項(xiàng) 實(shí)現(xiàn)導(dǎo)入。
impdp的transform 選項(xiàng)決定是否去掉ddl語(yǔ)句的各種存儲(chǔ)參數(shù)
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參數(shù),只對(duì)table有效,若沒(méi)有table這個(gè)子句的話,就對(duì)所有對(duì)象有效,比如index
sql_file 選項(xiàng)加入后只是模擬導(dǎo)入過(guò)程,形成sql腳本,不會(huì)真正的導(dǎo)入。通過(guò)腳本可查看storage選項(xiàng)是否存在,segment_attributes是否存在。
使用transform可降低導(dǎo)入數(shù)據(jù)的存儲(chǔ)需求,比如若源數(shù)據(jù)需要30G的表空間,但導(dǎo)出數(shù)據(jù)后只有300M,再導(dǎo)入的時(shí)候不必分配30G,由于transform起作用,把storage去掉了。
這里尤其指出的是在11.2.0.2以上有個(gè)新增的參數(shù),SEGMENT_CREATION,如果設(shè)置其為n的話,ddl語(yǔ)句就不包含SEGMENT CREATION IMMEDIATE字段。
transform=storage:n
transform=oid:n
transform=segment_attributes:n
TRANSFORM=SEGMENT_CREATION:n
舉例:
沒(méi)指定transform,導(dǎo)入形成的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 -----先要初始化這么大的空間出來(lái),這個(gè)不必要。若空間不足導(dǎo)入會(huì)終止
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部分去掉了,這樣可不必需要那么多的空間,按數(shù)據(jù)庫(kù)默認(rèn)的initial 64k.
加入了transform=segment_attributes:n
CREATE TABLE "SH_SMCVDMS_SLK_OWSLK"."DE_DEMESSAGEIDMAP"
( "DEMESSAGEID" CHAR(40) NOT NULL ENABLE,
..................................
"UPDATE_BY" CHAR(10)
) ; ---------------這個(gè)很干凈了,create table的時(shí)候都是使用數(shù)據(jù)庫(kù)的默認(rèn)存儲(chǔ)參數(shù),表空間也使用的是用戶(hù)默認(rèn)表空間
---模擬導(dǎo)入,形成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
----真正導(dǎo)入:
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