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搭配的一些建议

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/300631.html<

(0)
管理的头像管理
上一篇2025-05-23 23:16
下一篇 2025-05-23 23:18

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注