ORACLE不完全恢复的几种情况

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: ORACLE不完全恢复的几种情况 1、介绍        RMAN不完全恢复的三个标准模式:基于time、基于scn和基于sequence,与手工不完全恢复相比原理类似,语法稍有不同: 2、不完全恢复的几种情况 ### 1)不完全恢复用于最小化测试备份 ###①备份一部分数据文件 .

ORACLE不完全恢复的几种情况

1、介绍

       RMAN不完全恢复的三个标准模式:基于time、基于scn和基于sequence,与手工不完全恢复相比原理类似,语法稍有不同:

_2

2、不完全恢复的几种情况

#### 1)不完全恢复用于最小化测试备份
####①备份一部分数据文件

RMAN> backup datafile 1,2 format '/u01/rman_bak/%s.bak';   

RMAN> backup datafile 1,2 format '/u01/rman_bak/%s.bak';

启动 backup 于 2018-04-22 16:14:25
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00001 名称=/u01/app/oracle/oradata/vbox66db/system01.dbf
输入数据文件: 文件号=00002 名称=/u01/app/oracle/oradata/vbox66db/sysaux01.dbf
通道 ORA_DISK_1: 正在启动段 1 于 2018-04-22 16:14:25
通道 ORA_DISK_1: 已完成段 1 于 2018-04-22 16:16:00
段句柄=/u01/rman_bak/3.bak 标记=TAG20180422T161425 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:35
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
备份集内包括当前控制文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 2018-04-22 16:16:07
通道 ORA_DISK_1: 已完成段 1 于 2018-04-22 16:16:11
段句柄=/u01/rman_bak/4.bak 标记=TAG20180422T161425 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:04
完成 backup 于 2018-04-22 16:16:11

SQL> create table scott.emp1 as select * from scott.emp;

###②切换日志

alter system switch logfile;

③备份其余的数据文件

select FILE#,name from v$datafile; 

SYS@vbox66in>select FILE#,name from v$datafile;

FILE# NAME
1/u01/app/oracle/oradata/vbox66db/system01.dbf
2/u01/app/oracle/oradata/vbox66db/sysaux01.dbf
3/u01/app/oracle/oradata/vbox66db/undotbs01.dbf
4/u01/app/oracle/oradata/vbox66db/users01.dbf

backup datafile 3,4 format ‘/u01/rman_bak/%s.bak’;

RMAN> backup datafile 3,4 format '/u01/rman_bak/%s.bak';

启动 backup 于 2018-04-22 16:29:20
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00003 名称=/u01/app/oracle/oradata/vbox66db/undotbs01.dbf
输入数据文件: 文件号=00004 名称=/u01/app/oracle/oradata/vbox66db/users01.dbf
通道 ORA_DISK_1: 正在启动段 1 于 2018-04-22 16:29:22
通道 ORA_DISK_1: 已完成段 1 于 2018-04-22 16:29:25
段句柄=/u01/rman_bak/5.bak 标记=TAG20180422T162921 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 2018-04-22 16:29:25

④切换日志

alter system switch logfile;   
create table scott.emp2 as select * from scott.emp;

⑤干净的关闭数据库,删除所有数据文件

SYS@vbox66in>shutdown immediate;    发生完全检查点,更新控制文件和数据文件头的SCN  
[oracle@vbox66 vbox66db]$ rm -rf system01.dbf
[oracle@vbox66 vbox66db]$ rm -rf sysaux01.dbf
[oracle@vbox66 vbox66db]$ rm -rf undotbs01.dbf
[oracle@vbox66 vbox66db]$ rm -rf users01.dbf  

⑥RMAN按时间点做不完全恢复

SYS@vbox66in>startup mount;  
RMAN> restore database;
RMAN> alter database open;

RMAN> alter database open;

RMAN-00571: >===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK >FOLLOWS ===============
RMAN-00571: >===========================================================
RMAN-03002: alter db 命令 (在 04/22/2018 16:50:09 上) 失败
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: >'/u01/app/oracle/oradata/vbox66db/system01.dbf'

SYS@vbox66in>select file#,checkpoint_change# from v$datafile;

 FILE# CHECKPOINT_CHANGE#

     1             988104
     2             988104
     3             988104
     4             988104  

SYS@vbox66in>select file#,checkpoint_change# from v$datafile_header;

 FILE# CHECKPOINT_CHANGE#

     1             986289     最小化测试需要前滚到987513
     2             986289     最小化测试需要前滚到987513
     3             987513
     4             987513
RMAN>  recover database until scn 987513;   此scn是所有数据文件恢复后的最小打开数据库的scn

RMAN> recover database until scn 987513;
启动 recover 于 2018-04-22 17:11:06
使用通道 ORA_DISK_1
正在开始介质的恢复
介质恢复完成, 用时: 00:00:02
完成 recover 于 2018-04-22 17:11:08

SYS@vbox66in>select file#,checkpoint_change# from v$datafile;

 FILE# CHECKPOINT_CHANGE#

     1             988104
     2             988104
     3             988104
     4             988104

SYS@vbox66in>select file#,checkpoint_change# from v$datafile_header;

 FILE# CHECKPOINT_CHANGE#

     1             987513
     2             987513
     3             987513
     4             987513  

⑥打开数据库

SYS@vbox66in>alter database open resetlogs;

数据库已更改。

SYS@vbox66in>select file#,checkpoint_change# from v$datafile;

 FILE# CHECKPOINT_CHANGE#

     1             987517
     2             987517
     3             987517
     4             987517

SYS@vbox66in>select file#,checkpoint_change# from v$datafile_header;

 FILE# CHECKPOINT_CHANGE#

     1             987517
     2             987517
     3             987517
     4             987517

⑦验证

 SYS@vbox66in>select * from scott.emp1;  //有此文件
 SYS@vbox66in>select * from scott.emp1;  //无此文件

###2) RMAN恢复误删除表空间

       必须通过备份的控制文件(即含有删除的表空间结构的老控制文件)进行恢复。本例要做的是drop tablespace test,然后再通过不完全恢复,使数据库在drop表空间前的那一刻打开,从而恢复test表空间及t1表的内容。
注: Oracle11gR2版可以支持数据库处于open方式下,以TSPITR方式恢复误删除的表空间。

①创建表空间和表

create tablespace test datafile '/u01/app/oracle/oradata/vbox66db/test01.dbf' size 20M;
create table test_table (id int,name varchar2(30)) tablespace test;
insert into test_table values(1,'aaa');
insert into test_table values(2,'bbb'); 
   

###②对数据库进行全备

RMAN> backup database format '/u01/rman_bak/all_%U.bak';

RMAN> backup database format '/u01/rman_bak/all_%U.bak';

启动 backup 于 2018-04-22 19:40:43
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
输入数据文件: 文件号=00001 名称>=/u01/app/oracle/oradata/vbox66db/system01.dbf
输入数据文件: 文件号=00002 名称>=/u01/app/oracle/oradata/vbox66db/sysaux01.dbf
输入数据文件: 文件号=00003 名称>=/u01/app/oracle/oradata/vbox66db/undotbs01.dbf
输入数据文件: 文件号=00005 名称>=/u01/app/oracle/oradata/vbox66db/test01.dbf
输入数据文件: 文件号=00004 名称>=/u01/app/oracle/oradata/vbox66db/users01.dbf
通道 ORA_DISK_1: 正在启动段 1 于 2018-04-22 19:40:44
通道 ORA_DISK_1: 已完成段 1 于 2018-04-22 19:42:19
段句柄=/u01/rman_bak/all_0bt10gts_1_1.bak 标记>=TAG20180422T194043 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:35
通道 ORA_DISK_1: 正在启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集内的数据文件
备份集内包括当前控制文件
备份集内包括当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 2018-04-22 19:42:22
通道 ORA_DISK_1: 已完成段 1 于 2018-04-22 19:42:29
段句柄=/u01/rman_bak/all_0ct10h0r_1_1.bak 标记>=TAG20180422T194043 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:07
完成 backup 于 2018-04-22 19:42:29

③删除表空间及查看表空间删除时间

SYS@vbox66in>drop tablespace test including contents and datafiles;
tail /u01/app/oracle/diag/rdbms/vbox66db/vbox66in/trace/alert_vbox66in.log

[oracle@vbox66 trace]$ tail alert_vbox66in.log
Sun Apr 22 17:22:36 2018
SMCO started with pid=30, OS id=4136
Sun Apr 22 19:28:40 2018
create tablespace test datafile >'/u01/app/oracle/oradata/vbox66db/test01.dbf' size 20M
Completed: create tablespace test datafile >'/u01/app/oracle/oradata/vbox66db/test01.dbf' size 20M
Sun Apr 22 19:45:53 2018
drop tablespace test including contents and datafiles
Sun Apr 22 19:46:09 2018 //这是删除表空间的完成时间,后面取>时间要比它提前一点(考虑提前1分钟)
Deleted file /u01/app/oracle/oradata/vbox66db/test01.dbf
Completed: drop tablespace test including contents and >datafiles

④删除所有控制文件和数据文件

SYS@vbox66in> select dbid from v$database;  //rman恢复是用到
SYS@vbox66in>shutdown immediate
[oracle@vbox66 vbox66db]$ mv system01.dbf system01.dbf.bak
[oracle@vbox66 vbox66db]$ mv undotbs01.dbf undotbs01.dbf.bak
[oracle@vbox66 vbox66db]$ mv sysaux01.dbf sysaux01.dbf.bak
[oracle@vbox66 vbox66db]$ mv users01.dbf users01.dbf.bak
[oracle@vbox66 vbox66db]$ mv temp01.dbf temp01.dbf.bak
[oracle@vbox66 vbox66db]$ mv control01.ctl control01.ctl.bak
[oracle@vbox66 vbox66db]$ mv control02.ctl control02.ctl.bak 

⑤准备对drop tablespace test做不完全恢复

SYS@vbox66in>startup nomount; 
run {
startup nomount; 
set dbid=3269052407;  
restore controlfile from '/u01/rman_bak/all_0ct10h0r_1_1.bak' until time '2018-04-22 19:45:09';
alter database mount;
restore database;
recover database until time '2018-04-22 19:45:09';
alter database open resetlogs;
}

RMAN> run {
2> startup nomount;
3> set dbid=3269052407;
4> restore controlfile from >'/u01/rman_bak/all_0ct10h0r_1_1.bak' until time '2018-04-22 >19:45:09';
5> alter database mount;
6> restore database;
7> recover database until time '2018-04-22 19:45:09';
8> alter database open resetlogs;
9> }

Oracle 实例已启动

系统全局区域总计 839282688 字节

Fixed Size 2257880 字节
Variable Size 545262632 字节
Database Buffers 289406976 字节
Redo Buffers 2355200 字节

正在执行命令: SET DBID

启动 restore 于 2018-04-22 20:18:29

使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=18 设备类型=DISK

通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:03
输出文件名=/u01/app/oracle/oradata/vbox66db/control01.ctl
输出文件名=/u01/app/oracle/oradata/vbox66db/control02.ctl
完成 restore 于 2018-04-22 20:18:32

数据库已装载

释放的通道: ORA_DISK_1

启动 restore 于 2018-04-22 20:18:38
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=18 设备类型=DISK

通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00001 还原到 >/u01/app/oracle/oradata/vbox66db/system01.dbf
通道 ORA_DISK_1: 将数据文件 00002 还原到 >/u01/app/oracle/oradata/vbox66db/sysaux01.dbf
通道 ORA_DISK_1: 将数据文件 00003 还原到 >/u01/app/oracle/oradata/vbox66db/undotbs01.dbf
通道 ORA_DISK_1: 将数据文件 00004 还原到 >/u01/app/oracle/oradata/vbox66db/users01.dbf
通道 ORA_DISK_1: 将数据文件 00005 还原到 >/u01/app/oracle/oradata/vbox66db/test01.dbf
通道 ORA_DISK_1: 正在读取备份片段 >/u01/rman_bak/all_0bt10gts_1_1.bak
通道 ORA_DISK_1: 段句柄 = >/u01/rman_bak/all_0bt10gts_1_1.bak >标记 = >TAG20180422T194043
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:01:45
完成 restore 于 2018-04-22 20:20:25

启动 recover 于 2018-04-22 20:20:25
使用通道 ORA_DISK_1

正在开始介质的恢复

线程 1 序列 1 的归档日志已作为文件 >/u01/app/oracle/oradata/vbox66db/redo01.log 存在于磁盘上
归档日志文件名=/u01/app/oracle/oradata/vbox66db/redo01.log 线>程=1 序列=1
介质恢复完成, 用时: 00:00:01
完成 recover 于 2018-04-22 20:20:28

数据库已打开

⑥验证

SYS@vbox66in>select * from test_table;  

    ID NAME

     1 aaa
     2 bbb
注:
  ①不能使用当前的控制文件恢复误删除的表空间,因为当前控制文件已经没有该表空间的记录了。
  ②DBID是RMAN识别数据库的身份证,保存在控制文件中,set dbid=对于控制文件自动恢复(from autobackup)是必要的;
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
Oracle 关系型数据库 MySQL
Oracle OCP 19c 考试(1Z0-083)中关于Oracle不完全恢复的考点
下面是Oracle 19c OCP考试(1Z0-083)中关于Oracle不完全恢复的题目:
236 0
|
Oracle 关系型数据库 数据库
|
Oracle 关系型数据库 数据库
|
SQL Oracle 关系型数据库
|
SQL Oracle 关系型数据库
oracle基于时间点的不完全恢复
下面我们做一个实验,演示如何对oracle进行基于时间点的不完全恢复(在实验之前请确保数据库具有有效备份): 获取此时的时间并记录下来: SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;...
1117 0
|
Oracle 关系型数据库 数据库
Oracle之不完全恢复
整理自《Oracle database 11g RMAN 备份与恢复》 001 概述     顾名思义,不完全恢复就是指不完全的数据库恢复。不完全恢复与完全恢复在许多方面是相同的,它们基本的命令集相同,但不完全恢复添加了一些其它命令。
1281 0
|
Oracle 关系型数据库 数据库
记录一次ORACLE的不完全恢复
前言:之前说过一句话,备份有时候就是用于数据库的恢复,虽然很多时候都用不上。但是你永远不知道什么时候会用上,这就是备份的意义; 昨天晚上10点多的时候,突然朋友打电话过来,要帮忙做一个数据库基于时间点的恢复。
785 0
|
SQL 监控 Oracle
Oracle 基于 RMAN 的不完全恢复(incomplete recovery by RMAN)
      Oracle 数据库可以实现数据库不完全恢复与完全恢复。完全恢复是将数据库恢复到最新时刻,也就是无损恢复,保证数据库无丢失的恢复。而不完全恢复则是根据需要特意将数据库恢复到某个过去的特定时间点或特定的SCN以及特定的Sequence。
1019 0