在給客戶培訓(xùn)的過(guò)程中,發(fā)現(xiàn)客戶數(shù)據(jù)庫(kù)服務(wù)器存在一個(gè)奇怪的現(xiàn)象。客戶數(shù)據(jù)庫(kù)服務(wù)器環(huán)境為AIX6+Oracle11gR2,具體現(xiàn)象如下:
執(zhí)行EXP導(dǎo)出時(shí),部分表提示 EXP-00011:表不存在錯(cuò)誤,但是查詢user_all_tables視圖,此表確實(shí)是存在的,并且執(zhí)行select語(yǔ)句也能成功,不過(guò)表為空表,查看權(quán)限等也沒(méi)有問(wèn)題。后來(lái)通過(guò)查詢資料,發(fā)現(xiàn)問(wèn)題是由Deferred Segment Creation參數(shù)引起的。
Deferred Segment Creation,延遲段創(chuàng)建,Oracle11gR2新增參數(shù), 具體用處是當(dāng)新創(chuàng)建一個(gè)可能會(huì)有Segment的對(duì)象時(shí),如果這個(gè)對(duì)象中還沒(méi)有任何記錄需要消耗一個(gè)Extent,那么將不會(huì)在創(chuàng)建對(duì)象時(shí)自動(dòng)創(chuàng)建Segment,這樣做的好處是在創(chuàng)建對(duì)象時(shí)大大提高了速度。但是這么一來(lái),因?yàn)閷?duì)象沒(méi)有Segment,執(zhí)行EXP導(dǎo)出時(shí),就會(huì)報(bào)EXP-00011錯(cuò)誤。
以報(bào)錯(cuò)的表cf_template為例,執(zhí)行以下查詢:
復(fù)制代碼 代碼如下:
SQL> show parameter DEFERRED_SEGMENT_CREATION
NAME TYPE VALUE
------------------------------------ -------------------- --------------------
deferred_segment_creation boolean TRUE
發(fā)現(xiàn)Deferred Segment Creation已經(jīng)打開(kāi),再執(zhí)行:
復(fù)制代碼 代碼如下:
SQL> select segment_name from user_segments where segment_name='CF_TEMPLATE';
no rows selected
沒(méi)有返回值,數(shù)據(jù)庫(kù)確實(shí)沒(méi)有給CF_TEMPLATE表創(chuàng)建Segment,這就驗(yàn)證了為什么報(bào)錯(cuò)的都是空表。
解決方法如下:
1. 設(shè)置deferred_segment_creation的值為false
此方法只對(duì)以后的表有效,之前的表沒(méi)有Segment的還是沒(méi)有。
2. 創(chuàng)建表的時(shí)候聲明立即創(chuàng)建Segment
create table XXX (XXX XXX) SEGMENT CREATION IMMEDIATE;
3.對(duì)于已經(jīng)創(chuàng)建但是還沒(méi)有Segment的表來(lái)說(shuō),可以執(zhí)行alter table XXX allocate extent來(lái)使其創(chuàng)建出 Segment,當(dāng)然也可以插入一條數(shù)據(jù),使其創(chuàng)建Segment
您可能感興趣的文章:- Centos下Oracle11gR2安裝教程與自動(dòng)化配置腳本的方法
- centos7下安裝oracle11gR2的詳細(xì)步驟
- linux系統(tǒng)下oracle11gR2靜默安裝的經(jīng)驗(yàn)分享
- Oracle11g r2 卸載干凈重裝的詳細(xì)教程(親測(cè)有效已重裝過(guò))
- Oracle11g R2 安裝教程完整版