我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ORACLE数据库文件丢失后的恢复测试

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ORACLE数据库文件丢失后的恢复测试

一、测试环境

数据库版本是11GR2,在做完一份完全备份之后,关机,做一份快照,每一次开机之后都执行数次alter system switch logfile以产生归档日志。

之后的测试都是基于这么一个完全备份来恢复。

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/%F';

backup incremental level 0 format '/backup/%T_%f' database;

 

二、数据文件丢失的测试

2.1丢失所有数据文件的测试

  1.启动数据库至mount状态

  startup mount;

2.启动RMAN

[oracle@mycentos orcl]$ rman target /

3.还原数据库

RMAN>restore database;

4.恢复数据库

RMAN>recover database;

 

恢复完成之后,查看各个文件的状态是否正常。

select file_name,file_id,status from dba_data_files;

--查看临时表空间文件

select status,enabled, name, bytes/1024/1024 file_size

from v$tempfile;

select file_name from dba_temp_files;

 

2.2丢失单个数据文件的测试

2.2.1非关键数据文件丢失

  以丢失数据文件’/u01/app/oracle/oradata/orcl/users01.dbf’为例,当数据库处于未崩溃状态时

  1)alter database datafile'/u01/app/oracle/oradata/orcl/users01.dbf' offline;

  2)RMAN 模式下restore/recover数据文件

  restore datafile '/u01/app/oracle/oradata/orcl/users01.dbf';

  recover datafile '/u01/app/oracle/oradata/orcl/users01.dbf'

  3)数据文件上线

  alter database datafile'/u01/app/oracle/oradata/orcl/users01.dbf' online;

当数据库因意外而崩溃时:

[oracle@mycentos ~]$ sqlplus /nolog

SQL> conn /as sysdba

SQL> startup;

ORA-01157: cannot identify/lock data file 4 - see DBWR trace file

ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'

--可以直接先启动至mount状态

启动RMAN:

  restore datafile '/u01/app/oracle/oradata/orcl/users01.dbf';

  recover datafile '/u01/app/oracle/oradata/orcl/users01.dbf'

  alter database datafile'/u01/app/oracle/oradata/orcl/users01.dbf' online;

  alter database open;

非关键数据文件丢失后,先使数据文件处于offline状态,在恢复数据文件之后,再将其转成online状态。

 


2.2.2关键数据文件丢失

[oracle@mycentos orcl]$ rm system01.dbf;

关闭数据库后,过程与崩溃后恢复数据非关键数据文件的过程一样。

 

三、日志文件丢失的测试

  当前的配置是所有的group都只有一个成员,在group1中新增一个成员,使其变成2个成员,其他group仍然只有一个成员。

 

3.1丢失inactive日志文件的恢复测试

  删除第二个日志组,并且模拟数据库崩溃

  在未关机状态下,数据库能继续运行,但是日志文件中会有告警信息。

    shutdown abort;

    startup mount;

    alter database clear unarchived logfile group 2; #此命令会重建第二组日志文件

    alter database open;


  删除第一组日志的一个成员:

    rm redo01.log

    shutdown abort;

    startup;

  数据库可以正常打开。redo01.log的状态变成了INVALID.

  使用alter database clear unarchived logfile group 1;重建日志文件


3.2丢失CURRENT日志文件的恢复测试

  当第一组为CURRENT或actives时,删除第一组日志的一个成员,数据库可以正常打开。

  第三组为CURRENT,并且只有一个成员时,删除第三组的日志。

  startup 命令报错,并且在执行clear unarchived logfile时会报

  ORA-01624: log 3 needed for crash recovery of instance orcl (thread 1)的错误。

  alter database open;#会报ORA-00313的错误

  因此需要用其他方式来打开数据库:

方法一:使用不完全恢复:

  RMAN>RESTORE DATABASE;

  RMAN>RECOVER DATABASE UNTIL TIME 'SYSDATE-5/1440';#具体的时间可以看归档日志的生成时间

  SQL>alter database open resetlogs;

方法二:直接使用不完全恢复,不用RMAN。

  SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

  SQL>shutdown abort;

  SQL>startup mount;

  SQL> recover database until cancel;

  SQL> alter database open resetlogs;


3.3丢失归档日志文件,并且需要恢复数据库。

使用RMAN不完全恢复至某一个时间点。

3.4丢失所有联机重做日志文件的测试

参照丢3.2失CURRENT日志文件的恢复测试

 

 

四、丢失控制文件的测试

4.1当控制文件有多个副本时,删除其中一个控制文件,模拟数据库崩溃的情况。

在数据库关闭的情况下,将副本复制成已删除的控制文件的名字,能正常打开数据库。

4.2 控制文件所有成员丢失,模拟数据库崩溃

4.2.1 有备份控制文件的情况下,使用备份的控制文件恢复数据库。

SQL>startup nomount;

RMAN>set dbid 1443678834#可以查看备份的控制文件获得DBID

RMAN>restore controlfile from '/backup/c-1443678834-20160723-00';

SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

SQL>shutdown abort;

  SQL>startup mount;

  SQL> recover database using backup controlfile until cancel;

    #输入AUTO,应用归档日志后,再输入一遍recover database .......,输入online redo的路径+名称

  SQL> alter database open resetlogs;#数据不会丢失

  #有需要的话要重建临时表空间

  #ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf' SIZE 1G;


4.2.2 没有备份的控制文件,则需要重建控制文件。

在删除控制文件之前,获取控制文件的创建语句:

1)alter database backup controlfile to trace as '/home/oracle/crontol_trace.trc';

2)从/home/oracle/crontol_trace.trc文件中获得如下语句:

CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 4 '/u01/app/oracle/oradata/orcl/redo_04.log'  SIZE 50M BLOCKSIZE 512

DATAFILE

  '/u01/app/oracle/oradata/orcl/system01.dbf',

  '/u01/app/oracle/oradata/orcl/sysaux01.dbf',

  '/u01/app/oracle/oradata/orcl/undotbs01.dbf',

  '/u01/app/oracle/oradata/orcl/users01.dbf',

  '/u01/app/oracle/oradata/orcl/test_01.dbf',

  '/u01/app/oracle/oradata/orcl/test_02.dbf'

CHARACTER SET ZHS16GBK;

如果没有使用1)中的语句获取创建语句,也可以根据实际情况重建控制文件。

删除所有的控制文件,并且模拟数据库崩溃。

恢复的过程如下:

1)startup nomount;

2)执行创建控制文件的语句,直接复制语句或放在脚本里均可。

3)之后执行:

SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

SQL>shutdown abort;

  SQL>startup mount;

  SQL> recover database using backup controlfile until cancel;

    #输入AUTO,应用归档日志后,再输入一遍recover database .......,输入online redo的路径+名称

  SQL> alter database open resetlogs;#数据不会丢失

    重建临时表空间

    ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf' SIZE 1G;


五、在只有一份备份的情况下,其余文件均丢失后,打开数据库

在数据库崩溃之后:

1)启动数据库至nomount,开启RMAN并设置dbid

SQL>startup nomount;

RMAN>set dbid 1443678834

2)还原控制文件

RMAN>restore controlfile from '/backup/c-1443678834-20160723-00';

SQL>alter database mount;

3)还原数据文件

  RMAN>restore database;

4)执行不完全恢复:

    SQL>alter system set "_allow_resetlogs_corruption"=true scope=spfile;

    SQL>shutdown abort;

    SQL>startup mount;

    SQL> recover database using backup controlfile until cancel;

  因为日志文件、归档日志文件都已经被删除,所以选择cancel不执行恢复。

    SQL> alter database open resetlogs;

  之后检查各文件是否正常。

 

 

六、总结

从模拟在线日志文件、控制文件丢失的过程中可以发现,当这些文件有副本时,可以很快地打开数据库,从而降低恢复数据库的难度。

 

 

 

 

 

 

 

 

 

 


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ORACLE数据库文件丢失后的恢复测试

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

linux系统中fsck后数据丢失的数据恢复方法

linux系统中fsck后数据丢失的数据恢复方法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、基于linux系统,fsck后数据丢失的数据恢复方案二、解决方案2.1 恢复流
2023-06-05

Oracle数据库使用DMP文件恢复数据

要使用DMP文件恢复Oracle数据库中的数据,可以按照以下步骤进行操作:1. 在Oracle数据库服务器上找到DMP文件,并确保数据库版本与DMP文件版本匹配。如果版本不匹配,需要使用相应版本的Oracle数据库工具进行数据导入。2. 登
2023-09-17

CMS织梦数据库文件丢失后的应急措施

CMS是网站内容管理系统的缩写,其中织梦(DedeCMS)是一款较为常用的开源CMS系统之一。数据库是织梦系统中存储网站数据的重要部分,如果数据库文件丢失,会导致网站无法正常访问和运行。在遇到这种情况时,我们需要立即采取应急措施来修复问题,
CMS织梦数据库文件丢失后的应急措施
2024-03-13

操作系统文件系统复原的艺术:恢复丢失数据的救星

计算机系统遇到问题时,文件系统可能会损坏,导致数据丢失。本文介绍了操作系统文件系统复原的艺术,提供实用技术和代码演示,帮助您恢复丢失的数据,避免数据灾难。
操作系统文件系统复原的艺术:恢复丢失数据的救星
2024-03-04

Oracle数据库ODBC连接与数据备份的验证与恢复测试

要验证Oracle数据库的ODBC连接,可以通过以下步骤进行:确保ODBC数据源已正确配置:打开ODBC数据源管理器,在“系统DSN”或“用户DSN”选项卡中确认是否已创建了正确的数据源,包括正确的数据库名称、用户名和密码等信息。测试ODB
Oracle数据库ODBC连接与数据备份的验证与恢复测试
2024-07-16

学习Python文件备份和恢复技术,让您的数据永不丢失!

本篇文章主要介绍Python中文件权限管理以及文件备份和恢复的相关知识。

Oracle RMAN备份恢复实战:应对数据丢失的巨大挑战!

本文将介绍Oracle RMAN备份恢复的实战技巧,帮助您应对数据丢失的挑战,并确保数据库的安全性和可用性。
数据库Oracle2024-11-30

编程热搜

目录