DATA GUARD 简介(第一版)
ORACLE DataGuard 是一种数据库级别的HA方案,最主要功能是容灾、数据保护、故障恢复等
在生产数据库的 “事务一致性” 时,使用生产库的物理全备份(或物理COPY)创建备库,备库会通过生产库传输过来的归档日志(或重做条目)自动维护备用数据库。将重做数据应用到备库。本文介绍使用RMAN备份创建备库(dataguard)
Ø 配置前检查
Dataguard 设置为默认的 MAXIMIZE PERFORMANCE 模式
Ø 主节点必须运行在归档模式下:
以下命令检查数据库是否为归档日志(archive log)模式:
1 | SQL> archive log list |
Ø 主库必须为 force logging 模式
1 | Sql>alter database force logging |
Ø 主备库 SID 与 UNIQUE_NAME 配置
主库
SID orcl
UNIQUE_NAME primary
备库
SID orcl
UNIQUE_NAME standby01
Ø 主备库网络配置 注意这里需要配置静态监听,我这里配置了dns,也可以配置/etc/hosts文件
主库
1 | IP:192.168.20.11 primary.example.com |
监听 注意:我这里配置的实例名都是一样的,所以主库和备库的监听也是一样的

tnsname 配置 该配置也是主备都一样

备库
1 | IP:192.168.20.12 standby01.example.com |
监听
注意:我这里配置的实例名都是一样的,所以主库和备库的监听也是一样的

Ø 备库配置orawp 密码文件,注:这里的文件一定要与主库的密码一样
方法一、可以从主库的 $ORACLE_HOME/dbs/orapworcl 文件复制过来
方法二、 创建密码文件
1 | cd $ORACLE_HOME/dbs/ |
Ø 修改主库的pfile参数文件initorcl.ora
方法一、sqlplus 进入 修改文件参数并创建 pfile 文件
1 | alter system set db_unique_name='primary' scope=spfile; |
注意事项 1
1、这一步非常关键如果不配置主库传到备库的文件目录,rman传递过去会失败
2、就算文件主库和备库的文件路径名一样也要配置
1 | alter system set log_archive_dest_1='location=/u01/app/oracle/arch valid_for=(all_logfiles,all_roles) db_unique_name=primary' scope=spfile; |
注意事项 2
1、这一步:service=standby01 这里standby01为tnsname中配置的
1、如果不加入 lgwr async 不能使备库时时同步
1 | alter system set log_archive_dest_state_1=enable scope=spfile; |
注意事项 3
该参数为使上面的 archive 生效
1 | alter system set log_archive_format='%t_%s_%r.dbf' scope=spfile; |
配置完成重启主库、并创建参数文件
1 | shutdown immediate; |
并查看配置文件 pfile,在 $ORACLE_HOME/dbs 中
方法二、手动更改 pfile 文件然后重启数据库,以更改的 pfile 文件来重启
更改的参数为以上以 sqlplus 更改的
1 | startup nomount pfile=$ORACLE_HOME/dbs/initorcl.ora |
Ø 修改备库的 pfile 参数文件 initorcl.ora 改的并不多只需要把主库的某参数颠倒一下即可。
1、先把主库的 pfile 文件 copye 到备库中 $ORACLE_HOME/dbs/ 下
2、修改备库参数文件
1 | DB_UNIQUE_NMAE='standby01' |
3、创建相应的目录,只要 pfile 中写到的目录没有的都要创建,如果不创建 rman 传递过来会失败
4、启动到 nomount 状态创建 spfile 文件
1 | startup nomount pfile=$ORACLE_HOME/dbs/initorcl.ora |
Ø 主库创建 standby control 文件并传递给备库,使备库启动到 mount 状态
1、创建 standby control 并传递到备库
1 | SQL>alter database create standby controlfile as '/home/oracle/bak.ctl'; |
2、启动备库到 standby mount 状态
1 | alter database mount standby database; |
Ø 主库、备库创建 standby logfile 文件
注意事项
1、先要查看主库的 redolog 文件、需要了解其数量及大小
1 | select * from v$log; |
2、创建的 standby logfile 文件必须比 redo 文件多一组,并且每组的数量相同。
3、standby logfile 文件的大小要与 redo log 文件的大小一样
4、主库和备库创建standby logfile 的文件名最好一样
5、创建语句如下
1 | alter database add standby logfile group 6 '/u01/app/oracle/oradata/orcl/std_redo06.log' size 200m; |
6、删除语句如下
1 | alter database drop standby logfile group 6; |
Ø 复制主库至备库
注意事项
1、主库得启动到open或者mount
2、备库一定要启动到nomount状态下
3、静态监听与tnsname一定要配置好,能互相连接
主库上操作
1 | rman target sys/oracle auxiliary sys/oracle@standby01 |
备库上操作
1 | sql>shutdown immediate; |
Ø 主备切换
注:切换顺序不能颠倒,必须先把主库切换成备库,即同一时间不能有两个主库共存
2.1 主库切换成备库 切换库时最好切换下日志
Ø 查看主库可切换状态:
1 | sql>select switchover_status from v$database; |
Ø 主库切换
1 | sql>alter database commit to switchover to physical standby with session shutdown; |
2.2 备库切换为主库
Ø 查看备库可切换状态:
1 | sql>select switchover_status from v$database; |
Ø 备库切换
1 | sql>select switchover_status from v$database; |
2.3 主库不可用情况下的备库切换
1 | sql> recover managed standby database cancel; |