11g exp不能導(dǎo)出空表上一篇 / 下一篇 2011-05-20 10:23:50 / 個(gè)人分類(lèi):工作 在和開(kāi)發(fā)做一次數(shù)據(jù)庫(kù)遷移的時(shí)候,exp出來(lái),然后imp,發(fā)現(xiàn)居然空表沒(méi)有導(dǎo)出來(lái),網(wǎng)上查了下資料發(fā)現(xiàn)11g在exp時(shí)不導(dǎo)出空表。11g的新特新,無(wú)數(shù)據(jù),不分配segment以此來(lái)節(jié)約空間。
解決辦法:
1.insert 一行數(shù)據(jù)再rollback,
2.設(shè)置deferred_segment_creation=false(該設(shè)置,只對(duì)后來(lái)創(chuàng)建表起作用)
alter system set deferred_segment_creation=false
3.用expdp/impdp
知識(shí)盲點(diǎn):對(duì)11g新特性不了解,不了解新特性的情況下就去操作導(dǎo)致失敗。
找出空表方法:
DECLARE v_table tabs.table_name%TYPE; v_sql VARCHAR2(888); v_q NUMBER; CURSOR c1 IS SELECT table_name tn FROM tabs; TYPE c IS REF CURSOR; c2 c; BEGIN DBMS_OUTPUT.PUT_LINE('以下為空數(shù)據(jù)表的表名:'); FOR r1 IN c1 LOOP v_table :=r1.tn; v_sql :='SELECT count(*) q FROM '||v_table||' where rownum = 1'; OPEN c2 FOR v_sql; LOOP FETCH c2 INTO v_q; EXIT WHEN c2%NOTFOUND; IF v_q=0 THEN DBMS_OUTPUT.PUT_LINE(v_table); END IF; END LOOP; CLOSE c2; END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Error occurred'); END; |
|