當前位置:成語大全網 - 書法字典 - oracle數據庫查詢遇到ora-1578錯誤時發生了什麽?ora-01578“ORACLE數據塊已損壞

oracle數據庫查詢遇到ora-1578錯誤時發生了什麽?ora-01578“ORACLE數據塊已損壞

如果您無法自行解決問題,也可以聯系MACLEAN的專業數據庫修復團隊。

ORA-01578錯誤是Oracle中常見的物理壞塊損壞錯誤。在10g之後,可以使用完整的備份和歸檔日誌在線恢復壞塊,前提是數據塊所在的磁道仍然物理可用。

以下是在沒有足夠備份的情況下對ORA-01578錯誤的解決方案,前提是可以容忍壞塊所在位置的數據丟失:

SQL & gtexec DBMS_STATS。GATHER _ DATABASE _ STATS

開始DBMS_STATS。GATHER _ DATABASE _ STATS結束;

*

第1行出錯:

ORA-01578: ORACLE數據塊已損壞(文件# 4,塊# 870212)

ORA-01110:數據文件4:

/s 01/oradata/g 10r 25/datafile/o 1 _ MF _ users _ 7 ch 7d 4 NX _。dbf

ORA-06512: at“系統DBMS_STATS“,第15188行

ORA-06512: at“系統DBMS_STATS“,第15530行

ORA-06512: at“系統DBMS_STATS“,第15674行

ORA-06512: at“系統DBMS_STATS“,第15638行

ORA-06512:在第1行

使用RMAN blockreocver命令嘗試修改物理壞塊:

RMAN & gt;blockrecover數據文件4塊870212;

開始塊恢復於2002年11月8日65438+開始

通道ORA_DISK_1:從備份條目1還原的塊

handle =/s 01/flash _ recovery _ area/g 10r 25/backupset/2012 _ 08 _ 06/o 1 _ MF _ nnndf _ tag 20120806t 075500 _ 81zd 4 njn _。bkp

標簽=標簽20120806T075500

通道ORA_DISK_1:塊恢復完成,耗時:00:01:16

開始媒體恢復

檔案館

日誌線程1序列467已經作為文件存在於磁盤上

/s 01/flash _ recovery _ area/g 10r 25/archive log/2012 _ 10 _ 31/o 1 _ MF _ 1 _ 467 _ 893571cm _。弧

檔案館

日誌線程1序列468已經作為文件存在於磁盤上

/s 01/flash _ recovery _ area/g 10r 25/archive log/2012 _ 10 _ 31/o 1 _ MF _ 1 _ 468 _ 893 PC 84 l _。弧

檔案館

日誌線程1序列469已經作為文件存在於磁盤上

/s 01/flash _ recovery _ area/g 10r 25/archive log/2012 _ 11 _ 01/o 1 _ MF _ 1 _ 469 _ 894 zs bym _。弧

檔案館

日誌線程1序列470已經作為文件存在於磁盤上

/s 01/flash _ recovery _ area/g 10r 25/archive log/2012 _ 11 _ 01/o 1 _ MF _ 1 _ 470 _ 896 b944 y _。弧

4_.弧

RMAN-00571:= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

RMAN-00569:= = = = = = = = = = = = = = = = = = =錯誤消息堆棧如下= = = = = = = = = = = = = = = = = =

RMAN-00571:= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

RMAN-03002:塊恢復命令在11/08/2012 06:19:40時失敗

RMAN-06053:由於缺少日誌,無法執行介質恢復

RMAN-06025:未找到要還原的日誌線程1 seq 466 low SCN 27762151的備份

RMAN-06025:未找到要還原的日誌線程1 seq 465 low SCN 27762145的備份

RMAN-06025:未找到要還原的日誌線程1 seq 464 low SCN 27762142的備份

由於缺少必要的歸檔日誌,Blockrecover無法成功,因此我們需要尋找另壹種方法。

首先,確認數據塊屬於哪個段。如果是索引數據,可以完全重建而不丟失數據,但如果是表數據,則需要容忍壞塊中的數據丟失:

SQL & gta20的col表空間名

SQL & gta10的列段類型

SQL & gta20的列段名

SQL & gta8的列所有者

SQL & gt選擇表空間名稱,段類型,所有者,段名稱

2來自dba_extents

3其中文件標識= & ampfileid

4和& ampblock_id和block_id + blocks之間的block id-1;

輸入fileid的值:4

舊3:其中文件標識= & ampfileid

新3:其中文件標識= 4

輸入blockid的值:870212

老四:和& amp塊標識和塊標識+塊之間的塊標識- 1

新4:塊標識和塊標識+塊之間的870212-1

表空間_名稱段_TY所有者段_名稱

- - - -

用戶表SYS CORRUPT_ME

SQL & gtselect count(*)from CORRUPT _ ME;

select count(*)from CORRUPT _ ME

*

第1行出錯:

ORA-01578: ORACLE數據塊已損壞(文件# 4,塊# 870212)

ORA-01110:數據文件4:

/s 01/oradata/g 10r 25/datafile/o 1 _ MF _ users _ 7 ch 7d 4 NX _。dbf

SQL & gt分析表corrupt_me驗證結構;

分析表corrupt_me驗證結構

*

第1行出錯:

ORA-01498:塊檢查失敗-請參閱跟蹤文件

SQL & gtoradebug setmypid

報表已處理。

SQL & gtoradebug跟蹤文件名稱

/s 01/admin/g 10r 25/udump/g 10r 25 _ ora _ 19749 . TRC

相對於dba的損壞塊:0x010d4744(文件4,塊870212)

讀取緩沖區時發現錯誤標題

壞塊中的數據:

類型:6格式:2 rdba: 0x000d4744

上次更改SCN:0x 0000.0000000 seq:0x ff flg:0x 04

spare 1:0x 0 spare 2:0x 0 spare 3:0x 0

尾部的壹致性值:0x000006ff

檢查塊頭中的值:0x6323

計算模塊校驗和:0x0

重新讀取rdba: 0x010d4744(文件4,塊870212)發現了相同的損壞數據

*** 2012-11-08 06:23:12.564

表掃描:段:文件# 4塊# 870211

跳過損壞的塊文件# 4塊# 870212

*** 2012-11-08 06:23:36.955

表掃描:段:文件# 4塊# 870211

跳過損壞的塊文件# 4塊# 870212

跳過rdba處損壞的塊:0x010d4744

使用10231級別10來避免ORA-01578錯誤並復制原始壞塊表:

SQL & gtalter session set事件“10231永遠跟蹤名稱上下文,級別10”;

會話已更改。

SQL & gtselect count(*)from CORRUPT _ ME;

計數(*)

-

50857

SQL & gt將表corrupt_me_copy表空間用戶創建為select * from CORRUPT _ ME

表已創建。

SQL & gt分析表corrupt_me_copy驗證結構;

表格已分析。

此後,您只需將新表重命名為舊表並重建索引:

SQL & gt將表corrupt_me重命名為corrupt _ me _ copy 1;

表格已更改。

SQL & gt將表corrupt_me_copy重命名為corrupt _ me;

表格已更改。

SQL & gt重建索引