一、介绍
DataGuard是Oracle的一种高可用性数据库方案,主要用于数据容灾和读写分离。

二、环境
主要针Oracle Dataguard的操作文档
- 主库:172.16.*.*
- 备库:172.16.*.*
三、操作步骤
维护流程如下:

以下操作步骤适用Linux上Oracle 11G。
1. 检查备库DataGuard同步状态
登录备库。
# Linux从root账户切换至oracle账户 su - oracle # Linux登录sqlplus工具 sqlplus / as sysdba
分别检查传输进程和日志应用状态
# 检查传输状态,是否有MRP0进程,及block#是否在变化
SQL> SELECT PROCESS,STATUS,THREAD#,SEQUENCE#,BLOCK#,BLOCKS,DELAY_MINS FROM V$MANAGED_STANDBY;
PROCESS STATUS THREAD# SEQUENCE# BLOCK# BLOCKS DELAY_MINS
--------- -------------------- ------- --------- ---------- ---------- ----------
ARCH CLOSING 1 18618 737280 277 0
ARCH CLOSING 1 18617 737280 577 0
ARCH CONNECTED 0 0 0 0 0
ARCH CLOSING 1 18616 768000 1402 0
RFS IDLE 0 0 0 0 0
RFS IDLE 1 18619 25608 2 0
RFS IDLE 0 0 0 0 0
MRP0 APPLYING_LOG 1 18619 25609 1048576 0
# 检查日志应用状态,检查APPLIED是否有未应用
SQL> SELECT SEQUENCE#,to_char(FIRST_TIME,'yyyy-mm-dd hh24:mi:ss') FIRST_TIME,to_char(NEXT_TIME,'yyyy-mm-dd hh24:mi:ss') NEXT_TIME,DELETED,APPLIED from v$archived_log where DELETED='NO' and APPLIED='YES' order by 1;
SEQUENCE# FIRST_TIME NEXT_TIME DEL APPLIED
--------- ------------------- ------------------- --- ----------
18615 2022-04-14 10:02:32 2022-04-14 11:09:39 NO YES
18615 2022-04-14 10:02:32 2022-04-14 11:09:39 NO YES
18616 2022-04-14 11:09:39 2022-04-14 11:33:00 NO YES
18616 2022-04-14 11:09:39 2022-04-14 11:33:00 NO YES
18617 2022-04-14 11:33:00 2022-04-14 12:26:04 NO YES
18617 2022-04-14 11:33:00 2022-04-14 12:26:04 NO YES2. 停止备库日志同步并关闭数据库实例
登录备库节点,通过sqlplus工具维护
# 取消日志应用 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; # 关闭数据库实例 SQL> shutdown immediate
3. 关闭备库监听器
关闭监听器,并检查oracle账户下是否还有未释放进程。
# Linux里关闭监听器 lsnrctl stop # Linux里检查oracle进程 ps -fu oracle
4. 对数据库备库进行主机层面维护
进行备库主机其他维护,比如重启、扩容磁盘、参数调整等操作。
5. 然后对数据库主库进行维护
# Linux里关闭监听器,关闭之前建议关闭访问数据库的相关应用和接口程序等 lsnrctl stop # Linux登录sqlplus工具,然后关闭数据库主库实例 sqlplus / as sysdba SQL> shutdown immediate # Linux检查数据库进程 ps -fu oracle # 然后进行主机其他维护,比如重启、扩容磁盘、参数调整等操作。 # 维护完成后在Linux上启动监听器 lsnrctl start # 通过sqlplus工具启动数据库至Open状态 sqlplus / as sysdba SQL> startup
6. 备库启动监听器
启动监听器。
# Linux里启动Oracle监听器进程 lsnrctl start
7. 启动数据库备库
通过sqlplus登录数据库后,启动数据库至mount状态
# linux里登录sqlplus sqlplus / as sysdba # 执行Oracle启动实例命令至mount状态 SQL> startup mount
8. 开启备库日志同步
开启日志实时同步,,通过sqlplus工具维护
# 开启实时应用命令 SQL> alter database recover managed standby database using current logfile disconnect from session; # 切换数据库为只读打开状态 SQL> alter database open;
9. 检查数据库同步进程及同步状态
# Linux层面检查mrp0进程 ps -ef | grep mrp0 # 通过sqlplus工具检查传输状态,是否有MRP0进程,及block#是否在变化 SQL> SELECT PROCESS,STATUS,THREAD#,SEQUENCE#,BLOCK#,BLOCKS,DELAY_MINS FROM V$MANAGED_STANDBY; # 检查日志应用状态,检查APPLIED是否有未应用 SQL> SELECT SEQUENCE#,to_char(FIRST_TIME,'yyyy-mm-dd hh24:mi:ss') FIRST_TIME,to_char(NEXT_TIME,'yyyy-mm-dd hh24:mi:ss') NEXT_TIME,DELETED,APPLIED from v$archived_log where DELETED='NO' and APPLIED='YES' order by 1;
10. 参考文档
官方文档:https://docs.oracle.com/cd/E11882_01/server.112/e41134/concepts.htm#SBYDB4708
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




