rman备份恢复测试

rman备份恢复测试

 

1,打开数据库新建测试数据

  $sqlplus / nolog

  SQL>conn / as sysdba

  SQL>startup

  SQL>create table cds(id number(1),name varchar2(20));

  SQL>insert into cds(id,name) values('1','litao');

 

2,启动到归档模式

  $sqlplus / nolog

  SQL>conn / as sysdba

  SQL>alter database archivelog;

  SQL>archive log list;

 

 

* #data 记录时间,将该时间点添加到恢复脚本中

 

3,做数据库全备份

  $rman  target  /

  RMAN> configure controlfile autobackup on;

  RMAN>configure channel device type disk format ‘/home/oracle/backup/%U’;

  RMAN>backup database;

 

4,修改数据库

  SQL>drop table cds;

 

5,启动数据库到mount状态

  $sqlplus / nolog

  SQL>conn / as sysdba

  SQL>startup mount

 

6,恢复数据库

  $rman target /

  RMAN>configure channel device type disk format '/home/oracle/backup/%U';

  RMAN> restore database;

  RMAN>recover database until time "to_date('2011-02-17 12:30:00','yyyy-mm-dd hh24:mi:ss')";

   恢复到某一个时间点,时间点为删除数据库之前的系统时间

# RMAN>release channel t1

(实际上rman也是一个数据库的连接,我们一般做测试的时候都是起一个通道;如果是在生产环境下,我们可能同时开多个通道进行数据库的备份,恢复完成需要释放通道)

 

 

7,查看恢复后的数据库

  $sqlplus / nolog

  SQL>conn / as sysdba

  SQL>startup mount;

  SQL>alter database open resetlogs;

  SQL>select * from cds;

 

 

 

RMAN> shutdown immediate;

 

database dismounted

Oracle instance shut down

 

RMAN> startup nomount

 

connected to target database (not started)

Oracle instance started

 

Total System Global Area     167772160 bytes

 

Fixed Size                     1260672 bytes

Variable Size                150995840 bytes

Database Buffers               8388608 bytes

Redo Buffers                   7127040 bytes

 

RMAN> alter database mount

2> ;

 

database mounted

released channel: ORA_DISK_1

 

RMAN> reset database to incarnation 2 ;

 

 

RMAN> list incarnation;

 

 

List of Database Incarnations

DB Key Inc Key DB Name  DB ID            STATUS  Reset SCN Reset Time

------- ------- -------- ---------------- --- ---------- ----------

1      1       ORCL     1168992346       PARENT 1          2006-11-16 18:40:24

2       2      ORCL     1168992346       CURRENT 456954     2007-12-13 10:20:12

3      3       ORCL     1168992346       ORPHAN 3326890    2008-06-23 11:07:57

 

RMAN> RESTORE DATABASE UNTIL SCN 3326890

2> ;

 

Starting restore at 2008-06-23 12:27:19

using channel ORA_DISK_1

 

skipping datafile 1; already restored to file /u/app/oracle/oradata/orcl/systemf

skipping datafile 2; already restored to file /u/app/oracle/oradata/orcl/undotbf

skipping datafile 3; already restored to file /u/app/oracle/oradata/orcl/sysauxf

skipping datafile 4; already restored to file /u/app/oracle/oradata/orcl/users0f

restore not done; all files readonly, offline, or already restored

Finished restore at 2008-06-23 12:27:19

 

RMAN> alter database open resetlogs;

 

database opened

 

RMAN> list incarnation;

List of Database Incarnations

DB Key Inc Key DB Name  DB ID            STATUS  Reset SCN Reset Time

------- ------- -------- ---------------- --- ---------- ----------

1      1       ORCL     1168992346       PARENT 1          2006-11-16 18:40:24

2      2       ORCL     1168992346       PARENT 456954     2007-12-13 10:20:12

4      4       ORCL     1168992346       CURRENT 3326784    2008-06-23 12:27:43

3      3       ORCL     1168992346       ORPHAN 3326890    2008-06-23 11:07:57

 

 

至此数据库恢复到较早前一个时间点。

 

 

 

 

 

 

 

 

 

 

 

重复执行同一个恢复脚本会有以下报错


木雨山 21:01:49 

木雨山 21:02:14 
执行rman恢复的时候报下面的错,不知道是什么原因?日期:2011-3-1
HAHA 9:13:41 
D:\>rman target / nocatalog
恢复管理器: Release 10.2.0.1.0 - Production on 星期四 3月 27 00:18:13 2008
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
连接到目标数据库: ORCL (DBID=1176767170)
使用目标数据库控制文件替代恢复目录
RMAN> list incarnation;

数据库原型列表
DB 关键字  Inc 关键字 DB 名  DB ID            STATUS  重置 SCN  重置时间
------- ------- -------- ---------------- --- ---------- ----------
1       1       ORCL     1176767170       PARENT  1          10-3月 -08
2       2       ORCL     1176767170       PARENT  472611     25-3月 -08
3       3       ORCL     1176767170       PARENT  474163     25-3月 -08
4       4       ORCL     1176767170       PARENT  488631     26-3月 -08
5       5       ORCL     1176767170       PARENT  490308     26-3月 -08
6       6       ORCL     1176767170       PARENT  506067     27-3月 -08
7       7       ORCL     1176767170       CURRENT 506961     27-3月 -08
--发现有对象丢失,需要进行基于时间的恢复,但丢失对象是发生在实体5的运行过程中,因此使用实体5的备份进行不完全恢复
RMAN> reset database to incarnation
HAHA 9:13:52 
这个是rman比较经典的错误
木雨山 9:27:27 
RMAN> RESTORE DATABASE UNTIL SCN 490308

木雨山 9:27:32 
这样行吗
HAHA 9:27:44 
可以的
HAHA 9:27:57 
这个是按照scn好恢复
木雨山 9:28:24 
我是说 出现那个错误后  这样做 
HAHA 9:29:01 
 reset database to incarnation
木雨山 9:29:12 
要先执行这个命令吗
HAHA 9:29:12 
RMAN> list incarnation;

数据库原型列表
DB 关键字  Inc 关键字 DB 名  DB ID            STATUS  重置 SCN  重置时间
------- ------- -------- ---------------- --- ---------- ----------
1       1       ORCL     1176767170       PARENT  1          10-3月 -08
2       2       ORCL     1176767170       PARENT  472611     25-3月 -08
3       3       ORCL     1176767170       PARENT  474163     25-3月 -08
4       4       ORCL     1176767170       PARENT  488631     26-3月 -08
5       5       ORCL     1176767170       PARENT  490308     26-3月 -08
6       6       ORCL     1176767170       PARENT  506067     27-3月 -08
7       7       ORCL     1176767170       CURRENT 506961     27-3月 -08
--发现有对象丢失,需要进行基于时间的恢复,但丢失对象是发生在实体5的运行过程中,因此使用实体5的备份进行不完全恢复
RMAN> reset database to incarnation
HAHA 9:29:51 
这个就是alter database open resetlogs后才会引起这个错误
HAHA 9:30:22 
如果你把恢复的点放到执行resetlogs时间点后就不会出现这个问题了
木雨山 9:34:23 
不太明白
HAHA 9:34:52 
你看看rman20207的错误提示
木雨山 9:38:36 
哦 好的

 

 

 

利用归档及联机日志(如果需要的话。恢复的自动过程,一般不需要人为控制)恢复到合适时间点(我选择和控制文件一致的时间点)

 

 

RMAN> recover database until time '2009-03-10 18:07:00';

 

启动 recover 10-3 -09

使用通道 ORA_DISK_1

 

正在开始介质的恢复

 

存档日志线程 1 序列 3 已作为文件 E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LO

G 存在于磁盘上

存档日志文件名 =E:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\REDO03.LOG 线程 =1 序列 =3

 

介质恢复完成, 用时: 00:00:04

完成 recover 10-3 -09

 

RMAN> alter database open resetlogs;resetlogs将重置日志切换sequence,并初始化联机日志。所以,几乎所有的oracle教材都建议resetlogs后,马上进行一次完整备份,最好是脱机备份)

 

数据库已打开

 

 此时可以登录数据库,验证发现,表空间test1及表t1和数据已经恢复

 

ps:中间曾经报过ora-01153an incompatible media recovery is active错误,原因还没找到)

 

二。elder incarnationresetlogs版本恢复

 

 在上节的基础上,如果我们想将数据库恢复至1810删除表空间test1之后的状况。我们任然按照以上步骤执行:

 

RMAN> startup nomount;

 

RMAN> sql 'alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";

 

RMAN> restore controlfile from autobackup until time '2009-03-10 18:15:00';

 

(注意,仍然需要适当的还原控制文件。因为,在上次的恢复之后,test1表空间又回来了,造成数据库的结构改变,rman再次自动备份了其中含有‘test01.dbf’数据文件位置的控制文件。如果直接恢复,则无法去除test1表空间)

 

RMAN> alter database mount;

 

RMAN> restore database;

 

RMAN> sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";

 

RMAN> recover database until time '2009-03-10 18:15:00';

 

此时,出现以下错误:

 

RMAN-03002: recover 命令 ( 03/10/2009 19:21:19 ) 失败

RMAN-20207: UNTIL TIME RECOVERY WINDOW RESETLOGS 时间之前

 

20207错误:默认的认为until timeRECOVERY WINDOW的时间不能早于resetlogs的时间(我们上一个场景用resetlogs 打开数据的时间)。其原因可能是(个人猜测):既然resetlogs了,就不认识之前的归档日志信息了。把之前的归档日志排除在可供恢复的选择之外了。这只是默认的行为,可能处于节省系统资源的考虑,毕竟resetlogs之前的数据再利用可能很小。

 

我们先不管原因,其解决可按以下方法处理:

 

1.找到数据库的当前incarnation号:

 

RMAN> list incarnation of database "test";

 

 

数据库原型列表

DB 关键字  Inc 关键字 DB   DB ID            STATUS  重置 SCN  重置时间

------- ------- -------- ---------------- --- ---------- ----------

1      1       TEST     1978860036       PARENT 1          30-8 -05

2      2       TEST     1978860036       PARENT 534907     05-3 -09

3      3       TEST     1978860036       PARENT 762990     10-3 -09

4      4       TEST     1978860036       PARENT 764885     10-3 -09

5      5       TEST     1978860036       PARENT 765443     10-3 -09

6      6       TEST     1978860036       PARENT 767488     10-3 -09

7      7       TEST     1978860036       PARENT 771807     10-3 -09

8      8       TEST     1978860036       PARENT 774320     10-3 -09

9      9       TEST    1978860036       PARENT  779541    10-3 -09

10     10      TEST     1978860036       PARENT 782000     10-3 -09

11     11      TEST     1978860036       PARENT 783792     10-3 -09

12     12      TEST     1978860036       CURRENT 801599     10-3 -09  --此行原型(incarnation)号状态为current,即当前

 

所以,数据库的前一个(resetlogs之前)原型号为11.

 

我们重新启动数据库到mount状态(因为需要知道是重置哪个库,所以要挂载)

 

2.重置数据库到前一个原型(注意:此时的控制文件已经在前面的步骤中,还原到了适当的时间点。实际上,我们应该在nomount前还原控制文件,当然,这不是重置db原型必须的步骤)

 

RMAN> reset database to incarnation 11;

 

将数据库重置为原型 11

 

RMAN> sql "alter session set nls_date_format=''yyyy-mm-dd hh24:mi:ss''";

 

 

 

RMAN> restore database;

 

 

RMAN> recover database until time '2009-03-10 18:15:00';

 

 

RMAN> alter database open resetlogs;  (此时,数据库的incarnation编号将再次上涨)

 

数据库打开

 

 连接数据库,检查发现,表空间test1不在了。

 

 

转载于:https://my.oschina.net/duxuefeng/blog/28965

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值