oracle空表導不出來

在oracle 11g r2中,使用exp有時候會導不出空的表,原因是這些表沒有分配空間,手工分配空間即可導出。 

 

----查詢當前用戶下的所有空表: 
select table_name from user_tables where NUM_ROWS=0; 

 

----查詢DB_YWYH用戶所有未分配Extent的表:
SELECT * FROM DBA_TABLES WHERE OWNER='DB_YWYH' 
AND TABLE_NAME NOT IN
(
    SELECT T.SEGMENT_NAME
    FROM DBA_SEGMENTS  T
    WHERE OWNER='DB_YWYH'
)


----①使用添加一條記錄然後再刪除這條數據,此表就可以導出了,此方法太笨拙。
----②使用ALLOCATE EXTENT可以爲數據庫對象分配Extent。其語法如下: 
alter table aTabelName allocate extent


-----如果有很多表都沒有分配空間,則用一下方法解決
-----構建批量分配Extent語句
SELECT 'ALTER TABLE '||TABLE_NAME||' ALLOCATE EXTENT;' 

FROM DBA_TABLES 

WHERE OWNER='DB_YWYH' 
AND TABLE_NAME NOT IN
(
    SELECT T.SEGMENT_NAME
    FROM DBA_SEGMENTS  T
    WHERE OWNER='DB_YWYH'
)

 

導致空表未及時分配空間的原因是oracle 11g 新增了一個參數:DEFERRED_SEGMENT_CREATION,含義是段延遲創建,默認是true,表示你新建了一個表T1,並且沒有向其中插入數據,那麼這個表不會立即分配Extent,也就是不佔數據空間,只有當你insert數據後才分配空間。這樣可以節省少量的空間。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章