这是我很早就写好的一篇文章,忘记发到51cto来了……就当是补上吧,前个双休日的时候写的……结果果然tj掉了……

考虑再三,还是决定给自己点压力,决定在双休日挑战一下dataguard

在最近学oracle的时候看到一句话,大致意思是这样的,如果你连spfile里的参数都调不来就去搞dataguard和rac这些东西的话,那就太累了。笔者觉得,不仅累,而且很浮躁,很难有很大的收获,笔者作为oracle小白,本是不应该去挑战这个难度的,但是笔者觉得如果不尝试一下,那永远也不会提高,所以无论成功还是失败,笔者都决定在双休日顶着一个项目的压力的同时挑战一下dataguard,也希望这个系列不会因为笔者的懒惰而tj掉……

文归正传,首先就这几天对dataguard的学习对理论知识做一个归纳。

首先,什么是dataguard?我的理解中,dg主要是为了oracle的高可用,容灾(异地),包括操作分离(提高系统性能)而搭建的数据库体系的一种工具或者说是一种模式。

 

在dataguard体系结构中,数据库分为主库(primary)和从库(standby)。

primary有且仅有一个,standby又分为逻辑standby和物理standby,简单来说逻辑standby就是逻辑上完全一致,而物理standby就是物理上完全一致……(唉,别扔鸡蛋……番茄也别扔……)逻辑一致很好理解,就是存储的体系结构完全一样,而物理standby就就在这基础上保证连磁盘上的存储位置都是一样的。从原理上来讲逻辑standby是利用redo转换成sql语句,然后在从库上进行同步,而物理standby则是直接apply redo来达成同步。

dataguard有三种模式。

最高可用:在不影响primary的情况下,和最大保护一样;一旦发现问题,则自动切换到最佳性能。

最佳性能:redo先写入primary 的redo log中,然后(可以不同步地)提交到standby中。

最大保护:所有的redo信息都必须在写入primary redo log的同时也要能提交到standby库中。

以笔者粗粗看来,基本还是用最高可用的吧,毕竟最佳性能不能保证同步和一致性,而最大保护甚至可能因为从库宕机导致主库也不可用了,具体性能方面和实现方面笔者会做进一步测试,并和大家分享。

笔者写的时候就发现自己写的很乱,思路也不是很清晰,其实网上有更好的教程和材料,只是笔者想自己总结一下,但是发现自己没有配过dataguard真的很没有底气,而且也对其中的原理没有深刻的认识,所以这篇文章只是笔者自己的一个总结,接下来会边做边想边写,希望在这个过程中,可以进一步了解dataguard,这篇文章只当是让笔者认识到自己的肤浅和不足,鞭策自己更加努力吧~