Oracle
Oracle 完整的 expdp/impdp 但跳過某些表中的數據
我正在嘗試導出模式然後導入它,但是有一些巨大的表我必須跳過其中的所有數據(也就是說,我需要表和與它們相關的所有東西,而不是行)。
所以我想我會做
1) expdp SCHEMAS=X CONTENT=METADATA_ONLY DUMPFILE=meta.dmp 2) exportSCHEMAS=X CONTENT=DATA_ONLY EXCLUDE=TABLE:"IN \('FOO','BAR'\)" DUMPFILE=data.dmp
然後
4) impdp SCHEMAS=X EXCLUDE=REF_CONSTRAINT DUMPFILE=meta.dmp 5) impdp SCHEMAS=X DUMPFILE=data.dmp
計劃是在第 4 步中獲取所有元數據,然後在第 5 步中導入所有數據,但大表 FOO 和 BAR 中的行除外,但是我怎樣才能獲取外鍵?
這是一種方法,還是有其他方法?
不,這不是一個好方法,有很多問題,例如
- 在創建索引後進行數據導入將大大減慢導入速度。
- 導入將觸發所有插入觸發器。這也可能會減慢導入速度,並且可能會產生不必要的副作用
- 序列的目前值與數據不匹配。
您應該使用QUERY 參數。所以如果你想排除APP模式的LOG和MESSAGE表添加
QUERY=APP.LOG:"where 0=1" QUERY=APP.MESSAGE:"where 0=1"
到導出的參數文件。
完成此任務的另一種方法是將其拆分為兩個導出。這有點複雜,但避免了讀取表數據。
- 導出架構並排除大表。他的任務與兩張大桌子的大小無關
- 導出兩個大表的結構。此任務的時間也與兩個表的大小無關
第一次導出(帶數據的模式導出)
DUMPFILE=schema.dmp SCHEMAS=APP EXCLUDE=TABLE:"in ('LOG', 'MESSAGES') CONTENT=ALL # this is the default, so it must not be specified
第二次導出(沒有數據的表導出)
DUMPFILE=table.dmp TABLES=APP.LOG,APP.MESSAGE CONTENT=METADATA_ONLY
首先導入模式轉儲,然後導入表轉儲。對於這兩個導入,您都可以使用該
FULL=Y
參數。進口方案:
DUMPFILE=schema.dmp FULL=Y
表導入:
DUMPFILE=table.dmp FULL=Y
在第 4 步中導入時,不要排除 REF_CONSTRAINTS,而是 IMPORT 包括約束在內的所有元數據,在第 5 步之前禁用約束並開始數據導入。
如果您只認為它不會影響您的數據庫以加快導入速度,您可能還需要禁用觸發器(如果有)。
希望這可以幫助 !!