記一次sysaux表空間壞塊修復
正常巡檢一個庫時,發現定時exp有問題:
EXP-00008: ORACLE error 25153 encountered
ORA-25153: Temporary Tablespace is Empty
ORA-06512: at "WMSYS.LT_EXPORT_PKG", line 1379
ORA-06512: at line 1
EXP-00083: The previous problem occurred when calling WMSYS.LT_EXPORT_PKG.system_info_exp
EXP-00008: ORACLE error 25153 encountered
ORA-25153: Temporary Tablespace is Empty
ORA-06512: at "SYS.DBMS_LOB", line 664
ORA-06512: at "SYS.DBMS_SCHED_MAIN_EXPORT", line 1878
ORA-06512: at "SYS.DBMS_SCHED_ATTRIBUTE_EXPORT", line 14
ORA-06512: at line 1
EXP-00085: The previous problem occurred when calling SYS.DBMS_SCHED_ATTRIBUTE_EXPORT.create_exp for object 12196
。。。
這是temp表空間的問題,但是為什麼會出這個問題呢?
這是temp表空間的問題,但是為什麼會出這個問題呢?
1、檢查alert_orcl.log
Errors in file /opt/app/oracle/diag/rdbms/data/orcl/trace/orcl_m000_22700.trc (incident=557043):
ORA-01578: ORACLE data block corrupted (file # 2, block # 68896)
ORA-01110: data file 2: '/opt/app/oracle/oradata/data/sysaux01.dbf'
ORA-26040: Data block was loaded using the NOLOGGING option
Incident details in: /opt/app/oracle/diag/rdbms/data/orcl/incident/incdir_557043/orcl_m000_22700_i557043.trc
Errors in file /opt/app/oracle/diag/rdbms/data/orcl/trace/orcl_m000_22700.trc (incident=557044):
ORA-01578: ORACLE data block corrupted (file # ORA-01578: ORACLE data block corrupted (file # 2, block # 68896)
ORA-01110: data file 2: '/opt/app/oracle/oradata/data/sysaux01.dbf'
ORA-26040: Data block was loaded using the NOLOGGING option
, block # )
Incident details in: /opt/app/oracle/diag/rdbms/data/orcl/incident/incdir_557044/orcl_m000_22700_i557044.trc
Mon Sep 14 22:00:13 2015
Trace dumping is performing id=[cdmp_20150914220013]
Mon Sep 14 22:00:13 2015
Sweep [inc][557044]: completed
Sweep [inc][557043]: completed
Sweep [inc2][557044]: completed
Sweep [inc2][557043]: completed
確定是資料塊損壞。
2、使用dbv檢查一下:
~]$dbv file='/opt/app/oracle/oradata/data/sysaux01.dbf' blocksize=8192
DBVERIFY: Release 11.2.0.1.0 - Production on Tue Sep 15 11:50:11 2015
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : FILE = /opt/app/oracle/oradata/data/sysaux01.dbf
DBV-00201: Block, DBA 8457504, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8457565, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8457569, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459538, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459542, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459546, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459550, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459551, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459554, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459584, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459588, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459592, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459615, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459619, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459623, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459627, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459631, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459632, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459635, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459636, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459639, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459643, marked corrupt for invalid redo application
DBV-00201: Block, DBA 8459647, marked corrupt for invalid redo application
DBVERIFY - Verification complete
Total Pages Examined : 256000
Total Pages Processed (Data) : 30735
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 17923
Total Pages Failing (Index): 0
Total Pages Processed (Lob) : 9562
Total Pages Failing (Lob) : 0
Total Pages Processed (Other): 19617
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 178163
Total Pages Marked Corrupt : 23
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 552361684 (27.552361684)
有23個標記壞塊,檢視一下都分佈在哪些segment上:
在11g下:
通過以下方法獲取其 file_id 和 block_id.
獲取檔案號(file_id)的方法:
SQL> select dbms_utility.data_block_address_file(&Block) from dual;
Enter value for block: 8457504
old 1: select dbms_utility.data_block_address_file(&Block) from dual
new 1: select dbms_utility.data_block_address_file(8457504) from dual
DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(8457504)
---------------------------------------------
2
獲取塊號(block_id)的方法:
SQL> select dbms_utility.data_block_address_block(&Block) from dual;
Enter value for block: 8457504
old 1: select dbms_utility.data_block_address_block(&Block) from dual
new 1: select dbms_utility.data_block_address_block(8457504) from dual
DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(8457504)
----------------------------------------------
68896
通過以上兩個命令可以看到壞塊所在的位置為檔案號(file_id)為:2 ,塊號(block_id)為:68896。
用同樣的方法找出其它標記壞塊的檔案號和塊號:
檔案號均為2;塊號分別是:68896 68957 68961 70930 70934 70938 70943 70946 70976 70980 70984 71007 71011 71015 71019 71023 71024 71027 71028 71031 71035 71039 。
3、尋求恢復
需要檢查損壞的物件,使用以下SQL,對於不同的情況需要區別對待:
SQL> select tablespace_name,segment_type,owner,segment_name from dba_extents
where file_id=&file_id and &block_id between block_id and block_id+blocks-1;
old 2: where file_id=&file_id and &block_id between block_id and block_id+blocks-1
new 2: where file_id=2 and 68896 between block_id and block_id+blocks-1
TABLESPACE_NAME SEGMENT_TYPE OWNER SEGMENT_NAME
------------------ ----------------- ---------- ----------------------------
SYSAUX LOBSEGMENT SYS SYS_LOB0000006207C00004$$
發現是LOBSEGMENT,看看剩下的壞塊,發現都是LOBSEGMENT,集中在以下2個SEGMENT上:
TABLESPACE_NAME SEGMENT_TYPE OWNER SEGMENT_NAME
------------------ ----------------- ---------- ----------------------------
SYSAUX LOBSEGMENT SYS SYS_LOB0000006207C00004$$
SYSAUX LOBSEGMENT SYS SYS_LOB0000006213C00038$$
找到表名和LOB欄位,主要是以下2個:
SQL> select table_name, column_name from dba_lobs where segment_name = '&SEGMENT_NAME' and owner = 'SYS';
TABLE_NAME COLUMN_NAME
----------------- -------------
WRH$_SQLTEXT SQL_TEXT
TABLE_NAME COLUMN_NAME
----------------- -------------
WRH$_SQL_PLAN OTHER_XML
找到壞塊的bad rowid,使用以下plsql指令碼
SQL> create table bad_rows (row_id ROWID,oracle_error_code number);
SQL> set concat off
SQL> set serveroutput on
SQL> declare
n number;
error_code number;
bad_rows number := 0;
ora1578 EXCEPTION;
PRAGMA EXCEPTION_INIT(ora1578, -1578);
begin
for cursor_lob in (select rowid rid, &&lob_column from &&table_owner.&table_with_lob) loop
begin
n:=dbms_lob.instr(cursor_lob.&&lob_column,hextoraw('889911')) ;
exception
when ora1578 then
bad_rows := bad_rows + 1;
insert into bad_rows values(cursor_lob.rid,1578);
commit;
when others then
error_code:=SQLCODE;
bad_rows := bad_rows + 1;
insert into bad_rows values(cursor_lob.rid,error_code);
commit;
end;
end loop;
dbms_output.put_line('Total Rows identified with errors in LOB column: '||bad_rows);
end;
/
Enter value for lob_column: SQL_TEXT
Enter value for table_owner: SYS
Enter value for table_with_lob: WRH$_SQLTEXT
可以查詢bad rowid
SQL> select * from bad_rows;
我這裡查詢是no rows selected,有很多可能,不過WRH$是AWR使用的,對資料庫影響不大,因為沒有bad rowid,所以我這裡直接新建了備份表:
SQL> create table WRH$_SQLTEXT_bak as select * from WRH$_SQLTEXT;
SQL> create table WRH$_SQL_PLAN_bak as select * from WRH$_SQL_PLAN;
注意下,做這些操作前要先備份,因為sysaux有壞塊,所以exp table是不行的,但可以exp TABLESPACE,在exp過程中可能會報: EXP-00056: ORA-25153: Temporary Tablespace is Empty之類的錯誤,就是本文開頭的報錯,估計是sysaux壞塊導致的temp表空間資料檔案為空的問題,重新給temp新增資料檔案:ALTER TABLESPACE "TEMP" ADD TEMPFILE '/opt/app/oracle/oradata/data/temp01.dbf' SIZE 100M REUSE;即可。
建立完備份表,我們給原表改名:
SQL> alter table WRH$_SQLTEXT rename to del_WRH$_SQLTEXT;
SQL> alter table WRH$_SQL_PLAN rename to del_WRH$_SQL_PLAN;
給備份表改名:
SQL> alter table WRH$_SQLTEXT_bak rename to WRH$_SQLTEXT;
SQL> alter table WRH$_SQL_PLAN_bak rename to WRH$_SQL_PLAN;
至此,sysaux表空間可以使用了。
可以用exp table 來測試一下。
為了穩妥起見,也可以重新建立一個AWR(自動負載資訊庫)表:
SQL> sqlplus /nolog
SQL> connect / as sysdba
SQL> @?/rdbms/admin/catnoawr
SQL> alter system flush shared_pool;
SQL> @?/rdbms/admin/catawr.sql
SQL> @?/rdbms/admin/utlrp
另外,標記壞塊需要格式化才能去掉,這裡就不多說了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14184018/viewspace-1799950/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle清理SYSAUX表空間OracleUX
- 2.5.4.1 關於SYSAUX表空間UX
- RMAN修復壞塊
- AWR佔用sysaux表空間太大UX
- SYSAUX表空間清理之SM/OPTSTATUX
- 4.2.1.7 規劃 SYSTEM 和 SYSAUX 表空間UX
- sysaux 表空間爆滿處理方法UX
- oracle 普通表空間資料檔案壞塊Oracle
- oracle sysaux表空間滿了處理辦法OracleUX
- Oracle日常問題-壞塊修復Oracle
- 2.5.4 為 SYSAUX 表空間指定資料檔案屬性UX
- Oracle SYSAUX 表空間使用率100% 導致的DB 故障OracleUX
- 電腦硬碟分割槽表損壞怎麼修復?電腦硬碟分割槽表損壞的修復方法硬碟
- Oracle RMAN 表空間恢復Oracle
- Oracle案例08——xx.xx.xx.xx,表空間 SYSAUX 使用率>95%%OracleUX
- 記錄一次 HotPE 導致的檔案系統損壞及修復
- WPS文件損壞如何修復?WPS文件損壞的修復方法
- 筆記本硬碟壞了修復方法教程 膝上型電腦硬碟壞了怎麼修復?筆記硬碟
- 表空間TSPITR恢復-實驗
- 【Oracle 恢復表空間】 實驗Oracle
- 驗證ADG的壞塊檢測和自動修復
- OGG相關的CPATURE導致SYSAUX表空間異常暴增處理UX
- Oracle OCP(46):表空間、段、區、塊Oracle
- 16、表空間 建立表空間
- 記一次 Homestead 啟動故障修復
- SYSAUX表空間佔用過大情況下的處理(AWR資訊過多)UX
- linux下修復磁碟損壞Linux
- 行動硬碟壞道修復硬碟
- SYSTEM 表空間管理及備份恢復
- 【TUNE_ORACLE】檢視Oracle的壞塊在空閒空間中還是在已用空間中的SQL參考OracleSQL
- MySQL 磁碟空間滿導致表空間相關資料檔案損壞故障處理MySql
- 記錄一次Dataguard的修復過程
- [20190125]MSSM表空間塊ITL的LCK.txtSSM
- SQL Anywhere db檔案損壞修復 DB檔案修復 DB資料庫修復SQL資料庫
- win10系統硬碟分割槽表損壞的修復方法Win10硬碟
- MySQL資料庫INNODB表損壞修復處理過程分享MySql資料庫
- 記一次sshd無法啟動的修復
- [20190124]系統表空間塊ITL的LCK.txt
- [20150409]只讀表空間與延遲塊清除.txt