您好,登錄后才能下訂單哦!
用exp無法導出空表解決方法/用exp導出數據時表丟失原因
使用oracle 11g導出數據發現有的表丟失原因是:
11GR2中有個新特性,當表無數據時,不分配segment,以節省空間,可是在用EXPORT導出時,空表也不能導出,這就導致遷移時候丟失了一些表,存儲過程也失效了
解決方法:
一、 insert一行,再rollback就產生segment了。
該方法是在在空表中插入數據,再刪除,則產生segment。導出時則可導出空表。
二、 設置deferred_segment_creation參數
該參數值默認是TRUE,當改為FALSE時,無論是空表還是非空表,都分配segment。修改SQL語句:
alter system set deferred_segment_creation=false scope=both;
需注意的是:該值設置后對以前導入的空表不產生作用,仍不能導出,只能對后面新增的表產生作用。如需導出之前的空表,只能用第一種方法。
三、 用以下這句查找空表并分配空間
select 'alter table '||table_name||' allocate extent;' from user_tables where SEGMENT_CREATED='NO';
把SQL查詢的結果導出,然后執行導出的語句,強行為表分配空間修改segment值,然后再導出即可導出空表了。
以下是腳本,將未分配空間的表的sql直接輸出到result.txt 文件 (直接執行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;
--會出現類型這樣的格式
ALTER TABLE JW ALLOCATE EXTENT;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。