resetlog oracle,备份恢复实验-将数据库恢复到resetlog之前

如果没有恢复目录,执行了不完全恢复用open

resetlog打开后,日志序列号从1开始重新记数,之前的日志不可再用。使用恢复目录后,可以将数据库退到以前的日志。

为了准备其他备份实验用的数据环境,备份了多余的数据。不是很精确的只为这个实验所用

update scott.emp set sal=4000 where

empno=7788;

commit;

alter system switch

logfile;

select current_scn from

v$database;

select sal from scott.emp where

empno=7788;

开启控制文件自动备份。

备份过程

忘了记时间了,用这语句将scn转换为时间

SQL> select

to_char(scn_to_timestamp(534055),'yyyy.mm.dd hh24:mi:ss') from

dual;

TO_CHAR(SCN_TO_TIMESTAMP(53405

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

2012.11.19 20:51:39

动作

临近的Scn

所在log

临近时间

sal=4000

534055

8

20:51:39

switch logfile

Sal=5000

534105

8

20:52:51

Sal=6000

534125

8

20:53:21

Backup database

534332

8

20:57:25

switch logfile

534353

20:57:49

Sal=7000

534364

9

20:58:10

switch logfile

534586

20:58:31

Sal=8000

534596

10

20:58:48

Sal=9000

534621

10

20:59:04

Backup database

534983

21:02:59

switch logfile 3次

Sal=10000

535018

13

21:03:47

Sal=11000

535045

13

21:04:11

switch logfile

Backup database

537622

21:44:23

switch logfile 3次

14,15,16

Sal=12000

537998

17

21:50:02

switch logfile

538033

21:50:36

SQL> select

t.SEQUENCE#,t.RESETLOGS_CHANGE#,t.FIRST_CHANGE#,NEXT_CHANGE#,

nvl(t.END_OF_REDO_TYPE,'null') a from

v$archived_log t;

SEQUENCE# RESETLOGS_CHANGE#

FIRST_CHANGE# NEXT_CHANGE# A

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

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

2

446075

474979

500679 null

3

446075

500679

529934 null

4

446075

529934

531684 null

5

446075

531684

532432 null

6

446075

532432

532807 null

7

446075

532807

533025 null

8

446075

533025

534348 null

9

446075

534348

534379 null

10

446075

534379

534992 null

11

446075

534992

534994 null

12

446075

534994

534999 null

13

446075

534999

537306 null

14

446075

537306

537673 null

15

446075

537673

537687 null

16

446075

537687

537691 null

17

446075

537691

538032 null

进行一次不完全恢复,生成一个resetlog,使数据库有多个版本。

恢复到日志序列号为14,sal=12000的数据丢失,回到sal=11000。

startup force mount;

run {

set until sequence=14;

restore database;

recover database;

alter database open

resetlogs;

}

SQL> select sal from

scott.emp where empno=7788;

SAL

----------

11000

sal=11000有预想一样。

SQL>alter system

switch logfile;4次

RMAN> list incarnation

of database;

List of Database

Incarnations

DB Key Inc Key DB

Name DB

ID

STATUS

Reset SCN

Reset Time

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

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

1

8

LY

1369670644

PARENT

1

30-JUN-05

1

2

LY

1369670644

PARENT

446075

19-NOV-12

1

364

LY

1369670644

CURRENT 537307

19-NOV-12

select

t.SEQUENCE#,t.RESETLOGS_CHANGE#,t.FIRST_CHANGE#,NEXT_CHANGE#,

nvl(t.END_OF_REDO_TYPE,'null') a from

v$archived_log t where

t.FIRST_CHANGE#>=533025;

SEQUENCE# RESETLOGS_CHANGE#

FIRST_CHANGE# NEXT_CHANGE# A

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

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

8

446075

533025

534348 null

9

446075

534348

534379 null

10

446075

534379

534992 null

11

446075

534992

534994 null

12

446075

534994

534999 null

13

446075

534999

537306 null

14

446075

537306

537673 null

15

446075

537673

537687 null

16

446075

537687

537691 null

17

446075

537691

538032 null

18

446075

538032

538340 RESETLOGS

1

537307

537307

545884 null

2

537307

545884

545931 null

3

537307

545931

545977 null

4

537307

545977

545981 null

将数据库退到 2这个版本(书上叫这为“对应物”,好奇怪的名字)

RMAN> startup force

mount;

RMAN>reset database to

incarnation 2;

RMAN> list incarnation

of database;

List of Database

Incarnations

DB Key Inc Key DB

Name DB

ID

STATUS

Reset SCN

Reset Time

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

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

1

8

LY

1369670644

PARENT

1

30-JUN-05

1

2

LY

1369670644

CURRENT 446075

19-NOV-12

1

364

LY

1369670644

ORPHAN

537307

19-NOV-12

SQL> alter database

open;

SQL> select

current_scn from v$database;

CURRENT_SCN

-----------

567648

切换几次日志后,新的SCN不是从446075开始,而是接着从537307开始

1

537307

537307

545884 null

2

537307

545884

545931 null

3

537307

545931

545977 null

4

537307

545977

545981 null

5

537307

545981

567143 null

SQL> select sal from

scott.emp where empno=7788;

SAL

---------

11000.00

sal肯定还是11000

当前scn为567648,现尝试恢复到sal=8000,所在scn为534596

startup force mount;

run {

set until scn=534596;

restore database;

recover database;

alter database open

resetlogs;

}

SQL> select sal from

scott.emp where empno=7788;

SAL

---------

8000.00

没有问题。如果没有恢复目录,就不能恢复到scn=537307之前也就是resetlogs之前的旧日志。

在不使用恢复目录情况也能这样做。

RMAN> list incarnation

;

在有恢复目录和无恢复目录情况下 inc

key数字不同,因为恢复目录是为所有目标数据库拉通排的,编号不一样,这很正常

RMAN> reset database

to incarnation 2;

ORA-19910: can not change recovery

target incarnation in control file

RMAN> startup force mount;

RMAN> reset database to incarnation

2;

然后还原,恢复,打开,都一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值