数据库
首页 > 数据库> > Oracle Data Guard模式和角色切换

Oracle Data Guard模式和角色切换

作者:互联网

               

        继上篇说到,Date Guard安装并测试成功。

        这篇主要记录Data Guard的三种模式切换【最大保护、最大性能和最大可用】和为了符合业务场景的主备库的角色切换。

最大保护模式

      

最大保护(maximize protection):最高级别的保护模式。primay上的事务在commit前必须确认redo已经传递到至少一个standby上,如果所有standby不可用,则primary会挂起。该模式能保证零数据丢失。

最大性能模式

最大性能(maximize performance):这是data guard默认的保护模式。事务可以随时提交,当前primary 数据库的redo 数据也需要至少写入一个standby 数据库,不过这种写入可以是不同步的,但standby对primary的性能影响最小。

最大可用模式


最大可用(maximize availability):在正常情况下,最大可用模式和最大保护模式一样;在standby不可用时,最大可用模式自动变为最大性能模式,所以standby故障不会导致primay不可用。只要至少有一个standby可用的情况下,即使primary down机,也能保证不丢失数据。

模式切换实现记录:


查看当前保护模式

Oracle 12c默认是最大性能模式, 所有操作都是在主库进行

SQL> select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;

DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL

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

PRIMARY          MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

当前保护模式为:最大性能模式。


关闭数据库

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。


启动到mount状态

SQL> startup mount

ORACLE 例程已经启动。

Total System Global Area  289406976 bytes

Fixed Size      1248600 bytes

Variable Size    92275368 bytes

Database Buffers  192937984 bytes

Redo Buffers    2945024 bytes

数据库装载完毕。


修改参数

修改为最大可用模式(如果pfile 中的参数已配置为:最大可用模式,可不执行 alter system这一句)

SQL>alter system set log_archive_dest_2='SERVICE=DMSDG LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DMSDG';


保护模式

 修改保护模式为最大可用模式

SQL> alter database set standby database to maximize availability;

数据库已更改。


打开数据库

SQL> alter database open;

数据库已更改。


主库查询

SQL> select open_mode,database_role,protection_mode,protection_level from v$database;


OPEN_MODE        DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL

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

READ WRITE       PRIMARY         MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

保护模式:已为最大可用


备库查询

SQL> select open_mode,database_role,protection_mode,protection_level from v$database;


OPEN_MODE        DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL

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

READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

保护模式:已为最大可用


所有保护模式语句

重要:

最大性能模式 ASYNC VALID    

SQL> alter system set log_archive_dest_2='SERVICE=DMSDG ASYNC VALID VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DMSDG'; 

DB_UNIQUE_NAME=根据实际情况来


最大可用模式 LGWR SYNC AFFIRM

SQL> alter system set log_archive_dest_2='SERVICE=DMSDG LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DMSDG';


最大可用,根据实际而定

SQL>alter database set standby database to maximize availability; 


最大保护

SQL> alter database set standby to maximize protection;


最大性能

SQL> alter database set standby to  maximize performance;

主备角色切换(DG Switchover)

Oracle Data Guard Switchover预期目标

角色

主机名

SID

DB_UNIQUE_NAME

网络连接名

备库

DB-01

orcl

ORCL

主库

DB-02

orcl

ORCLDG

1连接主数据库

图片

2修改数据状态并退出

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;

Database altered.

SQL> exit

3DB-01数据库重新启动    图片

图片

4查看数据库数据库状态,主库改为只读

SQL> select open_mode,database_role,protection_mode,protection_level from v$database;


OPEN_MODE          DATABASE_ROLE    PROTECTION_MODE        PROTECTION_LEVEL

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

READ ONLY      PHYSICAL STANDBY MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

5DB-01数据库,启动恢复功能,接收数据同步状态

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

Database altered.


SQL> select open_mode,database_role,protection_mode,protection_level from v$database;


OPEN_MODE          DATABASE_ROLE    PROTECTION_MODE        PROTECTION_LEVEL

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

READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

至此DB-01,由主库切换为备库STANDBY状态完成。

6DB-02,由当前备库角色切换为主库角色,并重启

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

Database altered.



SQL> shutdown immediate;

ORA-01109: database not open

Database dismounted.

ORACLE instance shut down.

SQL>

SQL> startup;

ORACLE instance started.


Total System Global Area 1660944384 bytes

Fixed Size               8621376 bytes

Variable Size               1543504576 bytes

Database Buffers        100663296 bytes

Redo Buffers                  8155136 bytes

Database mounted.

Database opened.

SQL> select open_mode,database_role,protection_mode,protection_level from v$database;


OPEN_MODE          DATABASE_ROLE    PROTECTION_MODE        PROTECTION_LEVEL

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

READ WRITE            PRIMARY         MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

至此DB-02由备库的角色,切换为主库的角色,接下来验证数据同步功能是否正常!

SQL> select *  from t1;

ID NAME

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

 1 one

 2 two

SQL> insert into t1 values(3,'three');

1 row created.


SQL> insert into t1 values(4,'four');

1 row created.


SQL> commit;

Commit complete.


SQL> select * from t1;


ID NAME

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

 3 three

 4 four

 1 one

 2 two

SQL> alter system switch logfile;

System altered.

7DB-01(当前角色为备库)

使用test用户登录数据库,验证新写入的数据是否已同步。

SQL> select * from t1;


ID NAME

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

 3 three

 4 four

 1 one

 2 two


SQL>

至此已验证,DB-01,DB-02 进行角色切换后,数据同步仍然是成功的,我们的整个Data Guard 功能配置成功。

图片




标签:保护模式,protection,database,--------------------,Guard,PROTECTION,SQL,Oracle,Data
来源: https://blog.51cto.com/u_15127633/2766728