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机,也能保证不丢失数据。
模式切换实现记录:
查看当前保护模式
4查看数据库数据库状态,主库改为只读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)
1连接主数据库2修改数据状态并退出
Oracle Data Guard Switchover预期目标
角色
主机名
SID
DB_UNIQUE_NAME
网络连接名
备库
DB-01
orcl
ORCL
主库
DB-02
orcl
ORCLDG
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
Database altered.
SQL> exit
3DB-01数据库重新启动
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