特点:
snapshot standby database 会从主库接收和归档 redo data,但是不会对redo data进行apply。 仅当snapshot standby 的角色转换回physical standby database 的时候才会应用之前接收的apply 文件。 然后擦除作为snapshot standby 数据库时所有的DML和DDL操作。限制:
(1)Snapshot standby 数据库不能进行switchover 或者failover 操作。 在转换之前,也必须先从snapshot standby 转换成physical standby 以后才可以转换。(2)Snapshot standby 不支持最大保护模式。(原因:最大保护需要real time applied)
优点:
想做测试,主库不能操作,可以将备库转为快照备库,做完测试,再转为物理备库。将Physical Standby转成Snapshot Standby Database :
流程:
2. 确保fast recovery area已经配置(确保大小合适),但不需要启动flashback database功能。
SQL> show parameter flashbackNAME TYPE VALUE------------------------------------ ----------- --------------------db_flashback_retention_target integer 1440SQL> show parameter db_recover
NAME TYPE VALUE------------------------------------ ----------- --------db_recovery_file_dest string +FLASHdb_recovery_file_dest_size big integer 3882M-- 如果大小合适,不用调整大小
SQL> alter system set db_recovery_file_dest_size=10g scope=both;System altered.停止Redo Apply
SQL> alter database recover managed standby database cancel; 3. 备库进行切换SQL> ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;Database altered.SQL> select open_mode from v$database;
OPEN_MODE--------------------MOUNTED说明:备库的 alert 日志里面有详细记录,启动了一个后台进程:RVWR ,创建了一个guaranteed 的resotre point,
进行了resetlogs 的操作 。SQL> alter database open;
Database altered.SQL> select open_mode from v$database;
OPEN_MODE--------------------READ WRITE--模拟测试
SQL> create table andysnap (id int);Table created.SQL> insert into andysnap values(1);
1 row created.4. 主库日志切换,看日志是否正常传递到备库,且没有应用。SQL> alter system switch logfile;System altered.备库查看
SQL> select thread#,sequence#,applied from v$archived_log;
。。。。 1 78 NO5. 测试完毕,将 Snapshot Standby 转成 Physical Standby
SQL> shutdown immediate;SQL> startup mount;SQL> alter database convert to physical standby;Database altered.说明: 备库 alert 有详细记录 ,转换的过程相当于 Flashback restore , 并 drop 掉restore point 。SQL> shutdown immediate;SQL> startup;SQL> alter database recover managed standby database using current logfile disconnect from session;Database altered.6. 检测主备同步情况
主库:SQL> select max(sequence#) from v$archived_log;MAX(SEQUENCE#)-------------- 78备库:SQL> select sequence#,applied from v$archived_log;
。。。。。 78 IN-MEMORY71 rows selected.