设为首页 收藏本站
查看: 674|回复: 0

[经验分享] 探索ORACLE之RMAN_07单个数据文件丢失恢复

[复制链接]
YunVN网友  发表于 2016-8-13 06:46:57 |阅读模式
  探索ORACLERMAN_07单个数据文件丢失恢复
  作者:吴伟龙 NameProdence Woo
  QQ286507175 msn:hapy-wuweilong@hotmail.com
  
  备份的终极目的是为了更好的将数据恢复和还原过来,在前面的章节中我们已经重点谈完了RMAN的备份,实际上也穿插的谈了些复杂的完整恢复。当然在这节当中我们将会由浅入深的详细谈谈在几种不同情况下的数据库恢复。
  1、 数据文件的丢失恢复
  1.1wwl表空间上创建5张表,并添加数据。
  SQL> create table wwl01 (id number(3),namevarchar2(10));
  Table created.
  
  SQL> insert into wwl01 values(1,'wwl');
  1 row created.
  
  SQL> insert into wwl01 values(2,'wm');
  1 row created.
  
  SQL> insert into wwl01 values(3,'zq');
  1 row created.
  
  SQL> insert into wwl01 values(4,'wbq');
  1 row created.
  
  SQL> insert into wwl01 values(5,'wq');
  1 row created.
  
  SQL> create table wwl02 as select * from wwl01;
  Table created.
  
  SQL> create table wwl03 as select * from wwl01;
  Table created.
  
  SQL> create table wwl04 as select * from wwl01;
  Table created.
  
  SQL> create table wwl05 as select * from wwl01;
  Table created.
  
  查看表中的数据:
  SQL> select * from tab;
  
  TNAMETABTYPE CLUSTERID
  ---------- ------- ----------
  WWL01 TABLE
  WWL02 TABLE
  WWL03 TABLE
  WWL04 TABLE
  WWL05 TABLE
  1.2 执行全库备份
  [oracle@wwldb ~]$ rman target /
  Recovery Manager: Release 10.2.0.1.0 - Production on Fri Jun 2200:59:59 2012
  Copyright (c) 1982, 2005, Oracle.All rights reserved.
  
  connected to target database: WWL (DBID=5520179)
  
  RMAN> backup database;
  
  1.3 模拟数据丢失,手动删除数据文件wwl001.dbf
  [oracle@wwldb WWL]$ rm -rfwwl001.dbf
  
  1.4 再次启动数据库,无法启动并报错不能锁定数据文件5,查看dbwr的跟踪文件。
  SQL>startup force;
  ORACLEinstance started.
  
  TotalSystem Global Area 285212672 bytes
  FixedSize 1218968 bytes
  VariableSize 92276328 bytes
  DatabaseBuffers 184549376 bytes
  RedoBuffers 7168000 bytes
  Databasemounted.
  ORA-01157:cannot identify/lock data file 5 - see DBWR trace file
  ORA-01110: data file 5:'/DBData/WWL/wwl001.dbf'
  
  1.5 检查跟踪文件,报如下错误,非常的清楚的告诉了找不到的文件:
  
  Errors in file /DBSoft/admin/WWL/bdump/wwl_dbw0_29185.trc:
  ORA-01157: Message 1157 not found; No messagefile for product=RDBMS, facility=ORA; arguments: [5]
  ORA-01110: Message 1110 not found; No messagefile for product=RDBMS, facility=ORA; arguments: [5] [/DBData/WWL/wwl001.dbf]
  ORA-27037: Message 27037 not found; No messagefile for product=RDBMS, facility=ORA
  Linux Error: 2: No such file or directory
  Additional information: 3
  ORA-1157 signalled during: ALTER DATABASEOPEN...
  由以上信息可以得出数据库故障是由于数据文件wwl001.dbf数据文件异常丢失或者损坏导致数据库的故障,那么数据文件丢失就必然存在数据库数据的丢失,但是万幸的是,在丢失之前我们已经做过备份了,现在我们就来通过之前的备份将wwl001.dbf文件恢复回来,数据文件的恢复分为两种,一直是在不影响数据库其它业务情况下的在线联机恢复,还有一种是停机停业务的恢复,详细见如下:
  
  1.6 恢复方法一,零停机,在线恢复
  开始执行恢复操作,分为如下七个步骤:
  1、强制将数据库启动到mount状态
  RMAN>startup force mount;
  Oracle instancestarted
  databasemounted
  Total System GlobalArea 285212672 bytes
  Fixed Size 1218968 bytes
  VariableSize 92276328 bytes
  DatabaseBuffers 184549376 bytes
  RedoBuffers 7168000 bytes
  
  2、将对应的数据文件offline
  SQL> alter database datafile '/DBData/WWL/wwl001.dbf' offline;
  Database altered.
  
  3、开启数据库
  SQL> alter database open;
  Database altered.
  
  4、将数据文件从备份中restore出来
  RMAN> restore datafile'/DBData/WWL/wwl001.dbf';
  Starting restore at 22-JUN-12
  using target database control fileinstead of recovery catalog
  allocated channel: ORA_DISK_1
  channel ORA_DISK_1: sid=141devtype=DISK
  channel ORA_DISK_1: startingdatafile backupset restore
  channel ORA_DISK_1: specifyingdatafile(s) to restore from backup set
  restoring datafile 00005 to /DBData/WWL/wwl001.dbf
  channel ORA_DISK_1: reading frombackup piece /DBBak/bak_WWL_06_22_0vne4ph6_1_1
  channel ORA_DISK_1: restored backuppiece 1
  piecehandle=/DBBak/bak_WWL_06_22_0vne4ph6_1_1 tag=TAG20120622T010021
  channel ORA_DISK_1: restorecomplete, elapsed time: 00:00:07
  Finished restore at 22-JUN-12
  
  查看到数据文件已经restore出来了。
  [oracle@wwldb WWL]$ ll wwl*
  -rw-r----- 1 oracle oinstall52436992 Jun 22 01:21 wwl001.dbf
  -rw-r----- 1 oracle oinstall 5251072 Jun 22 01:20 wwl002.dbf
  -rw-r----- 1 oracle oinstall 5251072 Jun 22 01:20 wwl003.dbf
  
  5、执行数据恢复,保证scn一致
  RMAN>recover datafile '/DBData/WWL/wwl001.dbf';
  Startingrecover at 22-JUN-12
  using targetdatabase control file instead of recovery catalog
  allocatedchannel: ORA_DISK_1
  channelORA_DISK_1: sid=144 devtype=DISK
  starting mediarecovery
  media recoverycomplete, elapsed time: 00:00:01
  Finishedrecover at 22-JUN-12
  
  RMAN>
  
  6、将数据文件在线
  SQL> conn / as sysdba
  Connected.
  SQL> alter database datafile'/DBData/WWL/wwl001.dbf' online;
  
  Database altered.
  
  7、验证数据是否恢复,可以看到数据全部恢复回来了。
  SQL>conn wwl/wwl
  Connected.
  SQL>select * from tab;
  
  TNAME TABTYPE CLUSTERID
  ------------------------------------- ----------
  WWL01 TABLE
  WWL02 TABLE
  WWL03 TABLE
  WWL04 TABLE
  WWL05 TABLE
  
  SQL>select count(*) from tab;
  
   COUNT(*)
  ----------
   5
  
  SQL>
  
  1.7 恢复方法二,离线恢复
  开始执行恢复操作,分为五个步骤:
  1、强制将数据库启动到mount状态
  SQL> startupforce mount;
  ORACLE instancestarted.
  Total SystemGlobal Area 285212672 bytes
  Fixed Size 1218968 bytes
  VariableSize 96470632 bytes
  DatabaseBuffers 180355072 bytes
  RedoBuffers 7168000 bytes
  Databasemounted.
  
  2、将数据文件从备份中restore出来
  RMAN> restoredatafile '/DBData/WWL/wwl002.dbf'
  2> ;
  Starting restoreat 22-JUN-12
  using targetdatabase control file instead of recovery catalog
  allocatedchannel: ORA_DISK_1
  channelORA_DISK_1: sid=156 devtype=DISK
  
  channelORA_DISK_1: starting datafile backupset restore
  channelORA_DISK_1: specifying datafile(s) to restore from backup set
  restoringdatafile 00006 to /DBData/WWL/wwl002.dbf
  channelORA_DISK_1: reading from backup piece /DBBak/bak_WWL_06_22_0vne4ph6_1_1
  channelORA_DISK_1: restored backup piece 1
  piecehandle=/DBBak/bak_WWL_06_22_0vne4ph6_1_1 tag=TAG20120622T010021
  channelORA_DISK_1: restore complete, elapsed time: 00:00:01
  Finished restoreat 22-JUN-12
  
  3、执行数据恢复,保证scn一致
  RMAN> recover datafile '/DBData/WWL/wwl002.dbf';
  Starting recover at 22-JUN-12
  using channel ORA_DISK_1
  starting media recovery
  media recovery complete, elapsed time: 00:00:02
  Finished recover at 22-JUN-12
  RMAN>
  
  4、开启数据库
  SQL> conn /as sysdba
  Connected.
  SQL> alterdatabase open;
  Databasealtered.
  
  5、验证数据是否恢复
  SQL> select *from tab;
  TNAME TABTYPE CLUSTERID
  ------------------------------------- ----------
  WWL01 TABLE
  WWL02 TABLE
  WWL03 TABLE
  WWL04 TABLE
  WWL05 TABLE
  
  SQL> selectcount(*) from wwl01;
   COUNT(*)
  ----------
   5
  SQL>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-256965-1-1.html 上篇帖子: oracle与mysql在sql语句上的区别 下篇帖子: Oracle解锁用户、新建用户、角色,授权,建表空间
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表