總結 ?ORA-01548: 已找到活動回退段 '_SYSSMU1$', 終止刪除表空間?
出現的原因:由於服務器自動重新啟動造成回滾事務沒有及時提交造成數據庫塊的損壞,及后面造成一系列的問題。
/* :
Wed Dec 08 15:20:03 2010
Errors in file d:/oracle/product/10.2.0/admin/taxdev/bdump/taxdev_smon_2572.trc:
ORA-01578: ORACLE data block corrupted (file # 48, block # 1919)
ORA-01110: data file 48: 'F:/UNDO0001'
*/
前提已經建立好表空間undo2:
--DROP TABLESPACE UNDOTB1 INCLUDING CONTENTS AND DATAFILES;
CREATE UNDO TABLESPACE undo2 DATAFILE
'F:/UNDO02' SIZE 1000M AUTOEXTEND ON NEXT 50M MAXSIZE 8000M,
'F:/UNDO03' SIZE 1000M AUTOEXTEND ON NEXT 50M MAXSIZE 8000M,
'F:/UNDO04' SIZE 1000M AUTOEXTEND ON NEXT 50M MAXSIZE 8000M,
'F:/UNDO05' SIZE 1000M AUTOEXTEND ON NEXT 50M MAXSIZE 8000M
ONLINE
RETENTION NOGUARANTEE
BLOCKSIZE 8K
FLASHBACK ON;
-- 刪除回滾段
DROP TABLESPACE UNDO2 INCLUDING CONTENTS AND DATAFILES;
?ORA-01548: 已找到活動回退段 '_SYSSMU1$', 終止刪除表空間
--CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE 'F:/UNDOTBS1.DBF' SIZE2000M;
/*
Wed Dec 08 15:20:03 2010
Errors in file d:/oracle/product/10.2.0/admin/taxdev/bdump/taxdev_smon_2572.trc:
ORA-01578: ORACLE data block corrupted (file # 48, block # 1919)
ORA-01110: data file 48: 'F:/UNDO0001'
*/
可是這里沒有備份啊,那就先確定損壞的是什么
SELECT segment_name, segment_type, owner, tablespace_name
FROM dba_extents
WHERE file_id = 48 AND 1919 BETWEEN block_id AND block_id + blocks - 1
查詢結果如下
---------------------------------------------------------------------
segment_name segment_type owner tablespace_name
_SYSSMU18$ TYPE2 UNDO SYS UNDO2
--------------------------------
第 1 行出現錯誤:
ORA-12008: 實體化視圖的刷新路徑中存在錯誤
ORA-01578: ORACLE 數據塊損壞 (文件號 48, 塊號 1919)
ORA-01110: 數據文件 48: 'F:/UNDO0001'
ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2255
ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2461
ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2430
ORA-06512: 在 "BLTS.XIMPORT", line 811
ORA-06512: 在 line 1
12-08 16:59 問題未解決 沒有頭緒
---------------------------------------
http://blog.csdn.net/roland_wg/archive/2010/04/11/5471770.aspx 參考網站
/***
ORA-01548: 已找到活動回退段'_SYSSMU1$',終止刪除表空間 解決辦法
http://smfflynj.itpub.net/post/31928/289863
驗證過程:
1 查看所有回滾段信息:
select segment_name,status,tablespace_name from dba_rollback_segs;
***/
SEGMENT_NAME STATUS TABLESPACE_NAME
------------------------------ ---------------- ------------------------------
SYSTEM ONLINE SYSTEM
_SYSSMU2$OFFLINEUNDO01
_SYSSMU3$OFFLINEUNDO01
_SYSSMU4$OFFLINEUNDO01
_SYSSMU5$OFFLINEUNDO01
_SYSSMU6$OFFLINEUNDO01
_SYSSMU7$OFFLINEUNDO01
_SYSSMU8$OFFLINEUNDO01
_SYSSMU57$OFFLINEUNDO01
_SYSSMU1$PARTLY AVAILABLEUNDO01
_SYSSMU56$OFFLINEUNDO01
_SYSSMU55$OFFLINEUNDO01
_SYSSMU54$OFFLINEUNDO01
_SYSSMU53$OFFLINEUNDO01
_SYSSMU52$OFFLINEUNDO01
_SYSSMU51$OFFLINEUNDO01
_SYSSMU34$PARTLY AVAILABLEUNDO01
_SYSSMU33$OFFLINEUNDO01
_SYSSMU18$ONLINEUNDO2
_SYSSMU9$ONLINEUNDO2
_SYSSMU20$ONLINEUNDO2
_SYSSMU21$ONLINEUNDO2
_SYSSMU22$ONLINEUNDO2
_SYSSMU23$PARTLY AVAILABLEUNDO2
_SYSSMU24$PARTLY AVAILABLEUNDO2
_SYSSMU17$ONLINEUNDO2
_SYSSMU16$ONLINEUNDO2
_SYSSMU15$ONLINEUNDO2
_SYSSMU14$ONLINEUNDO2
_SYSSMU13$ONLINEUNDO2
_SYSSMU12$ONLINEUNDO2
_SYSSMU11$ONLINEUNDO2
_SYSSMU10$ONLINEUNDO2
_SYSSMU19$ONLINEUNDO2
已選擇49行。
說明是有問題的。
處理過程
--------------------------------
1、 -- create undo tablespace undo2 datafile 'D:oracleoradataPS30710UNDOTBS2.DBF' size 1000M; 已經建立不需要在建立
-- alter system set undo_tablespace=undotBS2;
alter system set undo_tablespace=undo2;
drop tablespace UNDO2 including contents; (進行這部操作的時候會報下面的錯):
ORA-01548: 已找到活動回退段 '_SYSSMU1$', 終止刪除表空間
2、 修改文件init.ora.926200993317,如下:
D:/oracle/product/10.2.0/admin/taxdev/pfile
undo_management=manual
undo_retention=10800
undo_tablespace=undo02
_CORRUPTED_ROLLBACK_SEGMENTS =(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU10$,_SYSSMU57$,_SYSSMU56$,_SYSSMU55$,_SYSSMU54$,_SYSSMU53$,_SYSSMU52$,_SYSSMU51$,_SYSSMU34$,_SYSSMU33$)
3、啟動服務
startup pfile= 'D:/oracle/product/10.2.0/admin/taxdev/pfile/init.ora.926200993317'
4、刪除表空間
drop tablespace UNDO01 including contents;
5、 修改init.ora.926200993317,如下:
undo_management=auto
undo_retention=10800
undo_tablespace=undo2
_CORRUPTED_ROLLBACK_SEGMENTS =(_SYSSMU18$,_SYSSMU9$,_SYSSMU20$,_SYSSMU21$,_SYSSMU22$,_SYSSMU23$,_SYSSMU24$,_SYSSMU10,_SYSSMU11,_SYSSMU12,_SYSSMU13,_SYSSMU14
,_SYSSMU15,_SYSSMU16,_SYSSMU17,_SYSSMU19)
6 關閉服務,並且用下面的命令重新啟動服務
startup pfile=' D:/oracle/product/10.2.0/admin/taxdev/pfile/init.ora.92620099331'
7/拷貝spfile文件,原先的spfile文件做好備份
8 關閉服務器,重新啟動服務器,即可。
select segment_name,status,tablespace_name from dba_rollback_segs;
-------------------------------------------------------------------------
SEGMENT_NAMESTATUSTABLESPACE_NAME
SYSTEMONLINESYSTEM
_SYSSMU9$OFFLINEUNDO2
_SYSSMU10$ONLINEUNDO2
_SYSSMU11$ONLINEUNDO2
_SYSSMU12$ONLINEUNDO2
_SYSSMU13$ONLINEUNDO2
_SYSSMU14$ONLINEUNDO2
_SYSSMU15$ONLINEUNDO2
_SYSSMU16$ONLINEUNDO2
_SYSSMU17$ONLINEUNDO2
_SYSSMU18$NEEDS RECOVERYUNDO2
_SYSSMU19$ONLINEUNDO2
_SYSSMU20$NEEDS RECOVERYUNDO2
_SYSSMU21$NEEDS RECOVERYUNDO2
_SYSSMU22$NEEDS RECOVERYUNDO2
_SYSSMU23$NEEDS RECOVERYUNDO2
_SYSSMU24$NEEDS RECOVERYUNDO2
--表空間已經刪除 undo01已經刪除里面的回滾事務也刪除
2010-12-08- 18:30 晚上開始備份數據庫
2010-12-09 早晨解決備份
-------------------------------------------------------------------
/*檢查日志數據庫出現ORA-01578錯誤:數據塊損壞(文件號 26, 塊號 3283302)
[error][ora-01578]數據塊損壞后重建索引? */
--------------------------------------------------------
2010-12-09 早晨檢查數據庫備份發現有數據庫報錯 提示如下:
....
. . 正在導出表 T_DJ_TFYXX
EXP-00056: 遇到 ORACLE 錯誤 1578
ORA-01578: ORACLE 數據塊損壞 (文件號 6, 塊號 320089)
ORA-01110: 數據文件 6: 'D:/BK_DEV01.ORA'
. . 正在導出表
/* 查詢出錯的塊*/
SELECT segment_name, segment_type
FROM dba_extents
WHERE file_id = 6 AND 320089 BETWEEN block_id AND block_id + blocks - 1;
結果為:
segment_name segment_type
----------------------- ------------------------
T_DJ_TFYXX TABLE
說明:T_DJ_TFYXX為物化視圖,直接把數據 Truncate 掉,重新導入數據。ok!
---------------------------------------------------------------------------------------------------
2010-12-09 早晨檢查數據庫日志發現
ORA-12012: 自動執行作業 81 出錯
ORA-01578: ORACLE 數據塊損壞 (文件號 26, 塊號 3283302)
ORA-01110: 數據文件 26: 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/TAXDEV/BKDEV02'
ORA-06512: 在 "BLTS.XIMPORT", line 527
ORA-06512: 在 "BLTS.XIMPORT", line 745
ORA-06512: 在 line 1
--查詢出錯的塊
SELECT *
FROM dba_extents
WHERE file_id = 26 AND 3283302 BETWEEN block_id AND block_id + blocks - 1;
---------------------------------------------
SEGMENT_NAME SEGMENT_TYPE
IDX_SB_DECLARE_YJKQX_CS INDEX
用以下語句查詢:上面SQL和下面的效果一樣
/* Formatted on 2010/12/09 09:58 (Formatter Plus v4.8.8) */
SELECT segment_name, segment_type
FROM dba_extents
WHERE file_id = 26 AND 3283302 BETWEEN block_id AND block_id + blocks - 1;
結果為:
segment_name segment_type
----------------------- ------------------------
IDX_SB_DECLARE_YJKQX_CS INDEX
檢查發現 BLT_WH_SB_DECLARE 中索引壞了
--重建索引 15分鍾 OK
alter index IDX_SB_DECLARE_YJKQX_CS rebuild online;
------------------------------------------------------------------------------