Oracle数据库中各种类型的文件损坏与修复过程详解

数据库 Oracle
本文我们介绍了10中Oracle文件的损坏及恢复的过程,几乎涵盖了Oracle数据库中所有类型文件的损坏与恢复的方法,希望能够对您有所帮助。

Oracle数据库的文件有哪些种类呢?这些文件在什么情况下容易被损坏呢?损坏以后又该怎么样去修复呢?本文就介绍了这些内容,包括了10中Oracle文件的损坏与修复的过程,这10种文件几乎涵盖了Oracle数据库中所有类型的文件,接下来就让我们一起来了解一下这10种文件的损坏与修复的过程吧。

一、数据库服务器基本情况

OS:RHEL 3

CPU:4个Intel(R) Xeon(TM) MP CPU 2.70GHz

Mem:8G

Swap:16G

Disk:120G

Oracle Database 10g Enterprise Edition Release 10.1.0.3.0

二、备份方式

数据库以archive模式运行,RMAN多级增量备份。策略如下:

设置控制文件自动备份。

每三个月做一个数据库的全备份(包括所有得数据库和只读表空间),并备份归档日志。

每一个月做一次零级备份(不包含只读表空间),并备份归档日志。

每周做一次一级备份,并备份归档日志。

每天做一次二级备份,并备份归档日志。

三、恢复案例

所有恢复的前提:已经做过数据库全备份(包括归档日志),控制文件和spfile自动备份。

1.损坏一个数据文件

(1)故障模拟

删除数据文件:rm /u02/oradata/dbnms/users01.dbf

关闭数据库:shutdown immediate;

 

  1. ORA-01116: error in opening database file 4   
  2.  
  3. ORA-01110: data file 4: '/u02/oradata/dbnms/users01.dbf'   
  4.  
  5. ORA-27041: unable to open file   
  6.  
  7. Linux Error: 2: No such file or directory   
  8.  
  9. Additional information: 3  

 

强行关闭:sutdown abort;

启动数据库:startup;

 

  1. ORA-01157: cannot identify/lock data file 4 - see DBWR trace file   
  2.  
  3. ORA-01110: data file 4: '/u02/oradata/dbnms/users01.dbf'  

 

(2)恢复步骤

 

  1. rman target sys@dbnms catalog rmanuser@cata   
  2.  
  3. run{   
  4.  
  5. allocate channel c1 type disk;   
  6.  
  7. restore datafile 4;   
  8.  
  9. recover datafile 4;   
  10.  
  11. sql 'alter database datafile 4 online';   
  12.  
  13. sql 'alter database open';   
  14.  
  15. release channel c1;   
  16.  
  17. }   
  18.  
  19.  
  20. sqlplus sys as sysdba   
  21.  
  22. select instance_name,status from v$instance;   
  23.  
  24. INSTANCE_NAME STATUS   
  25.  
  26. ---------------- ------------   
  27.  
  28. dbnms OPEN  

 

恢复成功。

2.损坏全部数据文件

(1)故障模拟

删除数据文件:rm /u02/oradata/dbnms/*.dbf

强行关闭:sutdown abort;

启动数据库:startup;

 

  1. ORA-01157: cannot identify/lock data file 1 - see DBWR trace file   
  2.  
  3. ORA-01110: data file 1: '/u02/oradata/dbnms/system01.dbf'  

 

(2)恢复步骤

 

  1. rman target sys@dbnms catalog rmanuser@cata   
  2.  
  3. run{   
  4.  
  5. allocate channel c1 type disk;   
  6.  
  7. restore database;   
  8.  
  9. recover database;   
  10.  
  11. sql 'alter database open';   
  12.  
  13. release channel c1;   
  14.  
  15. }   
  16.  
  17. sqlplus sys as sysdba   
  18.  
  19. select instance_name,status from v$instance;   
  20.  
  21. INSTANCE_NAME STATUS   
  22.  
  23. ---------------- ------------   
  24.  
  25. dbnms OPEN 

 

恢复临时文件:

 

  1. alter database tempfile '/u02/oradata/dbnms/temp01.dbf' drop;   
  2.  
  3. alter tablespace temp add tempfile '/u02/oradata/dbnms/temp01.dbf' size 50M autoextend on next 5M maxsize unlimited;  

 

恢复成功。

3.损坏非当前联机日志成员

(1)故障模拟

删除日志文件:rm /u02/oradata/dbnms/redo01.log

关闭数据库:shutdown immediate;

启动数据库:startup;

 

  1. select * from v$logfile;   
  2.  
  3. GROUP# STATUS TYPE MEMBER IS_   
  4.  
  5. ---------- ------- ------- ------------------------------ ---   
  6.  
  7. 3 ONLINE /u02/oradata/dbnms/redo03.log NO   
  8.  
  9. 2 STALE ONLINE /u02/oradata/dbnms/redo02.log NO   
  10.  
  11. 1 INVALID ONLINE /u02/oradata/dbnms/redo01.log NO   
  12.  
  13. 1 STALE ONLINE /u02/oradata/dbnms/redo11.log NO   
  14.  
  15. 1 STALE ONLINE /u02/oradata/dbnms/redo21.log NO   
  16.  
  17. 2 STALE ONLINE /u02/oradata/dbnms/redo12.log NO   
  18.  
  19. 3 ONLINE /u02/oradata/dbnms/redo13.log NO   
  20.  
  21. 2 STALE ONLINE /u02/oradata/dbnms/redo22.log NO   
  22.  
  23. 3 ONLINE /u02/oradata/dbnms/redo23.log NO   
  24.  
  25. 4 ONLINE /u02/oradata/dbnms/redo31.log NO   
  26.  
  27. 4 ONLINE /u02/oradata/dbnms/redo32.log NO   
  28.  
  29. GROUP# STATUS TYPE MEMBER IS_   
  30.  
  31. ---------- ------- ------- ------------------------------ ---   
  32.  
  33. 4 ONLINE /u02/oradata/dbnms/redo33.log NO 

 

(2)恢复步骤

 

  1. alter database drop logfile member '/u02/oradata/dbnms/redo01.log';   
  2.  
  3. alter database add logfile member '/u02/oradata/dbnms/redo01.log' to group 1;  

 

恢复成功.

4.损坏非当前联机日志组

(1)故障模拟

删除日志文件组1的所有文件:

 

  1. rm /u02/oradata/dbnms/redo01.log   
  2.  
  3. rm /u02/oradata/dbnms/redo11.log   
  4.  
  5. rm /u02/oradata/dbnms/redo21.log  

 

关闭数据库:shutdown immediate;

启动数据库:startup;

 

  1. Database mounted.   
  2.  
  3. ORA-00313: open failed for members of log group 1 of thread 1   
  4.  
  5. ORA-00312: online log 1 thread 1: '/u02/oradata/dbnms/redo11.log'   
  6.  
  7. ORA-00312: online log 1 thread 1: '/u02/oradata/dbnms/redo21.log'   
  8.  
  9. ORA-00312: online log 1 thread 1: '/u02/oradata/dbnms/redo01.log'  

 

(2)恢复步骤

 

  1. alter database clear logfile group 1;  

 

如果该日志组还没有归档,则用:

 

  1. alter database clear unarchived logfile group 1;  

 

打开数据库:

 

  1. alter database open;  

 

恢复成功。

#p#

5.损坏全部联机日志

(1)故障模拟

删除日志文件:rm /u02/oradata/dbnms/*.log

关闭数据库:shutdown immediate;

启动数据库:startup;

 

  1. Database mounted.   
  2.  
  3. ORA-00313: open failed for members of log group 1 of thread 1   
  4.  
  5. ORA-00312: online log 1 thread 1: '/u02/oradata/dbnms/redo11.log'   
  6.  
  7. ORA-00312: online log 1 thread 1: '/u02/oradata/dbnms/redo21.log'   
  8.  
  9. ORA-00312: online log 1 thread 1: '/u02/oradata/dbnms/redo01.log'  

 

(2)恢复步骤

 

  1. shutdown immediate;   
  2.  
  3. create pfile from spfile;   
  4.  
  5. cd $ORACLE_HOME/dbs   
  6.  
  7. vi initdbnms.ora  

 

加一个参数:_allow_resetlogs_corruption=true

 

  1. create spfile from pfile;   
  2.  
  3. startup;   
  4.  
  5. Database mounted.   
  6.  
  7. ORA-00313: open failed for members of log group 1 of thread 1   
  8.  
  9. ORA-00312: online log 1 thread 1: '/u02/oradata/dbnms/redo11.log'   
  10.  
  11. ORA-00312: online log 1 thread 1: '/u02/oradata/dbnms/redo21.log'   
  12.  
  13. ORA-00312: online log 1 thread 1: '/u02/oradata/dbnms/redo01.log'   
  14.  
  15. recover database until cancel;   
  16.  
  17. alter database open resetlogs;  

 

同步catalog:

 

  1. rman target sys@dbnms catalog rmanuser@cata   
  2.  
  3. reset database;   
  4.  
  5. new incarnation of database registered in recovery catalog   
  6.  
  7. starting full resync of recovery catalog   
  8.  
  9. full resync complete  

 

做一个full备份:

 

  1. /home/oracle/dbbat/backup_full.sh 

 

恢复成功

6.损坏一个控制文件

(1)故障模拟

删除控制文件:rm /u02/oradata/dbnms/control01.ctl

关闭数据库:shutdown immediate;

 

  1. ORA-00210: cannot open the specified controlfile   
  2.  
  3. ORA-00202: controlfile: '/u02/oradata/dbnms/control01.ctl'   
  4.  
  5. ORA-27041: unable to open file   
  6.  
  7. Linux Error: 2: No such file or directory   
  8.  
  9. Additional information: 3  

 

(2)恢复步骤

拷贝一个好的控制文件:

 

  1. cp control02.ctl control01.ctl   
  2.  
  3. shutdown immediate;   
  4.  
  5. startup;   
  6.  
  7. Database mounted.   
  8.  
  9. ORA-01122: database file 1 failed verification check   
  10.  
  11. ORA-01110: data file 1: '/u02/oradata/dbnms/system01.dbf'   
  12.  
  13. ORA-01207: file is more recent than controlfile - old controlfile   
  14.  
  15. rman target sys@dbnms catalog rmanuser@cata   
  16.  
  17. run{   
  18.  
  19. allocate channel c1 type disk;   
  20.  
  21. restore database;   
  22.  
  23. recover database;   
  24.  
  25. sql 'alter database open';   
  26.  
  27. release channel c1;   
  28.  
  29. }   
  30.  
  31. RMAN-00571: ===========================================================   
  32.  
  33. RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============   
  34.  
  35. RMAN-00571: ===========================================================   
  36.  
  37. RMAN-03009: failure of sql command on default channel at 09/08/2005 17:29:04   
  38.  
  39. RMAN-11003: failure during parse/execution of SQL statement: alter database open   
  40.  
  41. ORA-00322: log 3 of thread 1 is not current copy   
  42.  
  43. ORA-00312: online log 3 thread 1: '/u02/oradata/dbnms/redo03.log'   
  44.  
  45. ORA-00312: online log 3 thread 1: '/u02/oradata/dbnms/redo13.log'   
  46.  
  47. ORA-00312: online log 3 thread 1: '/u02/oradata/dbnms/redo23.log'   
  48.  
  49. alter database clear unarchived logfile group 3;   
  50.  
  51. alter database open;  

 

恢复成功。

7.损坏全部控制文件

(1)故障模拟

删除控制文件:rm /u02/oradata/dbnms/control01.ctl

关闭数据库:shutdown immediate;

 

  1. ORA-00210: cannot open the specified controlfile   
  2.  
  3. ORA-00202: controlfile: '/u02/oradata/dbnms/control01.ctl'   
  4.  
  5. ORA-27041: unable to open file   
  6.  
  7. Linux Error: 2: No such file or directory   
  8.  
  9. Additional information: 3  

 

(2)恢复步骤

 

  1. shutdown abort;   
  2.  
  3. startup nomount;   
  4.  
  5. rman target sys catalog rmanuser@cata   
  6.  
  7. run{   
  8.  
  9. allocate channel c1 type disk;   
  10.  
  11. restore controlfile;   
  12.  
  13. restore database;   
  14.  
  15. sql 'alter database mount';   
  16.  
  17. recover database;   
  18.  
  19. sql 'alter database open resetlogs';   
  20.  
  21. release channel c1;   
  22.  
  23. }   
  24.  
  25. RMAN-00571: ===========================================================   
  26.  
  27. RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============   
  28.  
  29. RMAN-00571: ===========================================================   
  30.  
  31. RMAN-03002: failure of recover command at 09/08/2005 17:43:31   
  32.  
  33. RMAN-06054: media recovery requesting unknown log: thread 1 seq 9 lowscn 670233   
  34.  
  35. alter database open resetlogs;  

 

做一个full备份:

 

  1. /home/oracle/dbbat/backup_full.sh 

 

恢复成功

8.损坏临时数据文件

(1)故障模拟

删除临时数据文件:rm /u02/oradata/dbnms/temp01.dbf

关闭数据库:shutdown immediate;

启动数据库:startup;

(2)恢复步骤

 

  1. alter database tempfile '/u02/oradata/dbnms/temp01.dbf' drop;   
  2.  
  3. ERROR at line 1:   
  4.  
  5. ORA-01516: nonexistent log file, datafile, or tempfile   
  6.  
  7. "/u02/oradata/dbnms/temp01.dbf"   
  8.  
  9. alter tablespace temp add tempfile '/u02/oradata/dbnms/temp01.dbf' size 50M autoextend on next 5M maxsize unlimited;  

 

恢复成功

9.损坏spfile参数文件

(1)故障模拟

删除spfile文件:rm $ORACLE_HOME/dbs/spfiledbnms.ora

关闭数据库:shutdown immediate;

启动数据库:startup;

(2)恢复步骤

 

  1. startup nomount;   
  2.  
  3. rman target sys catalog rmanuser@cata   
  4.  
  5. restore spfile;   
  6.  
  7. shutdown immediate;   
  8.  
  9. startup;  

 

恢复成功

10.损坏全部文件(包括全部数据文件、控制文件、临时数据文件、联机日志文件)

(1)故障模拟

删除全部文件:rm /u02/oradata/dbnms/*

关闭数据库:shutdown immediate;

 

  1. ORA-03113: end-of-file on communication channel 

 

(2)恢复步骤

 

  1. sqlplus sys as sysdba   
  2.  
  3. startup nomount;   
  4.  
  5. rman target sys catalog rmanuser@cata  

 

还原控制文件:restore controlfile;

还原数据库:restore database;

mount 数据库:alter database mount;

恢复数据库:recover database;

 

  1. RMAN-00571: ===========================================================   
  2.  
  3. RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============   
  4.  
  5. RMAN-00571: ===========================================================   
  6.  
  7. RMAN-03002: failure of recover command at 09/09/2005 10:33:13   
  8.  
  9. RMAN-06054: media recovery requesting unknown log: thread 1 seq 19 lowscn 718284  

 

用resetlogs方式打开数据库:alter database open resetlogs;

 

  1. database opened   
  2.  
  3. new incarnation of database registered in recovery catalog   
  4.  
  5. starting full resync of recovery catalog   
  6.  
  7. full resync complete  

 

重建临时文件:

 

  1. sqlplus sys as sysdba   
  2.  
  3. alter database tempfile '/u02/oradata/dbnms/temp01.dbf' drop;   
  4.  
  5. ERROR at line 1:   
  6.  
  7. ORA-01516: nonexistent log file, datafile, or tempfile   
  8.  
  9. "/u02/oradata/dbnms/temp01.dbf"   
  10.  
  11. alter tablespace temp add tempfile '/u02/oradata/dbnms/temp01.dbf' size 50M autoextend on next 5M maxsize unlimited;  

 

执行一次全库备份:/home/oracle/dbbat/backup_full.sh,恢复成功。

关于Oracle数据库损坏文件的修复方法就就介绍到这里了,希望本次的介绍能够带给您一些收获吧!

 

【编辑推荐】

  1. 浅析Oracle 10g isqlplus使用DBA账户的方法
  2. Oracle数据库中如何检查索引碎片并重建索引
  3. 数据库优化技术之Oracle数据库动态绑定变量
  4. PL/SQL Developer导入导出数据库方法及说明
  5. 关于在极高负荷下Oracle redolog搭配的一些建议
责任编辑:赵鹏 来源: ChinaUnix博客
相关推荐

2010-02-04 11:32:01

数据交换技术

2009-12-24 17:19:13

WPF触发器

2024-03-08 12:04:22

PythonPillow验证码

2010-02-26 14:58:14

WCF单例模式

2010-02-25 10:29:17

WCF Transac

2019-06-12 08:57:43

Oracle数据库恢复

2023-10-27 07:03:22

字符串String类型

2010-01-19 16:56:46

交换机光纤端口

2021-04-20 08:32:56

苹果AppStore违规

2010-04-12 16:35:15

Oracle数据库

2021-10-20 06:02:41

网络钓鱼漏洞安全工具

2011-07-20 16:28:54

Oracle数据库shared pool

2010-01-18 11:13:59

光纤交换机接口

2010-04-02 17:11:45

Oracle数据库

2009-02-09 12:52:32

文件加密Oracle数据库

2011-09-02 14:09:47

OracleDML命令

2019-11-29 07:37:44

Oracle数据库索引

2015-12-10 10:13:22

2011-05-19 13:25:14

Oracle数据库

2023-03-05 16:25:38

NoSQL数据库
点赞
收藏

51CTO技术栈公众号