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

[经验分享] Oracle基于用户管理的不完全恢复

[复制链接]

尚未签到

发表于 2018-9-14 08:57:58 | 显示全部楼层 |阅读模式
  Oracle 数据恢复从恢复类型来说,抛开具体的文件,总共可分为两大类型的恢复,一是完全恢复,一个是不完全恢复。其实,熟悉了Oracle
  体系结构之后,对于Oracle恢复就会有一个总体的概念。因为Oracle组成的外围部分,主要由不同的文件来组成,每种不同类型的文件有不同的
  作用,因此只要了解了其作用,更利于了解与掌握Oralce数据库的备份与恢复。言归正传,完全恢复即是把数据库恢复到最新的SCN,出故障前
  的那一刻,是无损恢复。而不完全恢复即是有损恢复,多用于恢复用户误操作,归档日志丢失等情形。本文主要描述基于用户管理的不完全恢复。
  一、不完全恢复特性
  1、不完全恢复
  不完全恢复仅仅是将数据恢复到某一个特定的时间点或特定的SCN,而不是当前时间点。不完全恢复会影响整个数据库,需要在MOUNT状
  态下进行。在不完全恢复成功之后,通常需要使用 resetlogs 选项来打开数据库。当使用resetlogs后,SCN 计数器不会被重置,原来的日
  志序号 log sequence 会结束,从新开始新的日志序列号。在Oracle里称之为产生一个新的incarnation。同时Oracle还会重置联机重做日
  志内容,因此resetlogs之后建议重新全备数据库。
  2、不完全恢复的情形
  介质故障(media failure)导致部分或全部联机重做日志(online redo log)损坏
  用户操作失误(user error)导致数据丢失,例如,用户由于疏忽而移除了表,提交了无效的数据到表
  由于归档重做日志(archived redo log)丢失而无法进行完全恢复(complete recovery)
  当前控制文件(control file)丢失,必须使用备份的控制文件打开(open)数据库
  3、不完全恢复的步骤
  关闭数据库并备份数据库(以防止恢复失败)
  启动数据库到mount 状态
  还原所有数据文件,同时可以选择还原控制文件(注意需要还原所有数据文件,而不仅仅是受损文件)
  将数据库恢复至某个时间点、序列、或系统改变号
  使用RESETLOGS关键字打开数据库
  4、注意
  不完全恢复的前提条件是Oracl数据库够到mount状态,即参数文件,控制文件
  在做不完全恢复前建议在恢复前后做一次备份,避免恢复失败导致不必要的损失
  不完全恢复完成后,建议不要直接使用OPEN RESETLOGS 命令以读/写模式打开(open)数据库,而应先以只读模式打开数据库,并检查是否已
  将数据库恢复到正确的时间点。如果恢复的时间点有误,在没有使用OPEN RESETLOGS命令的情况下,重新执行恢复操作相对简单。
  对于恢复结果早于指定的时间点,只需重新执行恢复操作。如果恢复结果超过了指定的时间点,则应再次还原数据库并重新进行恢复。
  本文中的示例为便于演示,没有在恢复前备份故障数据,也没有在resetlog之后进行备份。
  注:Oracle 10g中已经可以在 resetlogs 之后不备份数据库,恢复的时候能够穿越resetlogs
  5、不完全介质恢复的几种类型
  基于时间的恢复(Time-based recovery) 将数据恢复到指定的时间点
  用户控制的恢复(Cancel-based recovery) 当用户提交CANCEL后停止恢复(此选项在使用RMAN时无效)
  基于SCN 的恢复(Change-based recovery) 将数据恢复到指定的SCN
  按重做日志序号恢复(Log sequence recovery)将数据恢复到指定的重做日志序号(仅使用RMAN时有效)
  二、演示基于用户管理的不完全恢复
  --1、until time 恢复(恢复到指定时间点)
  sys@SYBO2SZ> conn / as sysdba
  Connected.
  sys@SYBO2SZ> archive log list; -->当前数据库处于归档模式
  Database log mode       Archive Mode
  Automatic archival       Enabled
  Archive destination      /u02/database/SYBO2SZ/archive/
  Oldest online log sequence   0
  Next log sequence to archive  1
  Current log sequence      1
  sys@SYBO2SZ> @db_hot_bak    -->对数据库进行热备份
  ho cp /u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf /u02/database/SYBO2SZ/backup/hotbak
  ho cp /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ.dbf /u02/database/SYBO2SZ/backup/hotbak
  ho cp /u02/database/SYBO2SZ/oradata/sysauxSYBO2SZ.dbf /u02/database/SYBO2SZ/backup/hotbak
  ho cp /u02/database/SYBO2SZ/undo/undotbsSYBO2SZ2.dbf /u02/database/SYBO2SZ/backup/hotbak
  ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_system_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak
  ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_account_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak
  ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_stock_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak
  ho cp /u02/database/SYBO2SZ/oradata/SYBO2SZ_stock_l_tbl.dbf /u02/database/SYBO2SZ/backup/hotbak
  sys@SYBO2SZ> set time on;
  12:40:07 sys@SYBO2SZ> create table dept as select * from scott.dept;
  12:40:31 sys@SYBO2SZ> create table emp as select * from scott.emp;
  12:40:41 sys@SYBO2SZ>
  12:40:55 sys@SYBO2SZ> truncate table emp;  -->对表emp进行truncate
  Table truncated.
  12:41:02 sys@SYBO2SZ> insert into dept select 50,'DEV','SZ' from dual; -->为表dept新增两条记录并提交
  12:41:14 sys@SYBO2SZ> insert into dept select 60,'HR','GZ' from dual;
  12:41:19 sys@SYBO2SZ> commit;
  Commit complete.

  12:41:22 sys@SYBO2SZ>>
  System>  12:41:31 sys@SYBO2SZ> shutdown immediate;    -->关闭数据库
  12:42:25 sys@SYBO2SZ> startup mount;       -->启动数据库到mount状态
  ORACLE instance started.
  Total System Global Area 599785472 bytes

  Fixed>
  Variable>  Database Buffers     377487360 bytes
  Redo Buffers        6311936 bytes
  Database mounted.             -->下面将备份的数据进行还原,由于并非所有数据文件位于相同路径,因此进行多次cp
  12:42:36 sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf /u02/database/SYBO2SZ/oradata/.
  12:42:57 sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/sys*.dbf /u02/database/SYBO2SZ/oradata/.
  12:43:24 sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.
  12:43:50 sys@SYBO2SZ> recover database until time '2012-08-22:12:40:55';  -->使用 until time 恢复到指定时间点
  Media recovery complete.

  12:44:07 sys@SYBO2SZ>>
  Database>  12:44:20 sys@SYBO2SZ> select count(*) from emp;              -->emp表被成功恢复
  COUNT(*)
  ----------
  14
  12:44:28 sys@SYBO2SZ> select * from dept;                 -->由于恢复时间点在插入新记录之前,因此新记录丢失
  DEPTNO DNAME     LOC
  ---------- -------------- -------------
  10 ACCOUNTING   NEW YORK
  20 RESEARCH    DALLAS
  30 SALES     CHICAGO
  40 OPERATIONS   BOSTON
  4 rows selected.
  --2、unitl scn 恢复(基于系统改变号的恢复)
  sys@SYBO2SZ> @db_hot_bak       -->热备数据库
  sys@SYBO2SZ> select * from dept;
  DEPTNO DNAME     LOC
  ---------- -------------- -------------
  10 ACCOUNTING   NEW YORK
  20 RESEARCH    DALLAS
  30 SALES     CHICAGO
  40 OPERATIONS   BOSTON
  4 rows selected.
  sys@SYBO2SZ> insert into dept select 50,'DEV','SZ' from dual;  -->为表dept新增记录
  1 row created.
  sys@SYBO2SZ> commit;
  Commit complete.
  sys@SYBO2SZ> select current_scn from v$database;  -->查看当前SCN以便后续恢复使用
  CURRENT_SCN
  -----------
  471613
  sys@SYBO2SZ> insert into dept select 60,'HR','GZ' from dual;  -->再次为表dept新增记录,以便查看恢复后是否丢失
  sys@SYBO2SZ> commit;
  Commit complete.
  sys@SYBO2SZ> delete from emp where deptno=10;   -->删除表emp上deptno=10的记录
  3 rows deleted.
  sys@SYBO2SZ> commit;
  Commit complete.

  sys@SYBO2SZ>>
  System>  sys@SYBO2SZ> shutdown immediate;
  sys@SYBO2SZ> startup mount;
  ORACLE instance started.
  Total System Global Area 599785472 bytes

  Fixed>
  Variable>  Database Buffers     373293056 bytes
  Redo Buffers        6311936 bytes
  Database mounted.
  sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf /u02/database/SYBO2SZ/oradata/.  -->还原数据库
  sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/sys*.dbf /u02/database/SYBO2SZ/oradata/.
  sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.
  sys@SYBO2SZ> recover database until change 471613   -->基于 SCN 恢复数据库
  Media recovery complete.

  sys@SYBO2SZ>>
  Database>  sys@SYBO2SZ> select * from dept;           -->SCN之后的操作丢失
  DEPTNO DNAME     LOC
  ---------- -------------- -------------
  10 ACCOUNTING   NEW YORK
  20 RESEARCH    DALLAS
  30 SALES     CHICAGO
  40 OPERATIONS   BOSTON
  50 DEV      SZ
  5 rows selected.
  --3、until cancel 恢复(基于放弃的恢复)
  sys@SYBO2SZ> @db_hot_bak      -->热备数据库
  sys@SYBO2SZ> select * from dept;
  DEPTNO DNAME     LOC
  ---------- -------------- -------------
  10 ACCOUNTING   NEW YORK
  20 RESEARCH    DALLAS
  30 SALES     CHICAGO
  40 OPERATIONS   BOSTON
  50 DEV      SZ
  sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive  -->当前已经存在的归档日志
  total 348K
  -rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc
  -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc
  -rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc

  sys@SYBO2SZ>>
  System>  sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive  -->可以看到新增了arch_792003491_1_4.arc
  total 416K
  -rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc
  -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc
  -rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc
  -rw-r----- 1 oracle oinstall 66K 2012-08-22 17:04 arch_792003491_1_4.arc
  sys@SYBO2SZ> insert into dept select 60,'HR','SHANGHAI' from dual;
  sys@SYBO2SZ> insert into dept select 70,'INFRA','HONGKONG' from dual;
  sys@SYBO2SZ> commit;
  Commit complete.

  sys@SYBO2SZ>>
  System>
  sys@SYBO2SZ>>
  System>  sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
  total 420K
  -rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc
  -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc
  -rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc
  -rw-r----- 1 oracle oinstall 66K 2012-08-22 17:04 arch_792003491_1_4.arc
  -rw-r----- 1 oracle oinstall 2.5K 2012-08-22 17:07 arch_792003491_1_5.arc
  sys@SYBO2SZ> insert into dept select 80,'MARKET','BEIJING' from dual;
  sys@SYBO2SZ> commit;
  Commit complete.

  sys@SYBO2SZ>>
  System>  sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive  -->系统又新增了几个归档日志
  total 424K
  -rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc
  -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc
  -rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc
  -rw-r----- 1 oracle oinstall 66K 2012-08-22 17:04 arch_792003491_1_4.arc
  -rw-r----- 1 oracle oinstall 2.5K 2012-08-22 17:07 arch_792003491_1_5.arc
  -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:08 arch_792003491_1_6.arc
  sys@SYBO2SZ> ho strings /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc | grep HONGKONG -->新记录已存在于归档日志
  HONGKONG
  sys@SYBO2SZ> ho strings /u02/database/SYBO2SZ/archive/arch_792003491_1_6.arc | grep BEIJING
  BEIJING
  sys@SYBO2SZ> ho rm /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc   -->模拟部分归档日志丢失
  sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
  total 420K
  -rw-r----- 1 oracle oinstall 340K 2012-08-22 17:01 arch_792003491_1_1.arc
  -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:01 arch_792003491_1_2.arc
  -rw-r----- 1 oracle oinstall 1.0K 2012-08-22 17:02 arch_792003491_1_3.arc
  -rw-r----- 1 oracle oinstall 66K 2012-08-22 17:04 arch_792003491_1_4.arc
  -rw-r----- 1 oracle oinstall 2.0K 2012-08-22 17:08 arch_792003491_1_6.arc
  sys@SYBO2SZ> shutdown immediate;
  sys@SYBO2SZ> startup mount;
  ORACLE instance started.
  Total System Global Area 599785472 bytes

  Fixed>
  Variable>  Database Buffers     348127232 bytes
  Redo Buffers        6311936 bytes
  Database mounted.
  sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/SYBO*.dbf /u02/database/SYBO2SZ/oradata/. -->还原数据库
  sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/sys*.dbf /u02/database/SYBO2SZ/oradata/.
  sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.
  sys@SYBO2SZ> recover database until cancel;   --> 基于 cancel 恢复数据库
  ORA-00279: change 494124 generated at 08/22/2012 17:02:30 needed for thread 1
  ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc
  ORA-00280: change 494124 for thread 1 is in sequence #4
  Specify log: {=suggested | filename | AUTO | CANCEL}
  /u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc   -->恢复到尾数为4的归档日志
  ORA-00279: change 494189 generated at 08/22/2012 17:04:46 needed for thread 1
  ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792003491_1_5.arc
  ORA-00280: change 494189 for thread 1 is in sequence #5
  ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792003491_1_4.arc' no longer needed for this recovery
  Specify log: {=suggested | filename | AUTO | CANCEL}
  cancel                         -->第5个日志文件丢失,输入cancel
  Media recovery cancelled.

  sys@SYBO2SZ>>
  Database>  sys@SYBO2SZ> select * from dept;           -->由于归档日志5丢失,因此后续所有操作的数据丢失
  DEPTNO DNAME     LOC
  ---------- -------------- -------------
  10 ACCOUNTING   NEW YORK
  20 RESEARCH    DALLAS
  30 SALES     CHICAGO
  40 OPERATIONS   BOSTON
  50 DEV      SZ
  5 rows selected.
  oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html


运维网声明 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.iyunv.com/thread-581842-1-1.html 上篇帖子: Oracle 基于备份控制文件的恢复 下篇帖子: Oracle在线重定义
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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