11g exp不能导出空表
上一篇 / 下一篇 2011-05-20 10:23:50 / 个人分类:工作
在和开发做一次 数据库迁移的时候,exp出来,然后imp,发现居然空表没有导出来,网上查了下资料发现 11g在exp时不导出空表。11g的新特新,无数据,不分配segment以此来节约空间。
解决办法:
1.insert 一行数据再rollback,
2.设置deferred_segment_creation=false(该设置,只对后来创建表起作用)
alter system set deferred_segment_creation=false
3.用expdp/impdp
知识盲点:对11g新特性不了解,不了解新特性的情况下就去操作导致失败。
找出空表方法:
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('以下为空数据表的表名:'); 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;
|