您好,登錄后才能下訂單哦!
用exp無法導(dǎo)出空表解決方法/用exp導(dǎo)出數(shù)據(jù)時表丟失原因
使用oracle 11g導(dǎo)出數(shù)據(jù)發(fā)現(xiàn)有的表丟失原因是:
11GR2中有個新特性,當(dāng)表無數(shù)據(jù)時,不分配segment,以節(jié)省空間,可是在用EXPORT導(dǎo)出時,空表也不能導(dǎo)出,這就導(dǎo)致遷移時候丟失了一些表,存儲過程也失效了
解決方法:
一、 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 SEGMENT_CREATED='NO';
把SQL查詢的結(jié)果導(dǎo)出,然后執(zhí)行導(dǎo)出的語句,強行為表分配空間修改segment值,然后再導(dǎo)出即可導(dǎo)出空表了。
以下是腳本,將未分配空間的表的sql直接輸出到result.txt 文件 (直接執(zhí)行result.txt中的sql即可為未分配空間的表分配空間)
set linesize 120; set pagesize 2000; spool /home/oracle/result.txt; SELECT 'ALTER TABLE '||TABLE_NAME||' ALLOCATE EXTENT;' SQLSTR FROM USER_TABLES WHERE SEGMENT_CREATED='NO'; spool off; exit;
--會出現(xiàn)類型這樣的格式
ALTER TABLE JW ALLOCATE EXTENT;
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。