袋鼠云技术团队 + 关注
手机版

ORACLE不完全恢复的几种情况

  1. 云栖社区>
  2. 袋鼠云技术团队>
  3. 博客>
  4. 正文

ORACLE不完全恢复的几种情况

持续高温 发布时间:2018-04-22 20:27:53 浏览4271 评论0

摘要: 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)是必要的;
【云栖快讯】云栖专辑 | 阿里开发者们的第19个感悟:Simple is better.  详情请点击

网友评论