1. 目的
详细描述如何搭建单节点到单节点的Oracle Data Guard结构,下文简称为DG。
2.环境规划
环境规划,参考下面的表格。
| | 主库 | 备库 |
|---|
| 机器名 | dgdb1 | dgdb2 |
| IP地址 | 10.128.20.125 | 10.128.20.126 |
| 操作系统版本 | Oracle Linux 6.5 | Oracle Linux 6.5 |
| 数据库版本 | 11.2.0.4 | 11.2.0.4 |
| 数据库名 | dgdb | dgdb |
| 数据库实例名 | dgdb1 | dgdb2 |
3. 搭建环境
在服务器上安装操作系统。
根据环境规划设置服务器的主机名和IP地址。
在两台数据库服务器上面安装oracle软件,并在主机上创建数据库。
4. 搭建DG
4.1. 主库的配置
4.1.1. 启用Forced Logging
登录主库,执行下面的命令启用Forced Logging。
SQL> ALTER DATABASE FORCE LOGGING;数据库已更改。4.1.2. 创建standby日志组
查看现有的日志组
SQL> select GROUP#,MEMBER from v$logfile;GROUP# MEMBER------ -------------------------------------------------- 1 /u01/app/oracle/oradata/DGDB/redo01.log 2 /u01/app/oracle/oradata/DGDB/redo02.log 3 /u01/app/oracle/oradata/DGDB/redo03.log创建standby日志组要比联机日志组多一组。
SQL> alter database add standby logfilegroup 4 ("/u01/app/oracle/oradata/DGDB/std_redo04.log") size 50m,group 5 ("/u01/app/oracle/oradata/DGDB/std_redo05.log") size 50m,group 6 ("/u01/app/oracle/oradata/DGDB/std_redo06.log") size 50m,group 7 ("/u01/app/oracle/oradata/DGDB/std_redo07.log") size 50m; 数据库已更改。4.1.3. 启用归档模式
查看数据库是否为归档模式
SQL> archive log list数据库日志模式 非存档模式自动存档 禁用存档终点USE_DB_RECOVERY_FILE_DEST最早的联机日志序列 52当前日志序列 54现在数据库为非归档模式,需要将数据库更改为归档模式
关闭数据库
sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on 星期四 10月 9 06:33:01 2014Copyright (c) 1982, 2013, Oracle.All rights reserved.连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> shutdown immediate数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。将数据库启动到mount模式
SQL> startup mountORACLE 例程已经启动。Total System Global Area 1653518336 bytesFixed Size2253784 bytesVariable Size1375734824 bytesDatabase Buffers268435456 bytesRedo Buffers7094272 bytes数据库装载完毕。将数据库更改为归档模式
SQL> alter database archivelog;数据库已更改。SQL> archive log list数据库日志模式存档模式自动存档 启用存档终点USE_DB_RECOVERY_FILE_DEST最早的联机日志序列 51下一个存档日志序列 53当前日志序列 534.1.4. 配置oracle net
使用netca或netmgr创建listener.ora和tnsnames.ora.
修改listener.ora文件
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/listener.ora# Generated by Oracle configuration tools.SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = DGDB1)(ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/dbhome_1)(SID_NAME = DGDB)))LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = dgdb1.dhc.com)(PORT = 1521)))(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))))ADR_BASE_LISTENER = /u01/app/oracle修改tnsnames.ora
DGDB2 =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.128.20.126)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = DGDB2)))DGDB1 =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.128.20.125)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = DGDB1)))4.1.5. 配置参数文件。
创建pfile
SQL> create pfile from spfile;文件已创建。然后在$ORACLE_HOME/dbs目录中找到文件initDGDB.ora。
修改initDGDB.ora,加入或者修改以下内容。
DB_UNIQUE_NAME="DGDB1"LOG_ARCHIVE_CONFIG="DG_CONFIG=(DGDB1,DGDB2)"LOG_ARCHIVE_DEST_1= "LOCATION=/archVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DGDB1"LOG_ARCHIVE_DEST_2= "SERVICE=DGDB2 lgwr ASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DGDB2"log_archive_dest_state_1=enablelog_archive_dest_state_2=enablefal_server="DGDB2"fal_client="DGDB1"standby_file_management=auto修改参数文件之后,还要在两个机器上创建/arch目录来保存归档日志。
[root@dgdb1 ~]# mkdir /arch[root@dgdb1 ~]# chown oracle:oinstall /arch/[root@dgdb1 ~]# chmod 775 /arch/关闭数据库
[oracle@dgdb1 dbs]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on 星期四 10月 9 06:37:26 2014Copyright (c) 1982, 2013, Oracle.All rights reserved.连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> shutdown immediate数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。创建spfile
SQL> create spfile from pfile;文件已创建。启动数据库
SQL> startupORACLE 例程已经启动。Total System Global Area 1653518336 bytesFixed Size2253784 bytesVariable Size1375734824 bytesDatabase Buffers268435456 bytesRedo Buffers7094272 bytes数据库装载完毕。数据库已经打开。4.2. 备库的配置
4.2.1. 配置oracle net
在备库上用netca或者netmgr创建listener.ora和tnsnames.ora。
修改listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/listener.ora# Generated by Oracle configuration tools.SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = DGDB2)(ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/dbhome_1)(SID_NAME = DGDB)))LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = dgdb2.dhc.com)(PORT = 1521)))(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))))ADR_BASE_LISTENER = /u01/app/oracle修改tnsnames.ora
DGDB2 =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.128.20.126)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = DGDB2)))DGDB1 =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.128.20.125)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = DGDB1)))将主库/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs目录中的pfile和密码文件复制到备库上。
[oracle@dgdb1 dbs]$ scp initDGDB.ora orapwDGDB 10.128.20.126:/u01/app/oracle/product/11.2.0.4/dbhome_1/dbs/The authenticity of host "10.128.20.126 (10.128.20.126)" can"t be established.RSA key fingerprint is 0c:74:49:a9:2c:dd:ff:af:c9:1f:cb:6b:a6:44:4d:3b.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added "10.128.20.126" (RSA) to the list of known hosts.oracle@10.128.20.126"s password: initDGDB.ora 100% 1386 1.4KB/s 00:00orapwDGDB100% 1536 1.5KB/s 00:004.2.2. 配置参数文件
修改pfile
DB_UNIQUE_NAME="DGDB2"LOG_ARCHIVE_CONFIG="DG_CONFIG=(DGDB1,DGDB2)"LOG_ARCHIVE_DEST_1= "LOCATION=/archVALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DGDB2"LOG_ARCHIVE_DEST_2= "SERVICE=DGDB1 lgwr ASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DGDB1"log_archive_dest_state_1=enablelog_archive_dest_state_2=enablefal_server="DGDB1"fal_client="DGDB2"standby_file_management=auto在备库上创建spfile
[oracle@dgdb2 admin]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on 星期四 10月 9 06:56:55 2014Copyright (c) 1982, 2013, Oracle.All rights reserved.已连接到空闲例程。SQL> create spfile from pfile;文件已创建。在备库上创建必需的目录
mkdir /u01/app/oracle/fast_recovery_areamkdir -p /u01/app/oracle/admin/DGDB/adump启动备库到nomount
SQL> startup nomountORACLE 例程已经启动。Total System Global Area 1653518336 bytesFixed Size2253784 bytesVariable Size1375734824 bytesDatabase Buffers268435456 bytesRedo Buffers7094272 bytes4.3. 使用RMAN生成物理备库
使用下面的命令,登录rman
rman target sys/oracle@DGDB1 auxiliary sys/oracle@DGDB2 nocatalog恢复管理器: Release 11.2.0.4.0 - Production on 星期四 10月 9 07:44:07 2014Copyright (c) 1982, 2011, Oracle and/or its affiliates.All rights reserved.已连接到目标数据库: DGDB (DBID=2206457594)使用目标数据库控制文件替代恢复目录已连接到辅助数据库: DGDB (未装载)使用下面的命令,生成物理备库
RMAN> duplicate target database for standby nofilenamecheck from active database;生成的备库没有redo和standby日志文件,需要把主库的文件复制过去。
[oracle@dgdb1 DGDB]$ scp *.log 10.128.20.126:/u01/app/oracle/oradata/DGDB/oracle@10.128.20.126"s password: redo01.log 100% 50MB50.0MB/s 00:01redo02.log 100% 50MB25.0MB/s 00:02redo03.log 100% 50MB50.0MB/s 00:01std_redo04.log 100% 50MB50.0MB/s 00:01std_redo05.log 100% 50MB50.0MB/s 00:01std_redo06.log 100% 50MB50.0MB/s 00:01std_redo07.log 100% 50MB50.0MB/s 00:01重启一下备库
[oracle@dgdb2 DGDB]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on 星期四 10月 9 07:45:23 2014Copyright (c) 1982, 2013, Oracle.All rights reserved.连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> archive log list数据库日志模式存档模式自动存档 启用存档终点/arch最早的联机日志序列 0下一个存档日志序列 0当前日志序列 0SQL> shutdown immediateORA-01109: 数据库未打开已经卸载数据库。ORACLE 例程已经关闭。启动备库到mount
SQL> startup mountORACLE 例程已经启动。Total System Global Area 1653518336 bytesFixed Size2253784 bytesVariable Size1375734824 bytesDatabase Buffers268435456 bytesRedo Buffers7094272 bytes数据库装载完毕。将备库切换到standby
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;数据库已更改。4.4. 验证DG是否搭建成功
在备库上验证存在的归档日志。
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;SEQUENCE# FIRST_TIMENEXT_TIME---------- -------------- -------------- 101 12-10月-14 13-10月-14 102 13-10月-14 13-10月-14 103 13-10月-14 14-10月-14 104 14-10月-14 14-10月-14 105 14-10月-14 15-10月-14 106 15-10月-14 15-10月-14 107 15-10月-14 15-10月-14 108 15-10月-14 16-10月-14 109 16-10月-14 16-10月-14在主库切换下日志
SQL> alter system switch logfile;系统已更改。SQL> archive log list数据库日志模式存档模式自动存档 启用存档终点/arch最早的联机日志序列 109下一个存档日志序列 111当前日志序列 111在备库下看归档的状态
SQL> archive log list数据库日志模式存档模式自动存档 启用存档终点/arch最早的联机日志序列 109下一个存档日志序列 0当前日志序列 111查看主库传过来的归档是否被应用
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;SEQUENCE# APPLIED---------- --------- 101 YES 102 YES 103 YES 104 YES 105 YES 106 YES 107 YES 108 YES 109 YES 110 IN-MEMORY到此DG的搭建已经完成。Oracle 11gR2 在VMWare虚拟机中安装步骤 http://www.linuxidc.com/Linux/2013-09/89579p2.htmDebian 下 安装 Oracle 11g XE R2 http://www.linuxidc.com/Linux/2014-03/98881.htmOracle Data Guard 重要配置参数 http://www.linuxidc.com/Linux/2013-08/88784.htm基于同一主机配置 Oracle 11g Data Guard http://www.linuxidc.com/Linux/2013-08/88848.htm探索Oracle之11g DataGuard http://www.linuxidc.com/Linux/2013-08/88692.htm手把手教你搭建Oracle 11g DataGuard http://www.linuxidc.com/Linux/2016-06/132128.htmOracle Data Guard (RAC+DG) 归档删除策略及脚本 http://www.linuxidc.com/Linux/2013-07/87782.htmOracle Data Guard 的角色转换 http://www.linuxidc.com/Linux/2013-06/86190.htmOracle Data Guard的日志FAL gap问题 http://www.linuxidc.com/Linux/2013-04/82561.htmOracle 11g Data Guard Error 16143 Heartbeat failed to connect to standby 处理方法 http://www.linuxidc.com/Linux/2013-03/82009.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址