Oracle 11g DataGuard 角色转换(一)
——Switchover to a Physical Standby Database
Data Guard环境下,数据库分为主库(primary) 和备库(standby) 两种角色。可以使用SQL语句进行数据库角色的动态转换。Oracle Data Guard支持Switchover和Failover两种角色转换。其中switchover角色转换,允许主库与它的一个备库进行角色转换,在switchover转换过程中可以没有数据丢失。在角色转换之后,每个数据库都继续执行它在Data Guard 配置中的新角色。在系统、硬件升级或滚动升级oracle数据库软件及补丁包过程中,Switchover 角色转换可以缩短主库的宕机时间。
【实验环境】
Red Hat Enterprise Linux Server release 5.4
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0
【Switchover前 DG主库、物理备库结构信息】
【实验过程】
切换前:主库:beijing 绿色。物理备库:shanghai 黄色
切换后:新主库:shanghai 黄色。新物理备库:beijing 绿色
1、切换前准备
为了更好的体现DataGuard搭建过程中,主库、备库各参数的意义,在前面搭建DG环境时,特意将主库、备库的db_name和db_unique_name以及主、备库的文件存放位置等进行了不同设置。同时在搭建的过程中,主、备库的参数修改上也使用了最小化的更改,以便区分远程归档目录、FAL等在DG中的真正作用。在当前DG环境下,主库参数文件中有本地、远程两个归档路径、无FAL配置,主库中未添加standby日志组。备库参数文件中只有本地归档路径,有FAL配置,备库中有4个standby日志组。
所以在switchover前,首先对主、备库参数文件、日志组配置以及网络配置做同步。
1.1、主库添加standby日志组
查看当前主库日志组情况
select sequence#,group#,bytes/1024/1024 MB from v$log;
select member from v$logfile;
添加4个standby日志组
alter database add standby logfile group 4 '/u01/app/oracle/oradata/DGDB/redo04.std' size 50m;
alter database add standby logfile group 5 '/u01/app/oracle/oradata/DGDB/redo05.std' size 50m;
alter database add standby logfile group 6 '/u01/app/oracle/oradata/DGDB/redo06.std' size 50m;
alter database add standby logfile group 7 '/u01/app/oracle/oradata/DGDB/redo07.std' size 50m;
添加standby日志后,主、备库日志组配置相同
select member from v$logfile;
1.2、初始化参数文件
主库、添加FAl、目录转换(红色),特别注意FAL Server与Client的配置值,对应tnsnames.ora中的名称
- DB_UNIQUE_NAME=beijing
- LOG_ARCHIVE_CONFIG='DG_CONFIG=(beijing,shanghai)'
- LOG_ARCHIVE_DEST_1=
- 'LOCATION=/home/oracle/beijing/
- VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
- DB_UNIQUE_NAME=beijing'
- LOG_ARCHIVE_DEST_2=
- 'SERVICE=sh LGWR SYNC AFFIRM
- VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
- DB_UNIQUE_NAME=shanghai'
- LOG_ARCHIVE_DEST_STATE_1=ENABLE
- LOG_ARCHIVE_DEST_STATE_2=ENABLE
- FAL_SERVER=sh
- FAL_CLIENT=bj
- DB_FILE_NAME_CONVERT='/u02/oradata/sh','/u01/app/oracle/oradata/DGDB'
- LOG_FILE_NAME_CONVERT='/u02/oradata/sh','/u01/app/oracle/oradata/DGDB'
- STANDBY_FILE_MANAGEMENT=AUTO
备库添加远程归档路径(红色)
- DB_NAME=DGDB
- DB_UNIQUE_NAME=shanghai
- LOG_ARCHIVE_CONFIG='DG_CONFIG=(beijing,shanghai)'
- LOG_ARCHIVE_DEST_1=
- 'LOCATION=/u02/arch/sh/
- VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
- DB_UNIQUE_NAME=shanghai'
- LOG_ARCHIVE_DEST_STATE_1=ENABLE
- LOG_ARCHIVE_DEST_2=
- 'SERVICE=sh LGWR SYNC AFFIRM
- VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
- DB_UNIQUE_NAME=beijing'
- LOG_ARCHIVE_DEST_STATE_2=ENABLE
- FAL_SERVER=bj
- FAL_CLIENT=sh
- DB_FILE_NAME_CONVERT='/u01/app/oracle/oradata/DGDB','/u02/oradata/sh'
- LOG_FILE_NAME_CONVERT='/u01/app/oracle/oradata/DGDB','/u02/oradata/sh'
- STANDBY_FILE_MANAGEMENT=AUTO
1.3、主库、备库 tnsnames
more $ORACLE_HOME/network/admin/tnsnames.ora
sh = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = shanghai.lxh.net)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = shanghai) ) ) bj = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = beijing.lxh.net)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = beijing) ) ) |
1.4、重启验证参数配置
主库重启查看参数
show parameter fal
show parameter convert
show parameter standby
备库重启到mount查看参数
show parameter log_archive_dest_2
2、主库切物理备库
2.1、切换前主库查看是否有gap
select status,gap_status from v$archive_dest_status where dest_id=2;
2.2、主库设置为 最大性能模式
alter database set standby database to maximize performance;
select database_role,protection_mode,protection_level from v$database;
2.3、备库 取消日志应用
alter database recover managed standby database cancel;
2.4、查看主备库角色和状态
此时主库switchover_status显示“TO STANDBY”,即表示主库此时可以切换为备库
select database_role,switchover_status from v$database;
2.5、主库切物理备库
alter database commit to switchover to physical standby with session shutdown;
切换完毕后查看主库角色,已经是:PHYSICAL STANDBY 物理备库
select database_role,switchover_status from v$database;
此时切换的第一个环节完成,主库成功切换为物理备库
3、原备库切换为新主库
3.1、备库切换前应用日志、查看状态
原备库shanghai切换主库前,要先应用日志,switchover_status 显示“TO PRIMARY”表示可以切换为主库
select database_role,switchover_status from v$database;
alter database recover managed standby database disconnect;
select database_role,switchover_status from v$database;
3.2、原备库 切换为 新主库
alter database commit to switchover to primary;
切换完成后查看,已经是PRIMARY状态
select database_role,switchover_status from v$database;
3.3、新备库 (原主库)关闭远程归档、重启到mount状态应用日志
此时备库已经成功切换为新的主库,需禁用原来主库的远程归档
alter database recover managed standby database disconnect;
3.4、新主库开库、切换模式验证
alter database open;
alter database set standby database to maximize availability;
新备库开库,验证模式
alter database open;
select database_role,open_mode,protection_mode,protection_level from v$database;
至此switchiover角色转换第二步也已经完成,新的主库shanghai(原备库)已经与原来的主库beijing完成了角色切换。
如果要使用11g DataGuard日志应用与数据读取同步进行,新的备库上可以使用Real-Time Apply方式应用日志。
alter database recover managed standby database using current logfile disconnect;
select database_role,open_mode,protection_mode,protection_level from v$database;
此时查看新主库的switchover状态,是“TO STANDBY”状态,即可以切换为备库。
我们可以对原来的主库进行升级等操作,升级结束后,再次进行switchover角色切换,就恢复到原来的主备关系。
【实验总结】
1、DataGuard环境下,如果需要对数据库进行软件、硬件升级等操作,使用Switchover主备切换,可以最大限度减少主库宕机对生产业务的影响。Switchover角色切换后,原来的主库角色已经是切换到备库状态,生产环境的业务可以在新的主库上进行,可以对原主库进行升级等操作而不必担心宕机时间太长对业务产生影响。在原主库升级完成后,再进行一次switchover主备切换,就在最少的宕机时间下,完成了对主库的升级工作。
2、Switchover角色切换两个步骤:主库切物理备库、备库切为新的主库。切换之前要配置好主备库初始化参数、standby日志组、查看监听和tnsnames等准备工作。还需要查看是否有GAP,要在没有GAP的情况下切换,确保切换过程中数据不会丢失。