1. 程式人生 > >oracle回滾段和回滾表空間

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,直接提交,避免佔用大回滾段。