这里是:一看就会,一做就废系列

数据库演示版本为 19.3 (12.2.0.3

该系列涉及恢复过程中使用的 个语句:

1. recover database

2. recover database until cancel

3. recover database using backup controlfile

4. recover database until cancel using backup controlfile

5. recover database using backup controlfile until cancel

继续之前,你得知道什么叫还原什么叫恢复 ?以及备份与恢复的基础 点我查看己亥清爽系列

恢复级别一共三个:recover database > recover tablespace > recover datafile 本系列目的是为了演示上面 5 条命令的区别与联系,所以不探讨恢复级别以及数据库状态对应所使用的恢复级别问题。最高级别 database 已经包含了 tablespace 和 datafile 两个级别。

版权声明:博客园AskScuti 版权所有,未经允许,禁止转载!

目录

1. 概念解释

2. 情况说明

3. 实验过程

  3.1 备份 CDB

  3.2 PDB1 创建测试数据

  3.3 删除 PDB1 所有数据文件

  3.4 还原 PDB1 所有数据文件

  3.5 恢复 PDB1 所有数据文件

  3.6 开启 PDB1 进行数据验证

1. 概念解释

  首先你得知道,recover database 这个命令是用作对所有数据文件进行恢复的,而且是完全恢复

  有个细节注意下,这个命令分为两种,一种用在 SQL 命令行一种用在 RMAN

  SQL > recover database 仅对所有数据文件进行完全恢复,前提是控制文件为当前最新状态不可以是还原过来的老版本或是手工重建,否则 SQL 命令行执行将返回错误

  RMAN > recover database 对所有数据文件和控制文件进行完全恢复

  本例中仅演示对数据文件的完全恢复,此命令对控制文件的恢复将在下篇讨论。

  一句话:recover database 就是对所有数据进行完全恢复操作(控制文件、归档日志、联机日志完好无损的情况下

2. 情况说明

  当前系统中,控制文件、归档日志、联机日志都完好无损,删除数据文件,进行还原,使用 recover database 进行完全恢复。

3. 实验过程

3.1 备份 CDB

备份整个 CDB(CDB$ROOT / PDB1 / PDB$SEED)

  1. RMAN> backup database format '/u02/backup/%s_%d_%U.full' tag 'full_backup';
  1. RMAN> backup database format '/u02/backup/%s_%d_%U.full' tag 'full_backup';
  2.  
  3. Starting backup at 08-JUN-19
  4. using channel ORA_DISK_1
  5. channel ORA_DISK_1: starting full datafile backup set
  6. channel ORA_DISK_1: specifying datafile(s) in backup set
  7. input datafile file number=00001 name=/u01/app/oracle/oradata/CDB1/system01.dbf
  8. input datafile file number=00003 name=/u01/app/oracle/oradata/CDB1/sysaux01.dbf
  9. input datafile file number=00004 name=/u01/app/oracle/oradata/CDB1/undotbs01.dbf
  10. input datafile file number=00007 name=/u01/app/oracle/oradata/CDB1/users01.dbf
  11. channel ORA_DISK_1: starting piece 1 at 08-JUN-19
  12. channel ORA_DISK_1: finished piece 1 at 08-JUN-19
  13. piece handle=/u02/backup/8_CDB1_08u3ji4n_1_1.full tag=FULL_BACKUP comment=NONE
  14. channel ORA_DISK_1: backup set complete, elapsed time: 00:00:55
  15. channel ORA_DISK_1: starting full datafile backup set
  16. channel ORA_DISK_1: specifying datafile(s) in backup set
  17. input datafile file number=00010 name=/u01/app/oracle/oradata/CDB1/pdb1/sysaux01.dbf
  18. input datafile file number=00009 name=/u01/app/oracle/oradata/CDB1/pdb1/system01.dbf
  19. input datafile file number=00011 name=/u01/app/oracle/oradata/CDB1/pdb1/undotbs01.dbf
  20. input datafile file number=00012 name=/u01/app/oracle/oradata/CDB1/pdb1/users01.dbf
  21. input datafile file number=00013 name=/u01/app/oracle/oradata/CDB1/pdb1/henry01.dbf
  22. channel ORA_DISK_1: starting piece 1 at 08-JUN-19
  23. channel ORA_DISK_1: finished piece 1 at 08-JUN-19
  24. piece handle=/u02/backup/9_CDB1_09u3ji6f_1_1.full tag=FULL_BACKUP comment=NONE
  25. channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
  26. channel ORA_DISK_1: starting full datafile backup set
  27. channel ORA_DISK_1: specifying datafile(s) in backup set
  28. input datafile file number=00006 name=/u01/app/oracle/oradata/CDB1/pdbseed/sysaux01.dbf
  29. input datafile file number=00005 name=/u01/app/oracle/oradata/CDB1/pdbseed/system01.dbf
  30. input datafile file number=00008 name=/u01/app/oracle/oradata/CDB1/pdbseed/undotbs01.dbf
  31. channel ORA_DISK_1: starting piece 1 at 08-JUN-19
  32. channel ORA_DISK_1: finished piece 1 at 08-JUN-19
  33. piece handle=/u02/backup/10_CDB1_0au3ji78_1_1.full tag=FULL_BACKUP comment=NONE
  34. channel ORA_DISK_1: backup set complete, elapsed time: 00:00:25
  35. Finished backup at 08-JUN-19
  36.  
  37. Starting Control File and SPFILE Autobackup at 08-JUN-19
  38. piece handle=/u02/backup/c-983951798-20190608-02.CTL comment=NONE
  39. Finished Control File and SPFILE Autobackup at 08-JUN-19

process

3.2 PDB1 创建测试数据

连接 PDB1 查看当前数据文件

  1. [oracle@henry ~]$ sqlplus sys/oracle@pdb1 as sysdba
  2. SQL> select name from v$datafile;
  1. [oracle@henry ~]$ sqlplus sys/oracle@pdb1 as sysdba
  2.  
  3. SQL*Plus: Release 19.0.0.0.0 - Production on Sat Jun 8 16:48:51 2019
  4. Version 19.3.0.0.0
  5.  
  6. Copyright (c) 1982, 2019, Oracle. All rights reserved.
  7.  
  8. Connected to:
  9. Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
  10. Version 19.3.0.0.0
  11.  
  12. SQL> select name from v$datafile;
  13.  
  14. NAME
  15. ------------------------------------------------
  16. /u01/app/oracle/oradata/CDB1/pdb1/system01.dbf
  17. /u01/app/oracle/oradata/CDB1/pdb1/sysaux01.dbf
  18. /u01/app/oracle/oradata/CDB1/pdb1/undotbs01.dbf
  19. /u01/app/oracle/oradata/CDB1/pdb1/users01.dbf
  20. /u01/app/oracle/oradata/CDB1/pdb1/henry01.dbf

创建测试表 recover_db,插入数据 1,2,3 并 commit 提交

  1. SQL> create table recover_db(id number) tablespace henry;
  2.  
  3. Table created.
  4.  
  5. SQL> insert into recover_db values(1);
  6.  
  7. 1 row created.
  8.  
  9. SQL> insert into recover_db values(2);
  10.  
  11. 1 row created.
  12.  
  13. SQL> insert into recover_db values(3);
  14.  
  15. 1 row created.
  16.  
  17. SQL> commit;
  18.  
  19. Commit complete.

3.3 删除 PDB1 所有数据文件

  1. SQL> !rm -rf /u01/app/oracle/oradata/CDB1/pdb1/*

继续插入数据 4,5,6 不提交,执行触发完全检查点,刷缓存数据,报错(请思考:物理文件删除,是否还可以继续插入数据?为什么)

  1. SQL> insert into recover_db values(4);
  2.  
  3. 1 row created.
  4.  
  5. SQL> insert into recover_db values(5);
  6.  
  7. 1 row created.
  8.  
  9. SQL> insert into recover_db values(6);
  10.  
  11. 1 row created.
  12.  
  13. SQL> alter system checkpoint;
  14.  
  15. System altered.
  16.  
  17. SQL> /
  18. alter system checkpoint
  19. *
  20. ERROR at line 1:
  21. ORA-03135: connection lost contact
  22. Process ID: 30992
  23. Session ID: 273 Serial number: 51273

因为对表的所有操作都是在内存里面,此时和物理数据文件无关,所以可以继续。

触发检查点的目的是为了将缓存数据刷入磁盘,而这时就和数据文件有关系了,第一次触发完全检查点刷数据,没反应过来,第二次刷报错,因为缓存数据要写入磁盘,可是对应的磁盘文件被删除,因此报错。

请留意:插入 4,5,6 三条数据后的操作,是否有提交?完全恢复是否可以恢复出 4,5,6 ?

切换 CDB 查看 PDB1 状态,并尝试启动(这里为什么 PDB1 是 MOUNT ?)

  1. SQL> conn / as sysdba
  2. Connected.
  3. SQL> show pdbs
  4.  
  5. CON_ID CON_NAME OPEN MODE RESTRICTED
  6. ---------- ------------- ---------- ----------
  7. 2   PDB$SEED READ ONLY NO
  8. 3   PDB1 MOUNTED
  9. SQL> alter pluggable database pdb1 open;
  10. alter pluggable database pdb1 open
  11. *
  12. ERROR at line 1:
  13. ORA-01157: cannot identify/lock data file 13 - see DBWR trace file
  14. ORA-01110: data file 13: '/u01/app/oracle/oradata/CDB1/pdb1/henry01.dbf'

因为多租户体系中,参数文件控制文件都处于 CDB 级别,因此,只要 CDB 是开启的,下面所有 PDB 最低级别都是 MOUNT(哪怕这个库已经出了问题,停止了,依然显示MOUNT)

3.4 还原 PDB1 所有数据文件

还原数据文件

你可以连接 PDB1 还原自己

  1. [oracle@henry ~]$ rman target sys/oracle@pdb1
  2.  
  3. Recovery Manager: Release 19.0.0.0.0 - Production on Sat Jun 8 17:13:26 2019
  4. Version 19.3.0.0.0
  5.  
  6. Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
  7.  
  8. connected to target database: CDB1:PDB1 (DBID=2947650716, not open)
  9.  
  10. RMAN> restore database from tag='FULL_BACKUP';
  11.  
  12. Starting restore at 08-JUN-19
  13. using target database control file instead of recovery catalog
  14. allocated channel: ORA_DISK_1
  15. channel ORA_DISK_1: SID=11 device type=DISK
  16.  
  17. channel ORA_DISK_1: starting datafile backup set restore
  18. channel ORA_DISK_1: specifying datafile(s) to restore from backup set
  19. channel ORA_DISK_1: restoring datafile 00009 to /u01/app/oracle/oradata/CDB1/pdb1/system01.dbf
  20. channel ORA_DISK_1: restoring datafile 00010 to /u01/app/oracle/oradata/CDB1/pdb1/sysaux01.dbf
  21. channel ORA_DISK_1: restoring datafile 00011 to /u01/app/oracle/oradata/CDB1/pdb1/undotbs01.dbf
  22. channel ORA_DISK_1: restoring datafile 00012 to /u01/app/oracle/oradata/CDB1/pdb1/users01.dbf
  23. channel ORA_DISK_1: restoring datafile 00013 to /u01/app/oracle/oradata/CDB1/pdb1/henry01.dbf
  24. channel ORA_DISK_1: reading from backup piece /u02/backup/9_CDB1_09u3ji6f_1_1.full
  25. channel ORA_DISK_1: piece handle=/u02/backup/9_CDB1_09u3ji6f_1_1.full tag=FULL_BACKUP
  26. channel ORA_DISK_1: restored backup piece 1
  27. channel ORA_DISK_1: restore complete, elapsed time: 00:00:36
  28. Finished restore at 08-JUN-19

还可以连接 CDB ,还原 PDB1

  1. RMAN> restore pluggable database pdb1 from tag='FULL_BACKUP';
  2.  
  3. Starting restore at 08-JUN-19
  4. using channel ORA_DISK_1
  5.  
  6. channel ORA_DISK_1: starting datafile backup set restore
  7. channel ORA_DISK_1: specifying datafile(s) to restore from backup set
  8. channel ORA_DISK_1: restoring datafile 00009 to /u01/app/oracle/oradata/CDB1/pdb1/system01.dbf
  9. channel ORA_DISK_1: restoring datafile 00010 to /u01/app/oracle/oradata/CDB1/pdb1/sysaux01.dbf
  10. channel ORA_DISK_1: restoring datafile 00011 to /u01/app/oracle/oradata/CDB1/pdb1/undotbs01.dbf
  11. channel ORA_DISK_1: restoring datafile 00012 to /u01/app/oracle/oradata/CDB1/pdb1/users01.dbf
  12. channel ORA_DISK_1: restoring datafile 00013 to /u01/app/oracle/oradata/CDB1/pdb1/henry01.dbf
  13. channel ORA_DISK_1: reading from backup piece /u02/backup/9_CDB1_09u3ji6f_1_1.full
  14. channel ORA_DISK_1: piece handle=/u02/backup/9_CDB1_09u3ji6f_1_1.full tag=FULL_BACKUP
  15. channel ORA_DISK_1: restored backup piece 1
  16. channel ORA_DISK_1: restore complete, elapsed time: 00:00:35
  17. Finished restore at 08-JUN-19

3.5 恢复 PDB1 所有数据文件

恢复数据文件

你可以连接 PDB1 恢复自己

  1. RMAN> recover database;
  2.  
  3. Starting recover at 08-JUN-19
  4. using channel ORA_DISK_1
  5.  
  6. starting media recovery
  7. media recovery complete, elapsed time: 00:00:00
  8.  
  9. Finished recover at 08-JUN-1

还可以连接 CDB ,恢复 PDB1

  1. RMAN> recover pluggable database pdb1;
  2.  
  3. Starting recover at 08-JUN-19
  4. using channel ORA_DISK_1
  5.  
  6. starting media recovery
  7. media recovery complete, elapsed time: 00:00:00
  8.  
  9. Finished recover at 08-JUN-19

3.6 开启 PDB1 进行数据验证

打开数据库

你可以连接 PDB1 打开自己

  1. RMAN> alter database open;
  2.  
  3. Statement processed

还可以连接 CDB ,打开 PDB1

  1. RMAN> alter pluggable database pdb1 open;
  2.  
  3. Statement processed

验证数据

请问,完全恢复之后,recover_db 表中有几条数据?为什么?

  1. SQL> select * from recover_db;
  2.  
  3. ID
  4. ----------
  5. 1
  6. 2
  7. 3

因为插入 4,5,6 没有提交,事务没有结束,因此不具有持久性。完全恢复是恢复到宕机前最后一次 commit 的状态

一看就会一做就废系列:说说 RECOVER DATABASE(上)的更多相关文章

  1. 一看就会一做就废系列:说说 RECOVER UNTIL CANCEL

    这里是:一看就会,一做就废系列 数据库演示版本为 19.3 (12.2.0.3) 该系列涉及恢复过程中使用的 5 个语句: 1. recover database 2. recover databas ...

  2. 一看就会一做就废系列:说说 RECOVER DATABASE(下)

    这里是:一看就会,一做就废系列 数据库演示版本为 19.3 (12.2.0.3) 该系列涉及恢复过程中使用的 个语句: 1. recover database 2. recover database ...

  3. 给Source Insight做个外挂系列之三--构建外挂软件的定制代码框架

    上一篇文章介绍了“TabSiPlus”是如何进行代码注入的,本篇将介绍如何构建一个外挂软件最重要的部分,也就是为其扩展功能的定制代码.本文前面提到过,由于windows进程管理的限制,扩展代码必须以动 ...

  4. 给Source Insight做个外挂系列之一--发现Source Insight

    一提到外挂程序,大家肯定都不陌生,QQ就有很多个版本的去广告外挂,很多游戏也有用于扩展功能或者作弊的工具,其中很多也是以外挂的形式提供的.外挂和插件的区别在于插件通常依赖于程序的支持,如果程序不支持插 ...

  5. 零元学Expression Blend 4 - Chapter 37 看如何使用Clip修出想要的完美曲线(上)

    原文:零元学Expression Blend 4 - Chapter 37 看如何使用Clip修出想要的完美曲线(上) 几何外部的 UIElement 会在呈现的配置中以视觉化方式裁剪. 几何不一定要 ...

  6. 使用 WPF 做个 PowerPoint 系列 基于 OpenXML 解析实现 PPT 文本描边效果

    本文是使用 WPF 做个 PowerPoint 系列的博客,本文来告诉大家如何解析 PPT 里面的文本描边效果,在 WPF 应用中绘制出来,实现像素级相同 背景知识 在开始之前,期望你了解了 PPT ...

  7. 4张图看懂delphi 10生成ipa和在iPhone虚拟器上调试(教程)

    4张图看懂delphi 10生成ipa和在iPhone虚拟器上调试(教程) (2016-02-01 03:21:06) 转载▼ 标签: delphi ios delphi10 教程 编程 分类: 编程 ...

  8. Java:终结器防卫者,顺便看一下 C# 如何做的。

    背景 多数情况我们不需要重写 finalize 方法,只有当我们需要持有未托管资源的时候才需要,而此时重写 finalize 方法,只是作为一个“安全网”,不能作为常规的资源释放模式,必须提供显式的释 ...

  9. 自学 Python,视频教程和代码一看就懂,动手就废,应该这么学

    ​ 一.代码量太少了,看得多做得少,导致一做就错. 每一个测试工程师必定是在大量的时间和代码中提升的自己,如果你只是看视频的话,那永远都停留在理论上,很多问题是要实践才能发现的 我打个比方你看视频的时 ...

随机推荐

  1. Mac brew update 慢~~~

    正题开始之前, 如果对 Homebrew 不太了解, 这里有一篇很好的介绍文章: macOS 包管理工具 Homebrew 不完全指南 花个几分钟读一下, 绝对超值! 正题 Homebrew 通过 G ...

  2. vue-infinite-loading 过滤器tab正确使用

    业务逻辑涉及loadmore,filter和tab切换,框架是vue,使用vue-infinite-loading中的一点经历. identifier 一开始并没有重视这个参数,只是他的官网说iden ...

  3. Android中的消息处理机制

    安卓中的消息处理机制主要涉及到5个概念 (1)消息类:Message,可以理解成一个数据单元: (2)消息队列类:Message Queue,存放通过Hander发布的消息,处理顺序类似于队列,按照先 ...

  4. Cenos7下指定ftp用户限制在特定目录下(亲身实践)

    好了,废话不多说.上头下来个需求,让我给别人开个ftp账户,只能访问项目的目录,不能访问项目外的目录,就算cd切换目录也不行. 开始: 第一步;安装ftp,我用的是centos7,只需敲入命令 yum ...

  5. .net mvc接收对象数组 通过ajax提交

    ajax代码 var obj = {}; obj.RoomName = ""; obj.RoomCode = ""; $.ajax({ type: " ...

  6. Zjnu Stadium HDU - 3047 带权并查集板子题

    #include<iostream> #include<cstring> #include<cstdio> using namespace std; +; int ...

  7. Parity game POJ - 1733 带权并查集

    #include<iostream> #include<algorithm> #include<cstdio> using namespace std; <& ...

  8. 专访|高思教育创始人须佶成(上)【UncleW】

    大家好,我是校长运营圈专栏作者UncleW. 2017年9月,高思教育发布董事会公告,宣布完成5.5亿元人民币融资.成立于2009年的高思教育到今天刚刚8岁,员工人数已突破2000人,2017年共有5 ...

  9. Bad Hair Day【单调栈】

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAzMAAANgCAIAAACX06G4AAAgAElEQVR4Aey9e5RlW13fuw40HORxfI ...

  10. php 常用数学函数

    函数 描述 实例 输入 输出 abs() 求绝对值 $abs = abs(-4.2); //4.2 数字 绝对值数字 ceil() 进一法取整 echo ceil(9.999); // 10 浮点数 ...