重建復原資料表空間,重建滾資料表空間
作者:iamlaosong
因為意外原因(掉電,人為殺死進程)導致復原段中的資料沒有提交,復原段中保留大量資料無法去除,我想到的辦法就是重建資料表空間。當Oracle中當讀寫大批量資料時候,如果不及時提交任務,會導致復原資料表空間的迅速增加,復原資料表空間會一直增大,而不自動釋放它佔用的硬碟空間,(當然,幾個小時後,系統會自動釋放它自身的佔用率,但不會釋放它所佔用的硬碟空間),這時,也可以通過重建資料表空間來解決。
1、重建復原資料表空間方法,
思路:先建立復原資料表空間,再重新定向到建立的復原資料表空間,然後刪除掉原來的復原資料表空間。如果覺得有必要,可以再重建原來的資料表空間,刪除建立的資料表空間。
-- 建立備用undo資料表空間
create undo tablespace undotbs2 datafile '/opt/app/oracle/oradata/orcl/undotbs02.dbf' size 100m
-- 切換undo資料表空間,使系統使用建立的復原資料表空間
alter system set undo_tablespace=undotbs2 scope=spfile
--關閉服務
shutdown immediate
--重新啟動服務
startup
-- 刪除掉原來的混滾資料表空間
drop tablespace undotbs1 including contents and datafiles;
-- 建立原undo資料表空間
create undo tablespace undotbs1 datafile '/opt/app/oracle/oradata/orcl/undotbs01.dbf' size 1000m;
-- 切換undo資料表空間
alter system set undo_tablespace=undotbs1 scope=spfile;
-- 關閉重起並把備用undo資料表空間drop
shutdown immediate
startup
drop tablespace undotbs2 including contents and datafiles;
2、復原段無法刪除的處理
癥狀:
刪除復原段資料表空間(drop tablespace undotbs1 including contents)的時候報下面的錯
ORA-01548: 已找到活動回退段'_SYSSMU1$',終止刪除資料表空間
處理過程:
1 create undo tablespace undotbs2 datafile '/opt/app/oracle/oradata/orcl/undotbs02.dbf' size 100m;
alter system set undo_tablespace=undotbs2;
drop tablespace undotbs1 including contents;(進行這部操作的時候會報下面的錯):
ORA-01548: 已找到活動回退段'_SYSSMU1$',終止刪除資料表空間
2 修改檔案/opt/app/oracle/admin/orcl/pfile/init.ora.913201117448,如下:
undo_management=manual
undo_retention=10800
undo_tablespace=undotbs2
_CORRUPTED_ROLLBACK_SEGMENTS =(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
3 啟動服務
startup pfile=/opt/app/oracle/admin/orcl/pfile/init.ora.913201117448
4 刪除資料表空間
drop tablespace undotbs1 including contents;
create undo tablespace undotBS1 datafile '/opt/app/oracle/oradata/orcl/undotbs01.dbf' size 1000m;
5 修改init.ora.913201117448,如下:
undo_management=auto
undo_retention=10800
undo_tablespace=undotBS1
#_CORRUPTED_ROLLBACK_SEGMENTS =(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
6 關閉服務shutdown immediate,並且用下面的命令重新啟動服務
startup pfile=/opt/app/oracle/admin/orcl/pfile/init.ora.913201117448
7 拷貝spfile檔案,原先的spfile檔案做好備份
create spfile='/opt/app/oracle/product/10.1.0/db_1/dbs/spfileorcl.ora' from pfile='/opt/app/oracle/admin/orcl/pfile/init.ora.913201117448'
8 關閉伺服器shutdown immediate,重新啟動伺服器startup,刪除建立資料表空間,即可。
drop tablespace undotbs2 including contents and datafiles;
select segment_name,status,tablespace_name from dba_rollback_segs;
SEGMENT_NAME STATUS TABLESPACE_NAME
------------------------------ ---------------- ------------------------------
SYSTEM ONLINE SYSTEM
_SYSSMU1$ ONLINE UNDOTBS1
_SYSSMU2$ ONLINE UNDOTBS1
_SYSSMU3$ ONLINE UNDOTBS1
_SYSSMU4$ ONLINE UNDOTBS1
_SYSSMU5$ ONLINE UNDOTBS1
_SYSSMU6$ ONLINE UNDOTBS1
_SYSSMU7$ ONLINE UNDOTBS1
_SYSSMU8$ ONLINE UNDOTBS1
_SYSSMU9$ ONLINE UNDOTBS1
_SYSSMU10$ ONLINE UNDOTBS1
11 rows selected.