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

数据库演示版本为 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 删除 CDB 控制文件

  3.4 还原 CDB 控制文件

  3.5 恢复 CDB 控制文件

  3.6 开启 CDB

1. 概念解释

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

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

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

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

  本例中演示对控制文件的恢复将(数据文件、归档日志、联机日志完好无损的情况下

2. 情况说明

  当前系统中,数据文件、归档日志、联机日志都完好无损,删除 CDB 级别所有控制文件,并采用 RMAN 对控制文件进行单独还原,使用 recover database 进行完全恢复。

3. 实验过程

3.1 备份 CDB

略,参考上篇

3.2 PDB1 创建测试数据

查看 PDB1 当前表空间及对应数据文件

RMAN> report schema;

Report of database schema for database with db_unique_name CDB1

List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
---- -------- ----------- ------- ---------------------------------------------
9 280 SYSTEM NO /u01/app/oracle/oradata/CDB1/pdb1/system01.dbf
10 350 SYSAUX NO /u01/app/oracle/oradata/CDB1/pdb1/sysaux01.dbf
11 100 UNDOTBS1 NO /u01/app/oracle/oradata/CDB1/pdb1/undotbs01.dbf
12 5 USERS NO /u01/app/oracle/oradata/CDB1/pdb1/users01.dbf
13 5 HENRY NO /u01/app/oracle/oradata/CDB1/pdb1/henry01.dbf List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
---- -------- ----------- ----------- -------------------------------------------
3 36 TEMP 32767 /u01/app/oracle/oradata/CDB1/pdb1/temp01.dbf

创建新的表空间 recover_rman

SQL> create tablespace recover_rman datafile '/u01/app/oracle/oradata/CDB1/pdb1/recover_rman01.dbf' size 5m;

Tablespace created.

注意:新的表空间结构,没有在备份的数据文件和控制文件里面。

3.3 删除 CDB 控制文件

SQL> conn / as sysdba
Connected.
SQL> select name from v$controlfile; NAME
--------------------------------------------------
/u01/app/oracle/oradata/CDB1/control01.ctl
/u01/app/oracle/oradata/CDB1/control02.ctl SQL> !rm -rf /u01/app/oracle/oradata/CDB1/control*

重启 CDB ,报错

SQL> startup force;
ORACLE instance started. Total System Global Area 1241510120 bytes
Fixed Size 9134312 bytes
Variable Size 889192448 bytes
Database Buffers 335544320 bytes
Redo Buffers 7639040 bytes
ORA-00205: error in identifying control file, check alert log for more info

3.4 还原 CDB 控制文件

[oracle@henry ~]$ rman target /

Recovery Manager: Release 19.0.0.0.0 - Production on Sat Jun 8 18:14:49 2019
Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. connected to target database: CDB1 (not mounted) RMAN> restore controlfile from '/u02/backup/c-983951798-20190608-02.CTL'; Starting restore at 08-JUN-19
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=390 device type=DISK channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:03
output file name=/u01/app/oracle/oradata/CDB1/control01.ctl
output file name=/u01/app/oracle/oradata/CDB1/control02.ctl
Finished restore at 08-JUN-19

将数据库启动到 MOUNT

RMAN> alter database mount;

released channel: ORA_DISK_1
Statement processed

这时查控制文件中记录的数据文件(v$datafile 动态性能视图数据来自控制文件

SQL> set pagesize 50
SQL> select name from v$datafile; NAME
--------------------------------------------------
/u01/app/oracle/oradata/CDB1/system01.dbf
/u01/app/oracle/oradata/CDB1/sysaux01.dbf
/u01/app/oracle/oradata/CDB1/undotbs01.dbf
/u01/app/oracle/oradata/CDB1/pdbseed/system01.dbf
/u01/app/oracle/oradata/CDB1/pdbseed/sysaux01.dbf
/u01/app/oracle/oradata/CDB1/users01.dbf
/u01/app/oracle/oradata/CDB1/pdbseed/undotbs01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/system01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/sysaux01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/undotbs01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/users01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/henry01.dbf

恢复出来的控制文件中,是没有记录表空间 recover_rman

3.5 恢复 CDB 控制文件

使用 recover database 恢复数据库

RMAN> recover database;

Starting recover at 08-JUN-19
Starting implicit crosscheck backup at 08-JUN-19
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=134 device type=DISK
Crosschecked 3 objects
Finished implicit crosscheck backup at 08-JUN-19 Starting implicit crosscheck copy at 08-JUN-19
using channel ORA_DISK_1
Finished implicit crosscheck copy at 08-JUN-19 searching for all files in the recovery area
cataloging files...
no files cataloged using channel ORA_DISK_1 starting media recovery archived log for thread 1 with sequence 9 is already on disk as file /u01/app/oracle/oradata/CDB1/redo03.log
archived log file name=/u01/app/oracle/oradata/CDB1/redo03.log thread=1 sequence=9
creating datafile file number=14 name=/u01/app/oracle/oradata/CDB1/pdb1/
recover_rman01.dbf
archived log file name=/u01/app/oracle/oradata/CDB1/redo03.log thread=1 sequence=9
media recovery complete, elapsed time: 00:00:01
Finished recover at 08-JUN-19

请注意倒数第 4 行:creating datafile file number=14 name=/u01/app/oracle/oradata/CDB1/pdb1/recover_rman01.dbf

完全恢复命令自动在控制文件中创建添加了 recover_rman 数据文件

再次查控制文件中记录的数据文件

SQL> select name from v$datafile;

NAME
----------------------------------------------------
/u01/app/oracle/oradata/CDB1/system01.dbf
/u01/app/oracle/oradata/CDB1/sysaux01.dbf
/u01/app/oracle/oradata/CDB1/undotbs01.dbf
/u01/app/oracle/oradata/CDB1/pdbseed/system01.dbf
/u01/app/oracle/oradata/CDB1/pdbseed/sysaux01.dbf
/u01/app/oracle/oradata/CDB1/users01.dbf
/u01/app/oracle/oradata/CDB1/pdbseed/undotbs01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/system01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/sysaux01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/undotbs01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/users01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/henry01.dbf
/u01/app/oracle/oradata/CDB1/pdb1/recover_rman01.dbf

3.6 开启 CDB

因为动了“控制文件”,所以,必须得以 resetlogs 方式打开,为啥?勿问,爱过!抚摸我查看官方文档

你想直接打开?too young, too simple, sometimes naive.- 来自于莎士比亚的蔑视。

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs;

Database altered.

你的疑问在于:recover database 语句明明是个完全恢复的动作,为何成功之后,依然需要 resetlogs ?因为 recover database 命令只能修复控制文件中数据文件的物理结构信息,无法修改控制文件中的日志序列号,无法像数据文件一样,应用归档和联机日志前滚,所以控制文件中的序列号依然是老旧的,因此,只能通过重置序列号来打开数据库。

以 resetlogs 打开之后,日志组序列号重置为 1,新的版本化身 incarnation 出现

RMAN> list incarnation;

using target database control file instead of recovery catalog

List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------- ------- ---------- ----------
1 1 CDB1 983951798 PARENT 1 17-APR-19
2 2 CDB1 983951798 PARENT 1920977 06-JUN-19
3 3 CDB1 983951798 CURRENT 2455443 08-JUN-19

INCARNATION 是个啥?请参考:

Oracle 中的 Incarnation 到底是个什么?概念理解篇

Oracle 中的 Incarnation 到底是个什么?实验操作篇

一看就会一做就废系列:说说 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 38 看如何使用Clip修出想要的完美曲线(下)

    原文:零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下) 你可以把Clip想成是一个遮罩,运用遮罩达到我们想要的效果 所以在这里我们把文字 ...

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

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

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

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

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

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

  9. mongodb 3.x 之实用新功能窥看[1] ——使用TTLIndex做Cache处理

    mongodb一直都在不断的更新,不断的发展,那些非常好玩也非常实用的功能都逐步加入到了mongodb中,这不就有了本篇对ttlindex的介绍, 刚好我们的生产业务场景中就有这个一个案例... 一: ...

随机推荐

  1. P1339 [USACO09OCT]热浪Heat Wave(SPFA)

    -------------------------------------- 农夫约翰再显神威,双向热浪,双倍数组 (双倍大小,否则RE) ------------------------------ ...

  2. 一种使用SOC精确控制脉冲的方法

    在emfi测试中需要精确的控制脉冲时间.控制器产生的脉冲信号会经过控压的MOS管,这些组件会造成很严重的延时,但是尽管如此,控制系统的高精度也是必须的,因为控制系统的误差会逐级下延,引起更大的误差. ...

  3. 开发FTP服务接口,对外提供接口服务

    注意:本文只适合小文本文件的上传下载,因为post请求是有大小限制的.默认大小是2m,虽然具体数值可以调节,但不适合做大文件的传输 最近公司有这么个需求:以后所有的项目开发中需要使用ftp服务器的地方 ...

  4. PHP0011:学生信息管理案例

    PHP中 html js 混合用

  5. c++多线程编程——初探

    c++多线程并发可以帮助我们挖掘CPU的性能,在我们的思想中,似乎程序都是顺序执行的.这样的结论是建立在:程序是单线程程序.(比如我们平时写的hello world程序). 但是如果程序是多线程的.那 ...

  6. gulp常用插件之gulp-babel使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-babel这是Babel的Gulp插件. 此自述文件适用于gulp-babel v8 + Babel v7检查7.x分支以了解使用Bab ...

  7. springMVC三大组件、spring主要jar包、

    一.springMVC三大组件 处理器映射器   RequestMappingHandlerMapping 处理器适配器 RequestMappingHandlerAdapter 视图解析器  Int ...

  8. Swaps and Inversions HDU - 6318 树状数组+离散化

    #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> us ...

  9. Android_ExpandableListView

    实现效果: 类似于QQ联系人列表 相关属性: android:childDivider:指定各组内子类表项之间的分隔条,图片不会完全显示, 分离子列表项的是一条直线 android:childIndi ...

  10. 2级搭建类203-Oracle 19c SI ASM 静默搭建(OEL7.7)

    Oracle 19c 单实例 ASM UDEV 方式在 OEL 7.7 上的安装