当physical standby数据库转换为snapshot standby数据库时,它是一个完全可更新的standby数据库。snapshot standby数据库接收和归档来自primary数据库的redo数据,但是它不会应用。当snapshot standby数据库转换为physical standby数据库时,所有在snapshot standby数据库的操作被丢弃之后,physical standby数据库才会应用primary数据库的redo数据。这里的db01是primary数据库,db02是physical standby数据库。
1、查看当前的DataGuard配置信息:
我这里在主库中以oracle用户创建了一个test表,里面两个字段:id和name。如图所示:
这样在primary数据库中是可以直接访问的,但是在standby数据库中进行访问会报如下错误:
2、转换standby database为snapshot standby:
在broker中,转换standby database为snapshot standby是件很容易的事情,这里用到的是convert命令,这个命令的用法很简单,敲help convert会显示它的详细用法,如图所示:
开始转换:
3、访问snapshot standby数据库:
转换完成后,就可以直接访问数据库了。首先查看下database_role属性,然后再访问oracle.test表:
在snapshot standby数据库中删除oracle.test表里的所有内容,然后再插入一条新纪录:
接着在primary数据库中查询oracle.test:
看到了吧,刚才在snapshot standby上操作的内容,没有在primary上应用。
接着随便更新oracle.test中的某条记录,在snapshot standby上观察变化:
接着再次查询v$managed_standby视图,注意观察block#的变化:
block#的值由之前的599变为1771了。这就说明snapshot standby已经接收了primary的redo数据,但是没有应用它。再次在snapshot standby上查询oracle.test表:
snapshot standby上没有任何的变化。
4、转换snapshot standby为physical standby:
当前standby数据库db02处于mount状态,现在停止redo apply以启用physical standby数据库上的real-time query。
接着在physical standby上做如下操作:
最后查询oracle.test表,观察变化:
之前在snapshot standby上插入的Andy.liu记录已经被丢弃了。也可用使用sql语句进行snapshot standby与physical standby的转换,具体请参考官方文档。
参考文献:
1、Oracle? Data Guard Concepts and Administration 11g Release 2 (11.2)
2、Oracle? Data Guard Broker 11g Release 2 (11.2)
本文出自 “candon123” 博客,谢绝转载!