当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配置信息:

DataGuard之Configure And Use A Snapshot Standby Database_职场

我这里在主库中以oracle用户创建了一个test表,里面两个字段:id和name。如图所示:

DataGuard之Configure And Use A Snapshot Standby Database_职场_02

这样在primary数据库中是可以直接访问的,但是在standby数据库中进行访问会报如下错误:

DataGuard之Configure And Use A Snapshot Standby Database_休闲_03

2、转换standby database为snapshot standby:

在broker中,转换standby database为snapshot standby是件很容易的事情,这里用到的是convert命令,这个命令的用法很简单,敲help convert会显示它的详细用法,如图所示:

DataGuard之Configure And Use A Snapshot Standby Database_休闲_04

开始转换:

DataGuard之Configure And Use A Snapshot Standby Database_blank_05

3、访问snapshot standby数据库:

转换完成后,就可以直接访问数据库了。首先查看下database_role属性,然后再访问oracle.test表:

DataGuard之Configure And Use A Snapshot Standby Database_休闲_06

DataGuard之Configure And Use A Snapshot Standby Database_数据库_07

在snapshot standby数据库中删除oracle.test表里的所有内容,然后再插入一条新纪录:

DataGuard之Configure And Use A Snapshot Standby Database_blank_08

接着在primary数据库中查询oracle.test:

DataGuard之Configure And Use A Snapshot Standby Database_休闲_09

看到了吧,刚才在snapshot standby上操作的内容,没有在primary上应用。

接着随便更新oracle.test中的某条记录,在snapshot standby上观察变化:

DataGuard之Configure And Use A Snapshot Standby Database_休闲_10

接着再次查询v$managed_standby视图,注意观察block#的变化:

DataGuard之Configure And Use A Snapshot Standby Database_blank_11

block#的值由之前的599变为1771了。这就说明snapshot standby已经接收了primary的redo数据,但是没有应用它。再次在snapshot standby上查询oracle.test表:

DataGuard之Configure And Use A Snapshot Standby Database_休闲_12

snapshot standby上没有任何的变化。

4、转换snapshot standby为physical standby:

DataGuard之Configure And Use A Snapshot Standby Database_数据库_13

当前standby数据库db02处于mount状态,现在停止redo apply以启用physical standby数据库上的real-time query。

DataGuard之Configure And Use A Snapshot Standby Database_休闲_14

接着在physical standby上做如下操作:

DataGuard之Configure And Use A Snapshot Standby Database_数据库_15

DataGuard之Configure And Use A Snapshot Standby Database_职场_16

最后查询oracle.test表,观察变化:

DataGuard之Configure And Use A Snapshot Standby Database_blank_17

之前在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)