程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 數據庫崩潰 如何恢復?

數據庫崩潰 如何恢復?

編輯:Oracle數據庫基礎

昨天,一個朋友公司的數據庫崩潰。

  這再次印證了我反復提到的一個命題:數據庫也需要休息。

  每逢節假日,數據庫也經常會自我選擇放假。

  以前我說:年終難終 進入數據庫事故多發期,一年一度今又是,記得另外一個聖誕節,我還和Biti一起在北京的時候,同樣遇到一個上海的朋友數據庫崩潰,我們遠程指導這位朋友恢復了數據。

  這次的事情是這樣的。

  1.首先主機宕機,磁盤出錯

  看到以下這類錯誤,一般你的數據都很危險了


  Dec 24 13:52:13 kernel: sda5: rw=0, want=18298437640, limit=163846872 
  Dec 24 13:52:13 kernel: attempt to Access beyond end of device 
  Dec 24 13:52:13 kernel: sda5: rw=0, want=10384710304, limit=163846872 
  Dec 24 13:52:13 kernel: attempt to Access beyond end of device 
  Dec 24 13:52:13 kernel: sda5: rw=0, want=8756273744, limit=163846872
  Dec 24 13:52:13 kernel: attempt to Access beyond end of device 
  Dec 24 13:52:13 kernel: sda5: rw=0, want=5023902272, limit=163846872
  Dec 24 13:52:13 kernel: attempt to Access beyond end of device 
  Dec 24 13:52:13 kernel: sda5: rw=0, want=6730428824, limit=163846872
  Dec 24 13:52:13 kernel: attempt to Access beyond end of device 
  Dec 24 13:52:13 kernel: sda5: rw=0, want=8884660792, limit=163846872
  Dec 24 13:52:13 kernel: attempt to Access beyond end of device 
  Dec 24 13:52:13 kernel: sda5: rw=0, want=9182513808, limit=163846872
  Dec 24 13:52:13 kernel: attempt to Access beyond end of device 
  Dec 24 13:52:13 kernel: sda5: rw=0, want=5002858800, limit=163846872
  Dec 24 13:52:13 kernel: attempt to Access beyond end of device 
  Dec 24 13:52:13 kernel: sda5: rw=0, want=6730428824, limit=163846872
  Dec 24 13:52:13 kernel: attempt to Access beyond end of device 
  Dec 24 13:52:13 kernel: sda5: rw=0, want=15872410168, limit=163846872 

  2.數據文件大量損壞

  當然這次也不例外,大量文件損壞,dbv大量如下錯誤:

 [Oracle@stat datafile]$ dbv file=o1_mf_system_29448mn7_.dbf blocksize=8192 
  DBVERIFY: Release 10.2.0.2.0 - Production on Thu Dec 25 22:17:52 2008 
  Copyright (c) 1982, 2005, Oracle. All rights reserved. 
  DBVERIFY - Verification starting : FILE = o1_mf_system_29448mn7_.dbf
  Page 40 is influx - most likely media corrupt 
  Corrupt block relative dba: 0x00400028 (file 1, block 40) 
  Fractured block found during dbv: 
  Data in bad block: 
  type: 6 format: 2 rdba: 0x00400028 
  last change scn: 0x0000.18990f0e seq: 0x1 flg: 0x06 
  spare1: 0x0 spare2: 0x0 spare3: 0x0 
  consistency value in tail: 0xbc120601 
  check value in block header: 0xc0cb 
  computed block checksum: 0xb003 
  Page 232 is influx - most likely media corrupt 
  Corrupt block relative dba: 0x004000e8 (file 1, block 232) 
  Fractured block found during dbv: 
  Data in bad block: 
  type: 6 format: 2 rdba: 0x004000e8 
  last change scn: 0x0000.18991b98 seq: 0x1 flg: 0x06 
  spare1: 0x0 spare2: 0x0 spare3: 0x0 
  consistency value in tail: 0x6c440601 
  check value in block header: 0x8d7f 
  computed block checksum: 0x77dc

  3.控制文件損壞

  啟動數據庫出現如下錯誤:


  Wed Dec 24 17:08:52 2008 
  ALTER DATABASE MOUNT 
  Wed Dec 24 17:08:56 2008 
  Errors in file /opt/Oracle/admin/stat/udump/stat_ora_4630.trc: 
  ORA-00600: internal error code, arguments: [kccpb_sanity_check_2], [11258908], [10375171], [0x0], [], [], [], [] 
  Wed Dec 24 17:08:57 2008 
  ORA-600 signalled during: ALTER DATABASE MOUNT... 
  Wed Dec 24 17:09:01 2008 
  Starting Oracle instance (normal) 
  Wed Dec 24 17:16:22 2008 
  Corrupt block 1 found during reading backup pIEce, file=/opt/Oracle/product/db10g/dbs/snapcf_stat.f, corr_type=2

4.經過反復確認,這個環境Over了

  5.不完全的備份

  以前的備份機制使得我可以從遠程主機找到一系列備份集,但是沒有控制文件。

  通過備份集、dbms_backup_restore等手段,首先恢復出來數據文件,然後嘗試啟動數據庫

  6.強制打開

  通過強制resetlogs手段打開數據庫,出現ORA-600 4000錯誤


  Wed Dec 24 18:56:00 2008 
  Errors in file /opt/Oracle/admin/stat/udump/stat_ora_21479.trc:
  ORA-00600: internal error code, arguments: [4000], [15], [], [], [], [], [], [] 
  Wed Dec 24 18:56:01 2008 
  Errors in file /opt/Oracle/admin/stat/udump/stat_ora_21479.trc: 
  ORA-00704: bootstrap process failure 
  ORA-00704: bootstrap process failure 
  ORA-00600: internal error code, arguments: [4000], [15], [], [], [], [], [], []

  7.通過BBED解決ORA-600 4000錯誤

  這個沒說的,只能通過BBED搞定了,修復有問題的數據塊,再次嘗試打開數據庫

  8.遇到ORA-600 2662錯誤

  這個錯誤就好解決了,通過我網站上的示例就可以解決:


  Wed Dec 24 21:13:17 2008 
  Errors in file /opt/Oracle/admin/stat/udump/stat_ora_28316.trc: 
  ORA-00600: internal error code, arguments: [2662], [0], [412717646], [0], [412772634], [8389633], [], [] 
  ORA-01092: Oracle instance terminated. Disconnection forced 
  ORA-00600: internal error code, arguments: [2662], [0], [412717644], [0], [412772634], [8389633], [], [] 
  Wed Dec 24 21:13:18 2008 
  Errors in file /opt/Oracle/admin/stat/udump/stat_ora_28316.trc: 
  ORA-00600: internal error code, arguments: [2662], [0], [412717647], [0], [412772634], [8389633], [], [] 
  ORA-00600: internal error code, arguments: [2662], [0], [412717646], [0], [412772634], [8389633], [], [] 
  ORA-01092: Oracle instance terminated. Disconnection forced 
  ORA-00600: internal error code, arguments: [2662], [0], [412717644], [0], [412772634], [8389633], [], [] 
  Wed Dec 24 21:13:18 2008 
  Errors in file /opt/Oracle/admin/stat/udump/stat_ora_28316.trc: 
  ORA-00600: internal error code, arguments: [2662], [0], [412717647], [0], [412772634], [8389633], [], [] 
  ORA-00600: internal error code, arguments: [2662], [0], [412717646], [0], [412772634], [8389633], [], [] 
  ORA-01092: Oracle instance terminated. Disconnection forced 
  ORA-00600: internal error code, arguments: [2662], [0], [412717644], [0], [412772634], [8389633], [], []

9.解決ORA-600 4097號錯誤

  接下來繼續出現ORA-600 4097號錯誤,這個也好解決,搞定UNDO表空間就Ok了


  Wed Dec 24 21:18:12 2008 
  Errors in file /opt/Oracle/admin/stat/bdump/stat_j000_28723.trc: 
  ORA-00600: internal error code, arguments: [4097], [], [], [], [], [], [], []

  10.解決一些其他小問題

  此處省略10000字,終於搞定了用戶數據庫!

  這個案例所用到的所有知識在我的網站上全都有詳細介紹,不過要能把所有知識綜合運用才能解決這次的故障。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved