Welcome 微信登录

首页 / 数据库 / MySQL / Oracle Dataguard搭建-单机到单机

1. 目的

详细描述如何搭建单节点到单节点的Oracle Data Guard结构,下文简称为DG。

2.环境规划

环境规划,参考下面的表格。
 主库备库
机器名dgdb1dgdb2
IP地址10.128.20.12510.128.20.126
操作系统版本Oracle Linux 6.5Oracle Linux 6.5
数据库版本11.2.0.411.2.0.4
数据库名dgdbdgdb
数据库实例名dgdb1dgdb2

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当前日志序列 53

4.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.oraDGDB2 =(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. 配置参数文件。

创建pfileSQL> 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 例程已经关闭。创建spfileSQL> 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.oraDGDB2 =(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:00

4.2.2. 配置参数文件

修改pfileDB_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启动备库到nomountSQL> startup nomountORACLE 例程已经启动。Total System Global Area 1653518336 bytesFixed Size2253784 bytesVariable Size1375734824 bytesDatabase Buffers268435456 bytesRedo Buffers7094272 bytes

4.3. 使用RMAN生成物理备库

使用下面的命令,登录rmanrman 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 例程已经关闭。启动备库到mountSQL> startup mountORACLE 例程已经启动。Total System Global Area 1653518336 bytesFixed Size2253784 bytesVariable Size1375734824 bytesDatabase Buffers268435456 bytesRedo Buffers7094272 bytes数据库装载完毕。将备库切换到standbySQL> 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本文永久更新链接地址