oracle dg 三种模式切换

DG在最大性能模式MAXIMUM PERFORMANCE

  1. SQL> select protection_mode,protection_level from v$database;  
  2.    
  3. PROTECTION_MODE      PROTECTION_LEVEL  
  4. -------------------- --------------------  
  5. MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE  
  6.    
  7. SQL> select * from tab;  
  8.    
  9. TNAME                          TABTYPE  CLUSTERID  
  10. ------------------------------ -----------------  
  11. BONUS                          TABLE  
  12. DEPT                           TABLE  
  13. EMP                            TABLE  
  14. SALGRADE                       TABLE  
  15.    
  16. SQL> create table emp001 as select *from emp;    创建了一张表emp001  
  17.    
  18. Table created.  
  19.    
  20. SQL> select * from tab;  
  21.    
  22. TNAME                          TABTYPE  CLUSTERID  
  23. ------------------------------ -----------------  
  24. BONUS                          TABLE  
  25. DEPT                           TABLE  
  26. EMP                            TABLE  
  27. EMP001                         TABLE  
  28. SALGRADE                       TABLE  

去备机上查看,这张表并没有出现:

  1. SQL> select * from tab;  
  2.    
  3. TNAME                          TABTYPE CLUSTERID  
  4. ------------------------------ -----------------  
  5. BONUS                          TABLE  
  6. DEPT                           TABLE  
  7. EMP                            TABLE  
  8. SALGRADE                       TABLE  

  1. 这个时候,我需要在主库上执行一次日志切换:  
  2. SQL> alter system switch logfile;  
  3.    
  4. System altered.  
  5.    
  6. 再备库上再次查询,表已经出来:  
  7. SQL> /  
  8.    
  9. TNAME                          TABTYPE  CLUSTERID  
  10. ------------------------------ -----------------  
  11. BONUS                          TABLE  
  12. DEPT                           TABLE  
  13. EMP                            TABLE  
  14. EMP001                         TABLE    ----在主库新创建的表  
  15. SALGRADE                       TABLE  


 

 

DG在最大可用性模式Maximum availability

Primary端操作

  1. 修改初始化参数  
  2. SQL> alter system set log_archive_dest_2='SERVICE=sty OPTIONAL LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=sty';  
  3.    
  4. System altered.  
  5.    
  6. SQL> show parameter log_archive_dest_2  
  7.    
  8. NAME                                 TYPE        VALUE  
  9. ----------------------------------------------- ------------------------------  
  10. log_archive_dest_2                   string      SERVICE=sty OPTIONAL LGWR SYNC  
  11.                                                  AFFIRM VALID_FOR=(ONLINE_LOGF  
  12.                                                 ILES,PRIMARY_ROLE) DB_UNIQUE_N  
  13.                                                  AME=sty  
  14. SQL> startup mount;  
  15. ORACLE instance started.  
  16.    
  17. Total System Global Area  839282688 bytes  
  18. Fixed Size                  2217992 bytes  
  19. Variable Size             549455864 bytes  
  20. Database Buffers          285212672 bytes  
  21. Redo Buffers                2396160 bytes  
  22. Database mounted.  
  23.    
  24. SQL> alter database set standby databaseto maximize availability;  
  25.    
  26. Database altered.  


提示:maximize后可跟{PROTECTION | AVAILABILITY | PERFORMANCE},分别对应最大保护,最高可用性及最高性能。

Down掉数据库,重新启动

 

  1. SQL> alter database open;  
  2.    
  3. Database altered.  
  4.    
  5. 看一下当前的保护模式    --primary数据库操作  
  6. SQL> select protection_mode,protection_level from v$database;  
  7.    
  8. PROTECTION_MODE      PROTECTION_LEVEL  
  9. -------------------- --------------------  
  10. MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY  
  11.    
  12. SQL>  


 

Standby端操作

  1. SQL> alter system set log_archive_dest_2='SERVICE=pri OPTIONAL LGWR SYNCAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=pri';  
  2.    
  3. System altered.  
  4.    
  5. SQL> show parameter log_archive_dest_2  
  6.    
  7. NAME                                 TYPE        VALUE  
  8. ----------------------------------------------- ------------------------------  
  9. log_archive_dest_2                   string      SERVICE=pri OPTIONAL LGWR SYNC  
  10.                                                  AFFIRM VALID_FOR=(ONLINE_LOGF  
  11.                                                  ILES,PRIMARY_ROLE)DB_UNIQUE_N  
  12.                                                 AME=pri  
  13.    
  14. SQL> selectprotection_mode,protection_level from v$database;  
  15.    
  16. PROTECTION_MODE      PROTECTION_LEVEL  
  17. -------------------- --------------------  
  18. MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY  
  19.    
  20. SQL>  


 

这样就已经配置完成了。

我们现在停掉standby数据库,再看看primary数据库状态

  1. SQL> shutdown immediate  
  2. Database closed.  
  3. Database dismounted.  
  4. ORACLE instance shut down.  
  5.    
  6. SQL> selectprotection_mode,protection_level,name from v$database;  
  7.    
  8. PROTECTION_MODE      PROTECTION_LEVEL     NAME  
  9. -------------------- ------------------------------  
  10. MAXIMUM AVAILABILITY RESYNCHRONIZATION    WOO  


Standby数据库shutdown后,primary数据库保护级别切换为待同步。

 

启备机器后,一会儿就好了:

  1. SQL> startup  
  2. ORACLE instance started.  
  3.    
  4. Total System Global Area  839282688 bytes  
  5. Fixed Size                  2217992 bytes  
  6. Variable Size             507512824 bytes  
  7. Database Buffers          327155712 bytes  
  8. Redo Buffers                2396160 bytes  
  9. Database mounted.  
  10. Database opened.  
  11. SQL> selectprotection_mode,protection_level,name from v$database;  
  12.    
  13. PROTECTION_MODE      PROTECTION_LEVEL     NAME  
  14. -------------------- ----------------------------------------------------------------------  
  15. MAXIMUM AVAILABILITY RESYNCHRONIZATION    WOO  
  16.    
  17. SQL> selectprotection_mode,protection_level,name from v$database;  
  18.    
  19. PROTECTION_MODE      PROTECTION_LEVEL     NAME  
  20. -------------------- ----------------------------------------------------------------------  
  21. MAXIMUM AVAILABILITY MAXIMUM AVAILABILITYWOO  
  22.    
  23. SQL>  


再查看下主库状态:

  1. SQL> selectprotection_mode,protection_level,name from v$database;  
  2.    
  3. PROTECTION_MODE      PROTECTION_LEVEL     NAME  
  4. -------------------- ------------------------------  
  5. MAXIMUM AVAILABILITY MAXIMUM AVAILABILITYWOO  

测试:

在primary 执行创建表

  查看当前表的数量

  1. SQL> select * from tab;  
  2.    
  3. TNAME                          TABTYPE  CLUSTERID  
  4. ------------------------------ -----------------  
  5. BONUS                          TABLE  
  6. DEPT                           TABLE  
  7. EMP                            TABLE  
  8. EMP001                        TABLE  
  9. EMP003                         TABLE  
  10. SALGRADE                       TABLE  
  11.    
  12. rows selected.  

删除emp003表

  1. SQL> drop table emp003 purge;  
  2.    
  3. Table dropped.  

创建emp004表

  1. SQL> create table emp004 as select *from emp001;  
  2.    
  3. Table created.  

查看emp003表已经被删除,emp004表被创建成功。

  1. SQL> select * from tab;  
  2.    
  3. TNAME                          TABTYPE  CLUSTERID  
  4. ------------------------------ -----------------  
  5. BONUS                          TABLE  
  6. DEPT                           TABLE  
  7. EMP                            TABLE  
  8. EMP001                         TABLE  
  9. EMP004                         TABLE  
  10. SALGRADE                       TABLE  
  11.    
  12. rows selected.  


备库上数据直接就可以过来了:

查询到数据和第一次pry数据库一致:

  1. SQL> select * from tab;  
  2.    
  3. TNAME                          TABTYPE  CLUSTERID  
  4. ------------------------------ -----------------  
  5. BONUS                          TABLE  
  6. DEPT                           TABLE  
  7. EMP                            TABLE  
  8. EMP001                         TABLE  
  9. EMP003                         TABLE  
  10. SALGRADE                       TABLE  
  11.    
  12. rows selected.  

在pri端删除emp003后,可以看到在sty端也随即删除。

  1. SQL> select * from tab;  
  2.    
  3. TNAME                          TABTYPE  CLUSTERID  
  4. ------------------------------ -----------------  
  5. BONUS                          TABLE  
  6. DEPT                           TABLE  
  7. EMP                            TABLE  
  8. EMP001                         TABLE  
  9. SALGRADE                       TABLE  

在pri端创建emp004后,在sty端也随即实时创建。

  1. SQL> select * from tab;  
  2.    
  3. TNAME                          TABTYPE  CLUSTERID  
  4. ------------------------------ ------- ----------  
  5. BONUS                          TABLE  
  6. DEPT                           TABLE  
  7. EMP                            TABLE  
  8. EMP001                         TABLE  
  9. EMP004                         TABLE  
  10. SALGRADE                       TABLE  
  11.    
  12. rows selected.  
  13.    
  14. SQL>  

实验二,在maximum availability 模式下关闭standby端,在主库执行DML操作后起备库,是否会有数据丢失:

1、  关闭standby端:

  1. [root@sty ~]# shutdown -h now  
  2.    
  3. Broadcast message from root (pts/1) (TueMay 21 02:09:34 2013):  
  4.    
  5. The system is going down for system haltNOW!  
  6. [root@sty ~]#  
  7.    


2、  查看主库这个时候的状态,已经检测到了standby失败

  1. SQL> selectname,open_mode,database_role,protection_mode,SWITCHOVER_STATUS  From v$database;  
  2.    
  3. NAME                           OPEN_MODE            DATABASE_ROLE    PROTECTION_MODE      SWITCHOVER_STATUS  
  4. -------------------------------------------------- ---------------- -------------------- --------------------  
  5. WOO                            READ WRITE           PRIMARY          MAXIMUM AVAILABILITY FAILEDDESTINATION  
  6.    
  7. SQL>  


3、  这个时候我们删除emp004及创建emp005

  1. SQL> select * from tab;  
  2.    
  3. TNAME                          TABTYPE CLUSTERID  
  4. ------------------------------ -----------------  
  5. BONUS                          TABLE  
  6. DEPT                           TABLE  
  7. EMP                            TABLE  
  8. EMP001                         TABLE  
  9. EMP004                         TABLE  
  10. SALGRADE                       TABLE  
  11.    
  12. rows selected.  
  13.    
  14. SQL> drop table emp004 purge;  
  15.    
  16. Table dropped.  
  17.    
  18. SQL> create table emp005 as select *from emp001;  
  19.    
  20. Table created.  
  21.    
  22. SQL> select * from tab;  
  23.    
  24. TNAME                          TABTYPE  CLUSTERID  
  25. ------------------------------ -----------------  
  26. BONUS                          TABLE  
  27. DEPT                           TABLE  
  28. EMP                            TABLE  
  29. EMP001                         TABLE  
  30. EMP005                         TABLE  
  31. SALGRADE                       TABLE  
  32.    
  33. rows selected.  
  34.    


4、  把sty服务器启起来,open数据库:

打开备库后,我们可以看到,standby现在正在应用日志:

  1. SQL> select process, status fromv$managed_standby;  
  2.    
  3. PROCESS  STATUS  
  4. --------- ------------  
  5. ARCH     CLOSING  
  6. ARCH     CLOSING  
  7. ARCH     CONNECTED  
  8. ARCH     CLOSING  
  9. RFS      IDLE  
  10. RFS      IDLE  
  11. RFS      IDLE  
  12. MRP0     APPLYING_LOG  
  13.    

过一会儿,我们再查询,发现standby 端宕机过程中primary端数据库的改变也同样通过日志更新过来了。

  1. SQL> select * from tab;  
  2.    
  3. TNAME                          TABTYPE  CLUSTERID  
  4. ------------------------------ -----------------  
  5. BONUS                          TABLE  
  6. DEPT                           TABLE  
  7. EMP                            TABLE  
  8. EMP001                         TABLE  
  9. EMP005                         TABLE  
  10. SALGRADE                       TABLE  
  11.    
  12. rows selected.  


 我们通过这个实验可以看出,将DataGuard配置为Maximumavailability模式后,pri数据是实时同步到sty端。

 

 

DG最大保护模式Maximum protection

1、将主库修改为最大保护模式

  1. 先关闭主库  
  2. SQL>shutdown immediate  
  3. Databaseclosed.  
  4. Databasedismounted.  
  5. ORACLEinstance shut down.  
  6.  启动到mount状态  
  7. SQL>startup mount;  
  8. ORACLEinstance started.  
  9.    
  10. TotalSystem Global Area  839282688 bytes  
  11. FixedSize                  2217992 bytes  
  12. VariableSize             557844472 bytes  
  13. DatabaseBuffers          276824064 bytes  
  14. RedoBuffers                2396160 bytes  
  15. Databasemounted.  
  16.    
  17.  修改为最大保护模式  
  18. SQL>alter database set standby database to maximize protection;  
  19.    
  20. Databasealtered.  
  21.    
  22. Open数据库  
  23. SQL>alter database open;  
  24.    
  25. Databasealtered.  
  26.    

Primary端查询状态:

  1. SQL>select name,open_mode,database_role,protection_mode,SWITCHOVER_STATUS  From v$database;  
  2.    
  3. NAME                           OPEN_MODE            DATABASE_ROLE    PROTECTION_MODE      SWITCHOVER_STATUS  
  4. -------------------------------------------------- ---------------- -------------------- --------------------  
  5. WOO                            READ WRITE           PRIMARY          MAXIMUM PROTECTION   TO STANDBY  


 

Standby端查询状态(切换只需要操作主库,备库不需要动即可)

 

  1. SQL>select name,open_mode,database_role,protection_mode,SWITCHOVER_STATUS  From v$database;  
  2.    
  3. NAME      OPEN_MODE            DATABASE_ROLE    PROTECTION_MODE      SWITCHOVER_STATUS  
  4. ----------------------------- ---------------- -------------------- --------------------  
  5. WOO       READ ONLY WITH APPLY PHYSICAL STANDBYMAXIMUM PROTECTION   NOT ALLOWED  
  6.    

我们现在可以看到,primary和standby端现在都为Maximumprotection 最大保护模式。

 

实验

先查看当前的表

  1. SQL> select * from tab;  
  2.    
  3. TNAME                          TABTYPE  CLUSTERID  
  4. ------------------------------------- ----------  
  5. BONUS                          TABLE  
  6. DEPT                           TABLE  
  7. EMP                            TABLE  
  8. EMP001                         TABLE  
  9. EMP005                         TABLE  
  10. SALGRADE                       TABLE  
  11.    
  12. rows selected.  

我们删除emp005以及创建emp006表

  1. SQL> drop table emp005 purge;  
  2.    
  3. Table dropped.  
  4.    
  5. SQL> create table emp006 as selectfrom emp001;  
  6.    
  7. Table created.  
  8.    

我们可以看到emp005已经被删除,并且emp006表也被创建好了。

  1. SQL> select * from tab;  
  2.    
  3. TNAME                          TABTYPE  CLUSTERID  
  4. ------------------------------------- ----------  
  5. BONUS                          TABLE  
  6. DEPT                           TABLE  
  7. EMP                            TABLE  
  8. EMP001                         TABLE  
  9. EMP006                         TABLE  
  10. SALGRADE                       TABLE  
  11.    
  12. rows selected.  
  13.    
  14. SQL>  


现在看standby端,我们可以发现如下

两边的表是一样的

  1. SQL> select * from tab;  
  2.    
  3. TNAME                          TABTYPE  CLUSTERID  
  4. ------------------------------------- ----------  
  5. BONUS                          TABLE  
  6. DEPT                           TABLE  
  7. EMP                            TABLE  
  8. EMP001                         TABLE  
  9. EMP005                         TABLE  
  10. SALGRADE                       TABLE  
  11.    
  12. rows selected.  

 

在主库端删除的emp005及新创建的emp006也实时同步过来了

  1. SQL> select * from tab;  
  2.    
  3. TNAME                          TABTYPE  CLUSTERID  
  4. ------------------------------------- ----------  
  5. BONUS                          TABLE  
  6. DEPT                           TABLE  
  7. EMP                            TABLE  
  8. EMP001                         TABLE  
  9. EMP006                         TABLE  
  10. SALGRADE                       TABLE  
  11.    
  12. rows selected.  
  13.    
  14. SQL>  

我现在关闭sty端服务器: 

  1. [root@sty ~]# shutdown -h now  
  2.    
  3. Broadcast message from root (pts/1)(Tue May 21 03:14:28 2013):  
  4.    
  5. The system is going down for systemhalt NOW!  
  6.    


返回来看主库的状态:

 日志传输以及终止了:

  1. Log Transport Services   Error        ORA-16198: LGWR received timedout error from KSR  
  2. Log Transport Services   Error        Error 12543 received logging on to the standby  
  3. Log Transport Services   Error        LGWR: Error 12543 attaching to RFS for reconnect  
  4. Log Transport Services   Error        Error 12543 received logging on to the standby  
  5. Log Transport Services   Error        LGWR: Error 12543 attaching to RFS for reconnect  
  6.    


 一段时间之后,primary端也宕机了:

  1. SQL> selectname,open_mode,database_role,protection_mode,SWITCHOVER_STATUS  From v$database;  
  2.    
  3. NAME                                    OPEN_MODE           DATABASE_ROLE   PROTECTION_MODE      SWITCHOVER_STATUS  
  4. ------------------------------------------------------------ ---------------- -------------------- --------------------  
  5. WOO                                      READWRITE           PRIMARY          MAXIMUM PROTECTION   TO STANDBY  
  6.    
  7. SQL> selectname,open_mode,database_role,protection_mode,SWITCHOVER_STATUS  From v$database;  
  8. selectname,open_mode,database_role,protection_mode,SWITCHOVER_STATUS  From v$database  
  9. *  
  10. ERROR at line 1:  
  11. ORA-03135: connection lost contact  
  12. Process ID: 8386  
  13. Session ID: 39 Serial number: 5  

这个时候需要把standby端起来,primary端,数据库才能起来。

  1. SQL> startup mount;  
  2. ORACLE instance started.  
  3.    
  4. Total System Global Area  839282688 bytes  
  5. Fixed Size                  2217992 bytes  
  6. Variable Size             507512824 bytes  
  7. Database Buffers          327155712 bytes  
  8. Redo Buffers                2396160 bytes  
  9. Database mounted.  

停止redo应用

  1. SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASECANCEL;  
  2. Database altered.  

Open数据库

  1. SQL> alter database open;  
  2.    
  3. Database altered.  

开启redo应用

  1. SQL> ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE DISCONNECT FROM SESSION;  
  2.   
  3. Database altered.  

Database altered.再启主库

  1. SQL> startup  
  2. ORACLE instance started.  
  3.    
  4. Total System Global Area  839282688 bytes  
  5. Fixed Size                  2217992 bytes  
  6. Variable Size             507512824 bytes  
  7. Database Buffers          327155712 bytes  
  8. Redo Buffers                2396160 bytes  
  9. Database mounted.  
  10. Database opened.  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值