Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

65

积分

0

好友

31

主题
1#
发表于 2012-4-18 07:42:22 | 查看: 9274| 回复: 9
resetlog 和 noresetlog
今天研究了一下resetlog和noresetlog,有些疑问
发现一个特点
就是resetlog通常用于不完全恢复
   noresetlog通常用于完全恢复

场景如下
例如今天的数据,我想恢复到昨天
就可以 恢复完毕,必须用 resetlog的方式打开
这个操作的目的有两个
1)将所有redolog清空(archivelog应当不清空吧?)
2)不再应用redolog中的日志,这样就保证不会应用到今天
3)但是所有数据文件的检查点要设置到什么时间点呢?或者那四种完全检查点要写到哪个时间点呢?
等于打开数据库后,redo日志回归到原点,即相当于数据库刚刚创建的时候,这时还没有业务数据的操作
但是我不明白,打开resetlog后为何要马上做一次全备份呢?
假设我们数据库每天都备份,那么至少昨天以前的数据库备份都在啊?
而norestlog的目的就是不改变redo 日志
如果完全恢复,例如实例恢复,通常就是noresetlog方式打开
其实默认就是noresetlog的方式打开。
noresetlog打开其实就是保持redolog日志不变。
但是看到的说法是
恢复system scn=datafile scn=start scn=redolog scn(当前日志最大SCN),
当前日志最大SCN是什么含义呢?
10#
发表于 2013-1-7 09:36:59
我觉得你应该现弄明白SCN的作用。SCN是数据库进行数据校验其完整性的一种机制,通过controlfile,datafile,redo这三个文件中的SCN对比来确定哪个文件是老旧文件。可以利用事件号trace出来的文件进行观察 也可以用rman方法很多,都可以试试。
另外resetlogs和noresetlogs根本的区别就是利用他们还原后的redolog是否能继续应用,而且resetlogs和noresertlogs一方面可以根据redo来判断要不要resetlogs、noresetlogs,另一方面还可以根据你要把数据还原到哪一个SCN所应用的controlfile来决定要不要进行resetlogs或noresetlogs。

回复 只看该作者 道具 举报

9#
发表于 2012-12-31 09:37:42
刚学oracle的时候,我也经常在想这个问题,顶一下贴~

回复 只看该作者 道具 举报

8#
发表于 2012-12-28 21:45:08
"alter database open与alter databas open noresetlogs显然是有很大区别的"
open会读数据文件,然后根据文件头进行前滚,回滚。。。
至于不完全恢复: 基于时间点,基于scn,基于sequnce number,使用 备份的控制文件,重建控制文件……
我感觉,noresetlogs 是适用于重建控制文件的时候选择noresetlogs的场景,比如全部控制文件丢失且无备份的控制文件,这时只能用重建控制文件的方法,由于redo logfile都没有丢失(除了控制文件,其余都没有损坏),这是就要使用noresetlogs重建控制文件了。

如果使用resetlogs,最后会create redo logfile xxx reused的。。。。。。

archive log file 跟这些都没有关系,它就是个归档。

回复 只看该作者 道具 举报

7#
发表于 2012-12-28 15:41:38
贴子沉了,刘大再顶一下啊
数据库做resetlog时除了重置日志还做什么操作?redo中可能有未提交的或没写到磁盘的数据怎么办?怎么达到一致性而open resetlogs来打开数据库呢?

回复 只看该作者 道具 举报

6#
发表于 2012-4-19 08:26:25
SQL> startup mount;
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  2020224 bytes
Variable Size             125832320 bytes
Database Buffers          155189248 bytes
Redo Buffers                2170880 bytes
Database mounted.
SQL> alter database open noresetlogs;
alter database open noresetlogs
*
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery


SQL> alter database open;

Database altered.

通过以上的小测试,说明alter database open与alter databas open noresetlogs显然是有很大区别的,noresetlogs应该也是用于不完全恢复的,但是resetlogs与noresetlogs的区别,我还不知道,期待高手答疑…

回复 只看该作者 道具 举报

5#
发表于 2012-4-18 22:57:17
原帖由 chunchun2012 于 2012-4-18 13:20 发表
1.archivelog产生以后已经跟数据库运行没有太大关系,不存在清不清空一说,只不过一般情况下,resetlogs以后,online redolog会重新计数,以前的archivelog不能用于恢复(当然也有特殊手段可以使以前的archivelog应用于恢复,需要 ...


1)完全恢复和不完全恢复当然是从结果论,这点我完全同意,我之所以将resetlog和noretsetlog引入进来,还是希望讨论
  一般场景下,完全恢复是用resetlog,不完全恢复是用noresetlog
2)我的问题是“可以直接用alter database open打开数据库”
      是否就隐含调用了 “alter database open noresetlog”

回复 只看该作者 道具 举报

4#
发表于 2012-4-18 13:20:47
1.archivelog产生以后已经跟数据库运行没有太大关系,不存在清不清空一说,只不过一般情况下,resetlogs以后,online redolog会重新计数,以前的archivelog不能用于恢复(当然也有特殊手段可以使以前的archivelog应用于恢复,需要设置incarnation),所以建议立即做一个完全备份,目的是保证数据库损坏时,可以应用有效的备份来恢复。另外,log sequence重新计数,并不代表着数据库回到了刚刚创建的时候,这个时候数据文件中以前的内容都还是有的(少数记录因为不完全恢复的原因会丢失)

2.
不完全恢复与完全恢复的本质区别,不在于恢复的时候,有没有使用reseglogs或noresetlogs参数,而在于有没有恢复到出现问题前的那一时刻,如果只是恢复到出现问题的那一时间点的过去某一时刻,那就是不完全恢复(着重不完全),如果能够恢复到出现问题前的那一时刻,就是完全恢复,完全恢复时打开数据库不需要resetlog或noresetlog参数,可以直接用alter database open打开数据库

[ 本帖最后由 chunchun2012 于 2012-4-18 13:21 编辑 ]

回复 只看该作者 道具 举报

3#
发表于 2012-4-18 13:14:54
"但是我不明白,打开resetlog后为何要马上做一次全备份呢?"

10g 以前 resetlogs前的备份 对于当前的 incarnation 是不可用的, 虽然10g以后这一点被改良成可用的了, 但是 oracle官方仍推荐在 resetlogs后 全备数据库

"恢复system scn=datafile scn=start scn=redolog scn(当前日志最大SCN),"

这个说法 我认为 并不准确

它可能指的是current logfile的NEXT SCN,但是 我并不确认。

LOG FILE #3:
  (name #1) /s01/oradata/G10R21/onlinelog/o1_mf_3_7ch816g2_.log
  (name #2) /s01/flash_recovery_area/G10R21/onlinelog/o1_mf_3_7ch817gp_.log
Thread 1 redo log links: forward: 0 backward: 2
siz: 0x19000 seq: 0x00000016 hws: 0x1 bsz: 512 nab: 0xffffffff flg: 0x8 dup: 2
Archive links: fwrd: 0 back: 0 Prev scn: 0x0000.010e84c7
Low scn: 0x0000.010ee94e 04/17/2012 09:24:26
Next scn: 0xffff.ffffffff 01/01/1988 00:00:00

回复 只看该作者 道具 举报

2#
发表于 2012-4-18 09:00:56
resetlog后为何要马上做一次全备份呢?

因为你使用RESETLOG的方式打开了数据库,REDO的序号将重置,就是说从1开始,如果你没有全备,假如此时数据库运行了3天,你想恢复到昨天是恢复不了的。

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 06:41 , Processed in 0.049482 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569