oracle回滾段和回滾表空間
昨晚因為做了一個大批量的刪除,用的delete。大約用了6個小時,導致了回滾段自動擴充套件到將近30個G。(以後記著,做大批量刪除的時候,一定要用指令碼實現,分批量提交事務。那樣就不會佔用太多的UNDO表空間了!)
從網上搜了一個普遍的方法,更換新的UNDO表空間,然後刪除原來的UNDO表空間,釋放出磁碟容量。
具體方法如下:(參考網上的資料)
1、查詢回滾段資訊:狀態為ONLINE,當前UNDO表空間為undotbs1
SQL>select segment_name, owner, tablespace_name, status from dba_rollback_segs;
SEGMENT_NAME OWNER TABLESPACE_NAME STATUS
------------------------------ ------ ------------------------------ ----------------
SYSTEM SYS SYSTEM ONLINE
_SYSSMU1$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU2$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU3$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU4$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU5$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU6$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU7$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU8$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU9$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU10$ PUBLIC UNDOTBS1 ONLINE
11 rows selected.
2、建立一個新的回滾段:
SQL>CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'd:/oracle/oradata/oradev/UNDOTBS2.dbf' SIZE 50M
注:UNDOTBS2為新建回滾段名稱,可自擬。'd:/oracle/oradata/oradev/UNDOTBS2.dbf' 是表空間資料檔案地址,可根據情況設定。
3、切換回滾段:
SQL> alter system set undo_tablespace=undotbs2 scope=both;
這樣系統預設UNDO表空間就是新建的undotbs2了。
4、重啟資料庫後,即可刪除原來的回滾段,這樣就能釋放磁碟空間了。
SQL> drop rollback segment undotbs1;
5、對回滾段的大小,可以根據情況進行調整,也可以改為自動擴充套件。
下面是網友提供的一個小技巧:
調小了回滾段後,在imp匯入資料時,提示回滾段無法擴充套件的錯誤。
解決方法:在imp時,加入引數 commit=y,直接提交,避免佔用大回滾段。