ORACLE物理DG日常管理
NSA 是为了减少从redo logfile 读的IO,直接从内存里读redo
在11g中,如要使用real time apply,需要加using current logfile,
在12c中,如果要不使用real time apply,需要加using archived log,using current logfile已经过期作废。
不带using语句,在11g中,默认是不使用real time apply,而在12c中是默认使用real time apply。
操作说明:
发现是read only模式,说明备库当前并没有开启归档日志应用进程,这个时候我们可以手动开启该进程,执行下面的命令: (在备库)
注册归档
alter database register logfile ‘/yyb_arch2/arch_2_212822_919381173.arc‘
SQL> alter database recover managed standby database using current logfile disconnect from session;
alter database recover managed standby database disconnect from session;
如果发现当前数据库的打开模式是read only with apply我们也可以手工关闭归档应用程序,执行下面的命令:
SQL> alter database recover managed standby database cancel;
1、DG环境的日常巡检
1.1、主库环境检查
1.1.1、主库实例启动状态检查
操作命令:
SQL> select instance_name,status from v$instance;
1.1.2、主库启动模式检查
SQL> select name,open_mode from v$database;
1.1.3、主库DG环境的保护模式检查
操作位置:主库 操作命令:
SQL> select database_role, protection_mode, protection_level from v$database;
操作结果:
DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
-------------------------- -------------------------------------- ---------------------
PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
1.1.4、主库用于控制日志同步的参数检查
操作命令:
SQL> show parameter log_archive_dest_2;
操作说明:
通过该参数设置的网络服务名,主库能够找到该DG环境当中的备库,通过将主库的归档日志同步到备库;查询结果并没有看到lgwr/arch、sync/async、affirm/noaffirm的参数设置,说明当前主库没有对这三个参数进行设置,当前使用的是默认设置,即:arch、async、noaffirm的设置。
1.1.5、主库查看是否开启强制日志功能
操作命令:
SQL> select name,force_logging from v$database;
操作说明:
DG环境下主库要求必须开启强制日志功能,如果发现状态是NO,需要手动执行下面的命令开启该功能。
SQL> alter database force logging;
1.1.7、主库上查询归档日志的应用情况
操作命令:
SQL> set pagesize 50; SQL> col name for a50
SQL> select name,SEQUENCE#,APPLIED from v$archived_log order by sequence#;
操作结果:
NAME SEQUENCE# APPLIED
-------------------------------------------------------------- ----------------- -----
/u01/app/oracle/arch/1_5_886855721.dbf 5 NO
cs01 5 YES
/u01/app/oracle/arch/1_6_886855721.dbf 6 NO
cs01 6 YES
/u01/app/oracle/arch/1_7_886855721.dbf 7 NO
cs01 7 YES
操作说明:
该视图记录了归档日志的应用情况,由查询结果可以看出,主库上的该视图会同时记录主库和同步到备库的归档日志的应用情况。视图中显示归档到本地路径的归档日志的名字使用的是绝对路径,并且应用状态为NO,而同步到远端备库上的归档日志名字统一都为cs01,并且应用状态显示为YES。这说明同步到备库上的归档日志都已经被应用了。
1.1.8、主库上查看DG环境进程的状态
操作命令:
SQL> select process,status from v$managed_standby;
操作结果:
PROCESS STATUS
------------- ------------
ARCH CLOSING
ARCH CLOSING
ARCH CLOSING
ARCH CLOSING
LNS WRITING
操作说明:
status状态说明参阅v$managed_standby视图说明(笔记里有)
LNS进程: 于在主库上将主库的归档日志同步到备库上,将归档日志投递给备库上的RFS进程。
1.1.9、主库上查看DG的状态信息
操作命令:
SQL> col message for a100
SQL> select message_num,message from v$dataguard_status;
1.1.10、主库SWITCH OVER角色和状态的检查
操作命令:
SQL> select name,database_role,switchover_status from v$database;
操作结果:
NAME DATABASE_ROLE SWITCHOVER_STATUS
------------------ ------------------------- --------------------------------
CS02 PRIMARY TO STANDBY
操作说明:
如果主库的切换状态显示为SESSION ACTIVED状态也是正常的。
1.2、备库环境检查
1.2.1、备库实例的启动状态检查
操作命令:
SQL> select instance_name,status from v$instance;
1.2.2、备库启动模式检查
操作命令:
SQL> select name,open_mode from v$database;
打开模式是read only with apply
SQL> alter database recover managed standby database disconnect from session;
如果发现当前数据库的打开模式是read only with apply我们也可以手工关闭归档应用程序,执行下面的命令:
SQL> alter database recover managed standby database cancel;
重新查看备库的启动模式,执行下面的命令:
1.2.3、备库DG环境的保护模式检查
执行命令:
SQL> select database_role, protection_mode, protection_level from v$database;
1.2.4、备库用于控制日志同步的参数检查
操作命令:
SQL> show parameter log_archive_dest_2
操作结果:
NAME TYPE VALUE
-------------------------------- ----------- ----------------------------------------------
log_archive_dest_2 string service=cs02 valid_for=(online_logfiles,primary_role) db_unique_name=cs02
1.2.5、备库上查看同步过来的归档日志的应用情况
操作命令:
SQL> set pagesize 50 SQL> col name for a50
SQL> select name,SEQUENCE#,APPLIED from v$archived_log order by sequence#;
操作结果:
NAME SEQUENCE# APPLIED
-------------------------------------------------------------- ------------------ ---------
/u01/app/oracle/arch/1_5_886855721.dbf 5 YES
/u01/app/oracle/arch/1_6_886855721.dbf 6 YES
/u01/app/oracle/arch/1_7_886855721.dbf 7 YES
操作说明:
如果发现备库归档日志的编号不连续,则需要到主库去对照主库的归档日志编号,找到主库上已经归档但却没有同步到备库上的那些归档日志手动拷贝过来,并将其注册到备库内,注册归档日志的命令如下所示:
SQL> alter database register physical logfile ‘/opt/arch/归档文件名’
然后再重新开启备库的应用归档日志进程,执行下面的命令即可:
SQL> alter database recover automatic standby database;
1.2.6、备库上查看归档日志有没有裂缝(同操作2.5部分类似)
操作命令:
SQL> select * from v$archive_gap;
操作说明:
如果DG环境日志同步正常,则不会查到任何记录,如果查出结果,则说明目前的DG环境归档日志有裂缝,需要执行2.5部分的操作去解决。
1.2.7、备库上查看DG环境特有进程的状态
操作命令:
SQL> select process,status from v$managed_standby;
操作结果:
PROCESS STATUS
------------------ ------------------------
ARCH CLOSING
ARCH CLOSING
ARCH CONNECTED
ARCH CLOSING
RFS IDLE
RFS IDLE
RFS IDLE
RFS IDLE
MRP0 WAIT_FOR_LOG
操作说明:
FRS进程: 用于备库接收从主库LNS进程或ARCH进程投递过来的归档日志。
MRP0: 用于应用归档日志。
1.2.8、备库上查看DG环境的状态信息
操作命令:
SQL> col message for a100
SQL> select message_num,message from v$dataguard_status;
3、DG环境的主备切换-SWITCHOVER
3.1、SWITCHOVER切换的特点
一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏,原来DATA GUARD环境中的所有物理和逻辑STANDBY都可以继续工作。
3.2、SWITCHOVER切换的注意事项
1)确认主库和从库间网络连接通畅;
2)确认没有活动的会话连接在数据库中;
3)PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;
4)确保STANDBY数据库处于ARCHIVELOG模式;
5)如果设置了REDO应用的延迟,那么将这个设置去掉;
6)确保配置了主库和从库的初始化参数,使得切换完成后,DATA GUARD机制可以顺利的运行。
3.3、SWITCHOVER的切换操作流程
3.3.1、主库与备库运行状态确认
在执行主备SWITCH OVER之前,需要首先确认主库与备库的实例以及数据库的启动状态,确保主库与备库满足下面的要求:
数据库 实例启动状态 数据库启动模式
主库-CS02 open read write
备库-CS01 mount/open mount with apply/read only with apply
可以通过如下命令进行查看:
SQL> select status from v$instance;
SQL> select open_mode from v$database;
3.3.2、查看switchover之前主库的角色和状态
SQL> select name,database_role,switchover_status from v$database;
操作结果:
NAME DATABASE_ROLE SWITCHOVER_STATUS
--------- ----------------------- --------------------------------
CS02 PRIMARY SESSIONS ACTIVE
操作说明:
1)如果是第一次做主备的SWITCH OVER操作,那么主库的SWITCHOVER_STATUS状态会是SESSIONS ACTIVE状 态。表示当前主库还有活动的会话连接,属于正常的主库准备切换之前的状态。
2)如果之前已经做过主备的SWITCH OVER操作,那么主库的SWITCHOVER_STATUS状态会是TO_STANDBY状态, 表明当前主库已经准备好随时切换成备库了。
3.3.3、查看switchover之前备库的角色和状态
操作命令:
SQL> select name,database_role,switchover_status from v$database;
NAME DATABASE_ROLE SWITCHOVER_STATUS
--------- ---------------------------- --------------------------------
CS02 PHYSICAL STANDBY TO PRIMARY
操作说明:
1)如果是第一次做主库的SWITCH OVER操作,那么备库的SWITCHOVER_STATUS状态会是TO_PRIMARY状态。 表明备库已经随时可以切换成主库了。
2)如果之前已经做过主备的SWITCH OVER操作,在主库没有发出要做主备切换的操作之前(即:执行主库切成备库的那条命令),备库的SWITCHOVER_STATUS状态会是NOT ALLOWED,属于正常状态。
3.3.4、将主库切换成备库
操作命令:
SQL> alter database commit to switchover to physical standby with session shutdown;
操作说明: 此时主库会被自动关闭掉。
3.3.5、将备库启动到mount状态
1)关闭备库的归档日志应用进程
SQL> alter database recover managed standby database cancel;
2)关闭备库并启动到mount状态
SQL> shutdown immediate;
SQL> startup mount;
3)查看备库的角色状态
SQL> select name,database_role,switchover_status from v$database;
备注:
如果之前查看备库的切换状态是NOT ALLOWED,那么由于现在在主库上已经做了切换到备库的操作,该操 作的信息已经发送到了备库上,所以备库此时的切换状态会变成TO PRIMARY。
3.3.6、主库启动到mount状态
1)主库启动到nomount状态
SQL> startup nomount;
2)主库以备库的身份启动到mount状态
SQL> alter database mount standby database;
3)主库以备库的身份开启归档日志应用进程
SQL> alter database recover managed standby database disconnect from session;
4)查看主库现在在DG环境中的角色
SQL> select name,database_role,switchover_status from v$database;
NAME DATABASE_ROLE SWITCHOVER_STATUS
------------------ -------------------------------- ---------------------------------------CS02 PHYSICAL STANDBY TO PRIMARY
至此,主库的切换相关操作已经完成,主库角色已经切换成了备库,切换状态变成了TO PRIMARY。
3.3.7、备库切换成主库
1)备库开启归档日志应用进程
SQL> alter database recover managed standby database disconnect from session;
2)查看备库当前在DG环境中的角色
SQL> select name,database_role,switchover_status from v$database;
NAME DATABASE_ROLE SWITCHOVER_STATUS
--------- --------------------------- --------------------------------
CS02 PHYSICAL STANDBY TO PRIMARY
备注:
在开启应用归档日志进程之前,备库的切换状是NOT ALLOWED。在开启了归档日志应用进程之后,发现现在备库的角色状态变成了TO PRIMARY
3)备库切换成主库
SQL> alter database commit to switchover to primary;
4)切换后重新查看备库在DG环境中的角色和状态
SQL> select name,database_role,switchover_status from v$database;
NAME DATABASE_ROLE SWITCHOVER_STATUS
------------ ------------------------- -------------------------------
CS02 PRIMARY NOT ALLOWED
4)关闭备库
SQL> shutdown immediate;
5)启动备库
SQL> startup;
备注: 查看当前备库的SWITCH OVER状态,这个时候可能会出现RESOLVABLE GAP的状态
6)切换备库的redo log
SQL> alter system switch logfile;
备注: 查看当前备库的SWITCH OVER状态,这个时候可能会出现RESOLVABLE GAP的状态,再等一会就好了。
7)查看备库当前的切换状态
SQL> select name,database_role,switchover_status from v$database;
NAME DATABASE_ROLE SWITCHOVER_STATUS
--------- ------------------------ --------------------------------
CS02 PRIMARY SESSIONS ACTIVE
发现备库已经成功切换成主库了,并且数据库中存在活动的会话...
3.3.8、检查切换后主库与备库的日志编号
操作位置:主库&备库
操作命令:
SQL> archive log list;
如果确认切换之后主库与备库的当前日志编号一致,则说明主备切换完成。可以在主库上做切换日志操作,做进一步的验证。
操作命令:
SQL> alter system switch logfile;
如果切换日志之后主备两端的日志编号依旧一致则说明本次主备的SWITCH OVER顺利完成。
至此,我们的主备SWITCH OVER操作就算是顺利的完成了...