使用flashback database 特性将dataguard 的standby 库激活为read write的实现方法

来源:互联网 发布:selenium python api 编辑:程序博客网 时间:2024/06/05 20:13

可以利用10gflashback特性来实现激活为standby库为read write状态,standby库处于read write状态时可以在standby库上进行一些不能在主库上进行的测试工作,在完成之后可以将read write状态stnadbyflashback到原来的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.归档当前的日志文件,可从库确认这个flackbackSCN

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.

 

 

三.将standbyflashbackbefore_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

 

主库的表已经通过archivelogapplystandby库中已经可以查询到了:

SQL> select * from t_flash;

 

NAME

------------------------------

just a test