ITPub博客

物理data guard原理的理解(zt)

原创 Oracle 作者:jolly10 时间:2008-05-12 09:47:51 0 删除 编辑

本文网址:http://bbs.bitscn.com/120821

物理data guard原理的理解

这里只谈物理data guard的原理

*******************************************************************************
一般来说,我们在谈到data guard的时候,都会用很简单的语言来描述整个data guard的运做流程。
通常是这样的: primary database通过arch 进程,或者lgwr进程把archive log 送到standby database的archive_dest,然后standby database 通过RFS来接收这个archive log,然后MRP进程运用此log,也就是redo apply,使物理特征和primary database一模一样。

[@more@]


这样讲清楚了吗? 表面看起来很清楚,其实非常不清楚,歧义很多。
歧义在哪里? 那么我来问几个问题:
1.arch 和lgwr的区别在哪里?
2.standby log file到底要不要?
其实就光standby log file到底要不要这个问题就要回答很长一段才能解释清楚,因为这里涉及到很多东西,比如database运行模式,比如你是 archive log传送还是real-time? 这些都是有关系的。
下面从arch 和 lgwr 分开来谈data guard
一。 运行arch 进程
当使用arch进程的时候,其实很容易理解,因为一定要等待redo log----->archive log才可以进行传送。 也就是说这个时候是不可能做real-time的。 既然是一定要等待归档,怎么又可能实时呢?(从这里可以看出,如果要做real-time redo apply那就一定要使用lgwr进程)
这个时候整个流程其实比较简单:
arch进程使redo log归档,然后通过oracle net来传送到设置好的log_archive_dest_2目的地(可以先想想standby log file有用吗?) ,standby database发现有新的 archive log进来了,MRP进程使用此archive log进行 redo apply ,完成了.
疑问:如果我开始就建好了standby log file,请问,这个过程可能用到standby log file吗?
个人认为根本不需要,因为archive log直接传到目的地。而且此时不能使用高可用和高保护模式。因为这2个模式必须使用lgwr进程。
二. 运行lgwr 进程
当使用lgwr进程时分2种情况:
1.当在standby database运行 alter database recover managed standby database disconnect from session时,其实这里已经说明了要运行archive log来进行redo apply,所以此时就算你指定为lgwr也无效,因为primary database 还是默认的使用arch进程。所以这里的原理和上面的原理是一样的.
2.当使用real-time模式时就不一样了.也就是运行alater database recover managed standby database using current logfile disconnect from session,这个情况和 database 模式有关系。
1)高保护,高可用模式下
这个时候由于一定要等待redo log传送到standby log,primary database才可以commit,所以此时一定要使用standby log,否者redo log传到哪里呢? 而且此时 lgwr 一定要 sync 模式(也就是一定要同步执行,不能异步,想一下,如果可以异步,1万年都可能不去commit.)
2).高效率模式下
这个时候其实redo log还是传送到standby log,既然不是传送archive log,当然不可能直接把redo log的数据放到log_archive_dest_2中去了。而是先放到standby log file中,然后由standby database 去archive。但是此模式下 lgwr不用等待,也就是说primary database不用去等待redo log传送到standby database才可以commit。
但是官方文档说:在这个模式下可以使用lgwr sysnc/asysnc,还可以使用arch,还说standby log file可以有也可以没有。
疑问出来了:如果没有standby log file,请问如果使用real-time模式怎么办? 这个我是解释不清楚了,感觉这个是有问题的。(ORACLE公司总是喜欢打肿脸当胖子).
能解决这个疑问恐怕只有这句话了:if you use standby redo log files, you can enable real-time apply。我们可以确定一点,当没有使用standby log files的时候是不可以使用real-time apply的。
这样还差不多,这样的话疑问就没了,因为不能real-time嘛。
不过还有一点疑问是:既然不能real-time, 那么要lgwr sync干什么? lgwr 从redo log拿数据到哪里呢?
本文来自: 中国网管论坛(bbs.bitsCN.com) 详细出处参考:http://bbs.bitscn.com/120821

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/271283/viewspace-1003887/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-02-20

  • 博文量
    263
  • 访问量
    759736