当前位置:  数据库>oracle

Oracle 11gR2数据库文件丢失后的恢复测试

    来源: 互联网  发布时间:2017-06-23

    本文导语: 一、测试环境数据库版本是Oracle 11gR2,在做完一份完全备份之后,关机,做一份快照,每一次开机之后都执行数次alter system switch logfile以产生归档日志。 之后的测试都是基于这么一个完全备份来恢复。CONFIGURE CONTROLFILE AUTOBACKUP FO...

一、测试环境
数据库版本是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;
  之后检查各文件是否正常。
 
 
六、总结
从模拟在线日志文件、控制文件丢失的过程中可以发现,当这些文件有副本时,可以很快地打开数据库,从而降低恢复数据库的难度。


    
 
 

您可能感兴趣的文章:

  • RedHat8上解压Oracle9磁盘丢失磁盘空间,请大虾帮忙!
  • 基于oracle小数点前零丢失的问题分析
  • oracle中fdisk导致的ASM磁盘数据丢失的解决方法
  • Oracle重做日志文件损坏或丢失后的恢复
  • Oracle 密码丢失解决方法祥述
  • oracle下实现恢复一个丢失的数据文件的代码
  • Oracle控制文件的损坏或完全丢失的恢复办法
  • Oracle数据库恢复后心得
  • 关于系统重装后Oracle数据库完全恢复的解决办法
  • oracle drop table(表)数据恢复方法
  • Oracle数据库备份和恢复工具 RMan
  • oracle备份恢复的具体方法
  • oracle中误删除表后恢复语句(FLASHBACK)
  • oracle冷备份恢复和oracle异机恢复使用方法
  • 在Oracle 10gR2中设定指定的恢复点实现轻松闪回
  • Oracle11g备份和恢复功能的提高
  • 实战Oracle数据库备份与恢复
  • Oracle数据库冷备份的异地恢复
  • 详解通过Backup Exec来实施Oracle灾难恢复
  • Oracle的恢复管理器及DBMS_JOB包分析
  • Oracle数据库文件恢复以及备份思路
  • Oracle数据库备份恢复最佳实践
  • oracle如何恢复被覆盖的存储过程
  • rman恢复方案和oracle异机恢复
  • oracle数据库创建备份与恢复脚本整理
  • ORACLE 数据库RMAN备份恢复
  • 一次误操作引起的Oracle数据库大恢复
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • Oracle 数据库开发工具 Oracle SQL Developer
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • 关于JDBC连接Oracle数据库,是否必须有Oracle客户端
  • ORACLE数据库常用字段数据类型介绍
  • win2000+jbuilder6+oracle817编出的程序,在win2000下执行很好,在win98下却访问不了oracle数据库
  • oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)
  • Oracle发布Oracle SQL Developer 1.2数据库开发工具 帮助用户简化开发工作
  • 怎样调出ORACLE数据库中的数据,该如何连接?
  • Oracle收购TimesTen 提高数据库软件性能
  • 卸载oracle数据库
  • linux上安装oracle 数据库后,是否能写shell程序实现数据库的自动启动。
  • Linux下如何用C语言操作Oracle数据库相关的图书推荐
  • Oracle数据库运行Oracle form时避免出现提示信息
  • Oracle欲收购开源数据库MySQL未果
  • 如何在JBuilder中连接Oracle数据库?
  • Oracle数据库访问参数文件的顺序
  • 循序渐进学习Oracle数据库
  • 安装Oracle加载数据库错误areasQueries的解决
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle 10g和Oracle 11g网格技术介绍
  • Oracle EBS R12 支持 Oracle Database 11g
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3