熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

一次誤操作引起的Oracle數據庫大恢復

2013-11-13 16:23:20  來源: Oracle 

  事情起由是在Oracle g手動建庫腳本中看到dbms_backup_restorezerodbid()過程其中作用是修改數據庫的dbid於是想通過該存儲直接在sqlplus中執行修改dbid

  修改之前記錄其dbid

  引用

  SQL> select dbid from v$database;

  DBID

  

  

  修改dbid

  引用

  SQL> exec dbms_backup_restorezerodbid();

  PL/SQL procedure successfully completed

  貌似執行成功了但隨後alert日志顯示ckpt進程將數據實例終止

  引用

  Tue Mar  ::

  CKPT: terminating instance due to error

  Instance terminated by CKPT pid =

  Tue Mar  ::

  再次啟動數據庫報錯

  引用

  Tue Mar  ::

  Errors in file /orag/app/admin/ldbra/udump/ldbra_ora_trc:

  ORA: data file is not the same file to a background process

  ORA signalled during: ALTER DATABASE OPEN

  dump Oracle數據文件頭

  引用

  SQL> ALTER SESSION SET EVENTS immediate trace name file_hdrs level ;

  通過跟蹤文件可以看到dbid以被重置為

  引用

  V STYLE FILE HEADER:

  Compatibility Vsn = =xa

  Db ID==x Db Name=LDBRA

  Activation ID==x

  Control Seq==xfba File size==xff

  File Number= Blksiz= File Type= DATA

  還有一種途徑是通過bbed工具觀察

  引用

  struct kcvfhhdr bytes                @

  ub kccfhswv                          @       x

  ub kccfhcvn                          @       xa

  ub kccfhdbi                          @       x

  當然第一反應是重建控制文件看看能不能恢復成功

  引用

  SQL> alter database backup controlfile to trace;

  Database altered

  STARTUP NOMOUNT

  CREATE CONTROLFILE REUSE DATABASE LDBRA RESETLOGS  ARCHIVELOG

  MAXLOGFILES

  MAXLOGMEMBERS

  MAXDATAFILES

  MAXINSTANCES

  MAXLOGHISTORY

  LOGFILE

  GROUP /orag/app/oradata/ldbra/redolog  SIZE M

  GROUP /orag/app/oradata/ldbra/redolog  SIZE M

  GROUP /orag/app/oradata/ldbra/redolog  SIZE M

   STANDBY LOGFILE

  DATAFILE

  /orag/app/oradata/ldbra/systemdbf

  /orag/app/oradata/ldbra/undotbsdbf

  /orag/app/oradata/ldbra/sysauxdbf

  /orag/app/oradata/ldbra/usersdbf

  /orag/app/oradata/ldbra/exampledbf

  /orag/app/product//db_/dbs/companydbf

  /orag/app/product//db_/dbs/streamsdbf

  CHARACTER SET ZHSGBK

  ;

  郁悶的是重建控制文件不成功

  引用

  CREATE CONTROLFILE REUSE DATABASE LDBRA RESETLOGS  NOARCHIVELOG

  *

  ERROR at line :

  ORA: CREATE CONTROLFILE failed

  ORA: log  is inconsistent with other logs

  想到還有另外一種語法重建控制文件(重建控制文件之前備份controlfile和online redolog)

  引用

  Create controlfile reuse set database LDBRA

  MAXINSTANCES

  MAXLOGHISTORY

  MAXLOGFILES

  MAXLOGMEMBERS

  MAXDATAFILES

  Datafile

  /orag/app/oradata/ldbra/systemdbf

  /orag/app/oradata/ldbra/undotbsdbf

  /orag/app/oradata/ldbra/sysauxdbf

  /orag/app/oradata/ldbra/usersdbf

  /orag/app/oradata/ldbra/exampledbf

  /orag/app/product//db_/dbs/ companydbf

  /orag/app/product//db_/dbs/streamsdbf

  LOGFILE GROUP (/orag/app/oradata/ldbra/redolog) SIZE K

  GROUP (/orag/app/oradata/ldbra/redolog) SIZE K

  GROUP (/orag/app/oradata/ldbra/redolog) SIZE K RESETLOGS;

  似乎重建成功了!但是進行recover的時候報錯了!

  引用

  SQL> RECOVER DATABASE USING BACKUP CONTROLFILE;

  ORA: recovery session canceled due to errors

  ORA: internal error code arguments: [kcvhvdf_] [] [] [] [] [] []

  []

  可以看到控制文件在重建的過程中進行了dbid重置

  引用

  SQL> select dbid from v$database;

  DBID

  

  

  問題到這裡似乎失去了頭緒呵呵拷回之前備份的控制文件替換剛建的控制文件因為我采用的是resetlog選項創建控制文件從理論上來講應該是會重置redolog的即重新創建redolog但是目前采用此選項確報ORA錯誤不可思議!後來一想可能是跟數據文件中的dbid為有關於是采用終極修復方法bbed!首先將所有數據文件的dbid用bbed工具重置為其次將fuzzy標記打為x(因為數據庫被ckpt進程異常終止將標記打為x表示數據庫是shutdown immediate關閉)采用上述方法之後控制文件成功創建!

  引用

  SQL> STARTUP NOMOUNT

  CREATE CONTROLFILE REUSE DATABASE LDBRA RESETLOGS  ARCHIVELOG

  MAXLOGFILES

  MAXLOGMEMBERS

  MAXDATAFILES

  MAXINSTANCES

  MAXLOGHISTORY

  LOGFILE

  ORACLE instance started

  Total System Global Area bytes

  Fixed Size                  bytes

  Variable Size             bytes

  Database Buffers          bytes

  Redo Buffers                bytes

  GROUP /orag/app/oradata/ldbra/redolog  SIZE M

  GROUP /orag/app/oradata/ldbra/redolog  SIZE M

  GROUP /orag/app/oradata/ldbra/redolog  SIZE M

   STANDBY LOGFILE

  DATAFILE

  /orag/app/oradata/ldbra/systemdbf

  /orag/app/oradata/ldbra/undotbsdbf

  /orag/app/oradata/ldbra/sysauxdbf

  /orag/app/oradata/ldbra/usersdbf

  /orag/app/oradata/ldbra/exampledbf

  /orag/app/product//db_/dbs/companydbf

  /orag/app/product//db_/dbs/streamsdbf

  CHARACTER SET ZHSGBK

    ;

  Control file created

  嘗試打開數據庫

  SQL> alter database open RESETLOGS;

  出現數據庫掛起狀態後台alert日志顯示[]錯誤呵呵看到這個錯誤希望就來了!

  引用

  SMON: enabling cache recovery

  Tue Mar  ::

  Errors in file /orag/app/admin/ldbra/udump/ldbra_ora_trc:

  ORA: internal error code arguments: [] [] [] [] [] [] [] []

  Tue Mar  ::

  Errors in file /orag/app/admin/ldbra/udump/ldbra_ora_trc:

  ORA: internal error code arguments: [] [] [] [] [] [] [] []

  Tue Mar  ::

  由於shutdown abort實例不起作用就采用殺Oracle進程刪除共享內存段的做法將掛起的數據庫實力強制abort

  殺Oracle核心進程

  引用

  [orag@test bdump]$ ps ef|grep ora_

  orag          Feb ?        :: ora_pmon_streams

  orag          Feb ?        :: ora_psp_streams

  orag          Feb ?        :: ora_mman_streams

  orag          Feb ?        :: ora_dbw_streams

  orag          Feb ?        :: ora_lgwr_streams

  orag          Feb ?        :: ora_ckpt_streams

  orag          Feb ?        :: ora_smon_streams

  orag          Feb ?        :: ora_reco_streams

  orag          Feb ?        :: ora_cjq_streams

  orag          Feb ?        :: ora_mmon_streams

  orag          Feb ?        :: ora_mmnl_streams

  orag          Feb ?        :: ora_d_streams

  orag          Feb ?        :: ora_s_streams

  orag          Feb ?        :: ora_qmnc_streams

  orag          Feb ?        :: ora_q_streams

  orag          Feb ?        :: ora_q_streams

  orag          : ?        :: ora_j_streams

  orag     : pts/    :: grep ora_

  [orag@test bdump]$ kill

  刪除Oracle 共享內存段

  引用

  [orag@test bdump]$ ipcs

   Shared Memory Segments

  key        shmid      owner      perms      bytes      nattch     status

  xccbc     orag             

  xbb     orag           

   Semaphore Arrays

  key        semid      owner      perms      nsems

  xdec      orag           

   Message Queues

  key        msqid      owner      perms      usedbytes   messages

  [root@test ~]# ipcrm m

  [root@test ~]# ipcrm s

  再次嘗試將實例打開這裡用到了事件

  引用

  SQL> alter session set events trace name adjust_scn level ;

  Session altered

  SQL> alter database open;

  alter database open

  *

  ERROR at line :

  ORA: file needs media recovery

  ORA: data file : /orag/app/oradata/ldbra/systemdbf

  SQL> recover database;

  Media recovery complete

  SQL> alter database open;

  Database altered

  後續工作就是將tempfile添加到temp表空間中終於恢復成功

  引用

  SQL> alter tablespace temp add tempfile /orag/app/oradata/ldbra/tempdbf size m reuse;

  Tablespace altered


From:http://tw.wingwit.com/Article/program/Oracle/201311/18247.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.