使用flashback database 特性将dataguard 的standby 库激活为rea
可以利用10g的flashback特性来实现激活为standby库为read write状态,standby库处于read write状态时可以在standby库上进行一些不能在主库上进行的测试工作,在完成之后可以将read write状态stnadby库flashback到原来的recover mount状态,下图为操作原理过程: 下为实验过程: 一.从库: 1.?设置flashback区域: 要使用这个特性就必须在standby库中设置flashback 在我的库中: SQL> show parameter DB_RECOVERY_FILE_DEST NAME????????????????????????????????TYPE???????VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest???????????????string?????/dg_flashback db_recovery_file_dest_size??????????big integer??980M ? 2.?Standby库取消redo日志的应用并创建一个数据库的flashback?点 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; Database altered. ? SQL> CREATE RESTORE POINT before_application_test GUARANTEE FLASHBACK ?2?DATABASE; Restore point created. ? 二?主库 1.归档当前的日志文件,可从库确认这个flackback的SCN: SQL> ALTER SYSTEM ARCHIVE LOG CURRENT; System altered. 2.停止主库的日志传到从库: SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER; System altered. ? 三.激活为standby库为read write状态 1.激活为standby库 SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE; Database altered. ? 2,如果standb处于readonly状态时,强制重启到mount SQL> STARTUPMOUNTFORCE; ORA-32004: obsolete and/or deprecated parameter(s) specified ORACLE instance started. Total System Global Area?218103808 bytes Fixed Size?????????????????1260984 bytes Variable Size?????????????83886664 bytes Database Buffers?????????130023424 bytes Redo Buffers???????????????2932736 bytes Database mounted. ? 3.将standb改成?performance保护模式,并打开数据到read write状态,主库并不受standby库的影响,可以按正常的方式进行操作: SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE; Database altered. ? SQL> ALTER DATABASE OPEN; ? Database altered. SQL> select open_mode from v$database; ? OPEN_MODE ---------- READ WRITE 这时可以进行各种test工作:我在主库建表t_flash,standby库建了一张f_t表:可以在flashback之后看他是否还存在: ? 在主库建: SQL> create table t_flash(name char(30)); Table created. SQL> insert into?t_flash values('just a test'); 1 row created. ? SQL> commit; Commit complete. 从库建表f_t: SQL> create table f_t( a int); ? Table created. ? SQL> insert into f_t values(34); ? 1 row created. ? SQL> commit; ? Commit complete. ? ? 三.将standby库flashback到before_application_tes时的SCN并重新置为physical standby role 1从库: SQL> STARTUP MOUNT FORCE; ORA-32004: obsolete and/or deprecated parameter(s) specified ORACLE instance started. ? Total System Global Area?218103808 bytes Fixed Size?????????????????1260984 bytes Variable Size?????????????92275272 bytes Database Buffers?????????121634816 bytes Redo Buffers???????????????2932736 bytes Database mounted. SQL> FLASHBACK DATABASE TO RESTORE POINT before_application_test; ? Flashback complete. ? SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY; ? Database altered. ? SQL> STARTUP MOUNT FORCE; ORA-32004: obsolete and/or deprecated parameter(s) specified ORACLE instance started. ? Total System Global Area?218103808 bytes Fixed Size?????????????????1260984 bytes Variable Size????????????100663880 bytes Database Buffers?????????113246208 bytes Redo Buffers???????????????2932736 bytes Database mounted. SQL> select * from v$archive_gap;?? ? no rows selected ? SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT; ? Database altered. ? ? 2.主库 ?SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE; ? 四.检查在standby库被激活时的分别在pirmary,standby库上建的表,此时在standby库中是否存在: SQL> alter database recover managed standby database cancel; Database altered. ? SQL> alter database open read only; ? Database altered. ---从库的表已经不存在: SQL> select * from f_t; select * from f_t ?????????????* ERROR at line 1: ORA-00942: table or view does not exist ? 主库的表已经通过archivelog的apply在standby库中已经可以查询到了: SQL> select * from t_flash; ? NAME ------------------------------ just a test (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |