談笑有鴻儒,往來無白丁

          在恰當(dāng)?shù)臅r間、地點(diǎn)以恰當(dāng)?shù)姆绞奖磉_(dá)給恰當(dāng)?shù)娜?..  閱讀的時候請注意分類,佛曰我日里面是談笑文章,其他是各個分類的文章,積極的熱情投入到寫博的隊(duì)伍中來,支持blogjava做大做強(qiáng)!向dudu站長致敬>> > 我的微博敬請收聽

          最早的一次使用oracle 11g導(dǎo)出數(shù)據(jù)發(fā)現(xiàn)有的表丟失了,感覺莫名其妙的,后來終于找到原因了。
          找到問題以后,再看看解決方案。

          11GR2中有個新特性,當(dāng)表無數(shù)據(jù)時,不分配segment,以節(jié)省空間,可是在用EXPORT導(dǎo)出時,空表也不能導(dǎo)出,這就導(dǎo)致遷移時候丟失了一些表,存儲過程也失效了。本以為EXP能有相應(yīng)的控制開關(guān),可以切換是否導(dǎo)出空表,看了下幫助,沒有太大的改變。有些奇怪,難道11GR2不更新EXP的功能了,還看有的帖子說11GR1作為客戶端去卸載11GR2的,都會出現(xiàn)ora-1455d的錯誤,得換成11GR2的exp才沒事了,心中感慨阿,怎么版本間的兼容這么脆弱了!

            解決方法:

          一、 insert一行,再rollback就產(chǎn)生segment了。

            該方法是在在空表中插入數(shù)據(jù),再刪除,則產(chǎn)生segment。導(dǎo)出時則可導(dǎo)出空表。

          二、 設(shè)置deferred_segment_creation參數(shù)

          該參數(shù)值默認(rèn)是TRUE,當(dāng)改為FALSE時,無論是空表還是非空表,都分配segment。修改SQL語句:

          alter system set deferred_segment_creation=false scope=both;

            需注意的是:該值設(shè)置后對以前導(dǎo)入的空表不產(chǎn)生作用,仍不能導(dǎo)出,只能對后面新增的表產(chǎn)生作用。如需導(dǎo)出之前的空表,只能用第一種方法。

          三、 用以下這句查找空表并分配空間

            select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;

            把SQL查詢的結(jié)果導(dǎo)出,然后執(zhí)行導(dǎo)出的語句,強(qiáng)行為表分配空間修改segment值,然后再導(dǎo)出即可導(dǎo)出空表了。



          posted on 2012-06-11 10:29 壞男孩 閱讀(3614) 評論(1)  編輯  收藏 所屬分類: ORACLE篇章

          FeedBack:
          # re: 用exp無法導(dǎo)出空表解決方法
          2014-09-23 13:10 | 繁體字
          感覺oracle 特別的脆弱~ 備份、還原,還要考慮空表,版本,字符集等相關(guān)問題~  回復(fù)  更多評論
            
          主站蜘蛛池模板: 定襄县| 宁南县| 长乐市| 利川市| 涟源市| 金山区| 屏东县| 刚察县| 晋州市| 潼南县| 阿克苏市| 通许县| 泽库县| 偏关县| 海晏县| 贺兰县| 奉节县| 英德市| 安化县| 蛟河市| 新干县| 菏泽市| 射阳县| 宜兰市| 曲水县| 齐河县| 海门市| 洪洞县| 花莲市| 西昌市| 镇赉县| 南充市| 长治市| 任丘市| 松溪县| 行唐县| 赤城县| 永康市| 惠安县| 富顺县| 旺苍县|