失误引起Oracle数据库大恢复的解决办法


  本文标签:Oracle数据库

  本文主要是通过介绍Oracle数据库恢复的相关实际应用语句来引出如何恢复正常的Oracle数据库,如果你在Oracle数据库存在不解之处时,你不妨浏览下面的文章,希望你能从中获得自己想要的东西  。

  事情起由是在Oracle 10g手动建库脚本中看到dbms_backup_restore.zerodbid(0)过程,其中作用是修改数据库的dbid  。于是想通过该存储直接在sqlplus中执行修改dbid  。

  修改之前记录其dbid

  引用

  

  1. SQL> select dbid from v$database;  
  2. DBID  
  3. 1488207495   

  

  修改dbid

  引用

  

  1. SQL> exec dbms_backup_restore.zerodbid(0);  
  2. PL/SQL procedure successfully completed.  

  

  貌似执行成功了,但随后alert日志显示ckpt进程将数据实例终止

  引用

  

  1. Tue Mar 9 01:43:22 2010  
  2. CKPT: terminating instance due to error 1242  
  3. Instance terminated by CKPT, pid = 16653 
  4. Tue Mar 9 01:43:53 2010  

  

  再次启动Oracle数据库报错

  引用

  

  1. Tue Mar 9 01:56:09 2010  
  2. Errors in file /ora10g/app/admin/ldbra/udump
    /ldbra_ora_12275.trc:  
  3. ORA-01221: data file 1 is not the same file
     to a background process  
  4. ORA-1221 signalled during: ALTER DATABASE OPEN...  

  

  dump Oracle数据文件头

  引用

  

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

  

  通过跟踪文件可以看到dbid以被重置为0

  引用

  

  1. V10 STYLE FILE HEADER:  
  2. Compatibility Vsn = 169870080=0xa200300  
  3. Db ID=0=0x0, Db Name=LDBRA 
  4. Activation ID=0=0x0  
  5. Control Seq=8122=0x1fba, File size=65280=0xff00  
  6. File Number=1Blksiz=8192, File Type=3 DATA  

  

  还有一种途径是通过bbed工具观察

  引用

  

  1. struct kcvfhhdr, 76 bytes @20  
  2. ub4 kccfhswv @20 0x00000000  
  3. ub4 kccfhcvn @24 0x0a200300  
  4. ub4 kccfhdbi @28 0x00000000  

  

  当然第一反应是重建控制文件,看看能不能恢复成功

  引用

  

  1. SQL> alter database backup controlfile to trace;  
  2. Database altered.  
  3. STARTUP NOMOUNT  
  4. CREATE CONTROLFILE REUSE DATABASE "LDBRA" 
    RESETLOGS ARCHIVELOG  
  5. MAXLOGFILES 16  
  6. MAXLOGMEMBERS 3  
  7. MAXDATAFILES 100  
  8. MAXINSTANCES 8  
  9. MAXLOGHISTORY 292  
  10. LOGFILE  
  11. GROUP 1 /ora10g/app/oradata/ldbra/redo01.log SIZE 50M,  
  12. GROUP 2 /ora10g/app/oradata/ldbra/redo02.log SIZE 50M,  
  13. GROUP 3 /ora10g/app/oradata/ldbra/redo03.log SIZE 50M  
  14. STANDBY LOGFILE  
  15. DATAFILE  
  16. /ora10g/app/oradata/ldbra/system01.dbf,  
  17. /ora10g/app/oradata/ldbra/undotbs01.dbf,  
  18. /ora10g/app/oradata/ldbra/sysaux01.dbf,  
  19. /ora10g/app/oradata/ldbra/users01.dbf,  
  20. /ora10g/app/oradata/ldbra/example01.dbf,  
  21. /ora10g/app/product/10.2.0/db_1/dbs/company.dbf,  
  22. /ora10g/app/product/10.2.0/db_1/dbs/streams.dbf  
  23. CHARACTER SET ZHS16GBK  
  24. ;  

  

  以上的相关内容就是对如何解决一次误操作引起的Oracle数据库大恢复的部分内容介绍,望你能有所收获  。