Oracle Data Guard 的配置在网上有很多资料,但是没有一个完整的,配置下来多少有些问题。在踩了各种坑之后,自己终于配置成功,就想把这过程记录下来。

1   测试环境

主数据库:windows7;版本Oracle11g(11.2.0);IP地址10.0.1.165;实例SID:PRIMARY

备用数据库:windows7;版本Oracle11g(11.2.0);IP地址10.0.2.116;实例SID:STANDBY

2   运行Data Guard的条件

1、在主数据库和备用数据库的所有机器上必须安装同一个版本的Oracle企业版。:SELECT * FROM V$VERSION;

2、主数据库必须运行在归档模式下,推荐主和备用数据库都是force Logging模式,这样方便双向自由切换:ALTER DATABASE FORCE LOGGING;

3、主数据库和备用数据库的操作系统必须一样(允许版本不同),备用数据库可以使用与主数据库不同的目录结构,ORACLE推荐使用相同的目录结构。

4、主备用数据库硬件系统的体系结构必须相同,但允许主备数据库硬件的配置可以不同如:CPU数量、内存大小、存储配置等。

5、主备数据库可以是单实例的数据库,也可以是多实例的RAC数据库。

6、每个主备数据库必须有它自己的控制文件,ORACLE NET不同,必须分别修改。

3   Data Guard配置步骤

1、  本例中主数据库Oracle安装在: E:\app\Administrator,备用安装在:E:\app\Administrator,建议使用相同的安装路径。安装时先不要安装数据库,即在安装过程中“数据库配置”一项下面选择“只安装软件”;

2、  在主数据库上使用DBCA(Database Configuration Assistant)命令建一个数据库,SID设为PRIMARY;

3、  用Oracle Net Configuration Assistang配置监听程序

配置完成后在windows服务中,可以看到监听服务

4、  打开cmd,输入sqlplus "/as sysdba" ,连接到Oracle.

5、  设置主数据库的归档路径为:

E:\app\Administrator\database\Archive

SQL>alter system set log_archive_dest_1

='LOCATION=D:\app\Administrator\database\Archive MANDATORY' scope=both;

6、  将主数据库实例、数据库关闭,然后启动实例,但不打开数据库,只启动到数据库挂载模式:

SQL>shutdown immediate;

SQL>startup mount;

7、  将主数据库设置成归档状态和自动归档模式:

SQL>alter database archivelog;

SQL>alter system set log_archive_start=true scope=spfile;

8、  在主数据库上面创建备用数据库的控制文件standby.ctl:

SQL>alter database create standby controlfile as 'E:\app\zengjiyang\oradata\standby.ctl';

9、  在主数据库上面创建备用数据库的初始化参数文件standby.ora(将其拷贝回备用数据库后转换成备用数据库的spfile)

SQL>create pfile='E:\app\zengjiyang\oradata\standby.ora' from spfile;

10、查看主数据库的数据文件及其的位置:SQL>select name from v$datafile;记下查询结果中的数据文件的位置。

11、关闭实例:SQL>shutdown immediate;

12、将第8步中的standby.ctl、第9步中的standby.ora和第10步骤中的数据文件、还有E:\app\Administrator\oradata\PRIMARY路径下面的联机日志文件(REDO.LOG)、E:\app\Administrator\product\11.2.0\dbhome_1\database里面的口令文件PWDPRIMARY.ora备份出来,拷贝到备用数据库中;在备用数据库中创建路径E:\app\Administrator\oradata\PRIMARY,存放standby.ctl、数据文件、联机日志文件;

创建路径E:\app\Administrator\admin\PRIMARY,在里面创建空文件夹bdump、cdump、udump、create、pfile;

将standby.ora放到E盘根目录下面;

将口令文件PWDPRIMARY.ora更名为PWDSTANDBY.ora,放到备用数据库的E:\app\Administrator\product\11.2.0\dbhome_1\database下面。

13、回到主数据库,启动主数据库实例和数据库:SQL>startup

14、转回到备用数据库,手动创建服务OracleServiceSTANDBY:oradim -new -sid STANDBY -startmode manual,

设置环境变量:在环境变量的“Administrator的用户变量”一栏里面新建一个值,变量名为ORACLE_SID,变量值为STANDBY(服务名)。

15、创建备用数据库监听器OracleOraHome92TNSListener:进入Net Configuration Assistant,使用“监听程序配置”来创建备用数据库的监听器,同时会在E:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN下面生成listener.ora文件,并修改如下:

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = e:\app\Administrator\product\11.2.0\dbhome_1)

(PROGRAM = extproc)

(ENVS = "EXTPROC_DLLS=ONLY:e:\app\Administrator\product\11.2.0\dbhome_1\bin\orapls11.dll")

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.2.116)(PORT = 1521))

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

)

主数据库listener.ora修改如下:

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = E:\app\zengjiyang\product\11.2.0\dbhome_1)

(PROGRAM = extproc)

(ENVS = "EXTPROC_DLLS=ONLY:E:\app\zengjiyang\product\11.2.0\dbhome_1\bin\orapls11.dll")

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.165)(PORT = 1521))

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

)

)

16、配置本地NET服务名:进入Net Configuration Assistant,使用“本地NET服务名配置”来配置,同时会在E:\app\Administrator\product\11.2.0\dbhome_1

\NETWORK\ADMIN下面生成tnsnames.ora文件。(同第3步,这步如果已经生成了tnsnames.ora文件就可以不用了)

17、配置主和备用数据库的tnsnames.ora,都将里面的内容设置成如下内容:

主数据库tnsnames.ora

STANDBY =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.2.116)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = PRIMARY)

)

)

PRIMARY =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.165)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = PRIMARY)

)

)

备用数据库:

STANDBY =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.2.116)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = PRIMARY)

)

)

PRIMARY =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.165)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = PRIMARY)

)

)

18、修改E根目录下面的初始化参数文件standby.ora,里面的全部内容如下(删除了原来的control_files参数,将instance_name改成了STANDBY,添加的内容):

*.aq_tm_processes=1

*.background_dump_dest='E:\app\Administrator\admin\PRIMARY\bdump'

*.compatible='11.2.0.0.0'

*.core_dump_dest='E:\app\Administrator\admin\PRIMARY\cdump'

*.db_block_size=8192

*.db_cache_size=728760320

*.db_domain=''

*.db_file_multiblock_read_count=16

*.db_name='PRIMARY'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=PRIMARYXDB)','(PROTOCOL=TCP)'

*.fast_start_mttr_target=300

*.instance_name='STANDBY'

*.java_pool_size=20971520

*.job_queue_processes=10

*.large_pool_size=143654912

*.log_archive_dest_1='LOCATION=E:\app\Administrator\database\Archive'

*.log_archive_start=TRUE

*.open_cursors=300

*.pga_aggregate_target=324009984

*.processes=150

*.query_rewrite_enabled='FALSE'

*.remote_login_passwordfile='EXCLUSIVE'

*.shared_pool_size=242221056

*.sort_area_size=52428800

*.star_transformation_enabled='FALSE'

*.timed_statistics=TRUE

*.undo_management='AUTO'

*.undo_retention=10800

*.undo_tablespace='UNDOTBS1'

*.user_dump_dest='E:\app\Administrator\admin\PRIMARY\udump'

*.standby_file_management=AUTO

*.lock_name_space='standby'

*.fal_server='primary'

*.fal_client='standby'

*.standby_archive_dest='E:\app\Administrator\database\Archive'

*.control_files='E:\app\Administrator\oradata\STANDBY.CTL'

19、进入SQLplus将standby.ora创建成备用数据库的spfile:

SQL>create spfile from pfile='e:\standby.ora';

20、启动备用数据库的实例,并且将备用数据库设置成standby模式:

SQL>startup nomount;

SQL>alter database mount standby database;

21、在备用数据库启动日志应用服务:SQL>alter database recover managed standby database disconnect from session;

22、转到主数据库,启动到物理备用数据库的归档:

SQL: alter system set log_archive_dest_2='service=standby mandatory reopen=60'

4   Data Guard检验

主库,归档当前日志: SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

从库,校验归档日志是否正常接收: SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

从库,查看新的归档日志是否正常用于恢复:

SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

如果都是YES的话就表示成功了。

5   备用库数据恢复

前面的运作从库只是将日志文件拿过来存放起来,但并没有执行日志文件,所以在主库上所做的操作无法在从库上得到结果,即无法在从库上查询数据。要在从库上查询数据,要执行以下语句:在从库上用sysdba 用户连接

Sql>alter database recover managed standby database disconnect from session ;

Sql>alter database recover managed standby database cancel ;

Sql>alter database open read only ;

查询数据即可。查询完成以后,需要恢复从库为恢复模式  

Sql>alter database recover managed standby database disconnect from session ; 这个功能的可以用来查询前一天(或者前若干时间)以前的数据,比如报表之类的,因为今天只能查询昨天以前的报表,对数据的同步性的要求不是那么严格。查询完后一定要将从库设回恢复模式。

6   Data Guard与OGG的对比

 

Oracle DataGuard

Oracle GoldenGate

原理

复制归档日志或在线日志

抽取在线日志中的数据变化,转换为GGS自定义的数据格式存放在本地队列或远端队列中

稳定性

作为灾备的稳定性极高

稳定性不如DataGuard

维护

维护简单,极少出现问题

命令行方式,维护较复杂

对象支持

完全支持

部分对象需手工创建于维护

备份端可用性

备份端处于恢复或只读状态,在只读状态下不能同时进行恢复。

两端数据库是活动的,备份端可以提供实时的数据查询及报表业务等,从而提高系统整体的业务处理能力,充分利用备份端的计算能力,提升系统整体业务处理性能。可以实现两端数据的同时写入

接管时间

数据库工作在mount状态下,接管业务时,数据库要open

可实现立即接管

复制方式

通过恢复机制实现的,无法实现同步复制

GoldenGate可以提供秒一级的大量数据实时捕捉和投递,异步复制方式,无法实现同步复制

资源占用

复制通过数据库的LGWR进程或ARCN进程完成,占用数据库少量资源

业务高峰时在数据抽取转换时消耗系统资源较多,低峰时占用较小

异构数据库支持

单一数据库解决方案,仅运行在Oracle数据库上,源端和目标端操作系统必须相同,版本号可以不同

可以在不同类型和版本的数据库之间进行数据复制。如ORACLE,DB2,SYBASE,SQL SERVER,INFORMIX、Teradata等。
  适用于不同操作系统如windows、Linux、unix、aix等

带宽占用

使用Oracle Net传输日志,可通过高级压缩选项进行压缩,压缩比在2-3倍

利用TCP/IP传输数据变化,集成数据压缩,提供理论可达到9:1压缩比的数据压缩特性

拓扑结构

可以实现一对多模式

可以实现一对一、一对多、多对一、双向复制等多种拓扑结构

7  
总结

Data Guard的基本原理是将日志文件从原数据库传输到目标数据库,然后在目标数据库上应用这些日志文件,从而使目标数据库与源数据库保持同步,是一种数据库级别的高可用性方案。Data Guard不能同步特定的表空间或特定的表,它的作用更像是给主库建立一个备份库,如果主库挂了,可以实时的切换到备库。所以其意义更多的是数据同步而非数据采集。

Oracle Data Guard配置的更多相关文章

  1. (转)Oracle Data Guard配置

    data guard配置的条件1.在主库和从库的所有机器上必须安装同一个版本的Oracle企业版.2.主库必须运行在归档模式下.3.主库和从库的操作系统必须一样(允许版本不同),从库可以使用与主库不同 ...

  2. oracle data guard配置dg_broker

    https://community.oracle.com/docs/DOC-1007327 本文主要包括以下内容: 1.  配置dg broker,需要完成以下几个工作: 在主备库配置静态监听注册,注 ...

  3. Oracle Data Guard的配置

    概述 Oracle Data Guard 是针对企业数据库的最有效和最全面的数据可用性.数据保护和灾难恢复解决方案.它提供管理.监视和自动化软件基础架构来创建和维护一个或多个同步备用数据库,从而保护数 ...

  4. Oracle Data Guard 重要配置参数

    Oracle Data Guard主要是通过为生产数据库提供一个或多个备用数据库(是产生数据库的一个副本),以保证在主库不可用或异常时数据不丢失并通过备用数据库继续提供服务.对于Oracle DG的配 ...

  5. Oracle Data Guard

    DG 是 Oracle Data Guard 的简称.也就是Oracle11g的 数据卫士. 由于在工作中 Oracle和 SQL SERVER2008 同时都需要维护管理.给我的感觉这里的 DG 其 ...

  6. (转)Oracle Data Guard学习

    一.Data Guard提供如下三种数据保护模式: 1)最高保护模式(Maximum Protection) 这里的”最高保护“是指最大限度的保护数据不丢失,也就是至少有一个standby和prima ...

  7. Oracle data guard学习

    Oracle data guard学习:三思笔记 Data guard 1data guard结构: data guard是一个集合,由一个primary数据库(生产数据库)和一个或多个standby ...

  8. Oracle data guard 10g 搭建

    Oracle data guard 10g 搭建 1系统常规参数检查 硬盘 [root@localhost ~]# df -h 内核 [root@localhost ~]# uname -a [roo ...

  9. 一步一步搭建 Oracle Data Guard

    前言 为什么要写前言,因为我要吐槽一下.作为一个Java后端,搭建Oracle Data Guard真的是一件,嗯,既不专业也不擅长的事情,然而,为什么还是要我来弄? 因为DBA出差了,我们这边急着要 ...

随机推荐

  1. Python学习笔记1环境搭建

    1.在浏览器输入https://www.python.org/psf/,点击download下载python3.7.2(https://www.python.org/)   https://www.p ...

  2. 使用vue-cli@3启动elementui脚手架

    [vue3.x] 准备看elementui的源码,早上拉elementui提供的脚手架代码,于是下载了vue3.x(之前一直用2.x) 1.先把vue2.x卸载了 npm uninstall -g v ...

  3. Froms 认证 二级域名共享session登录凭证

    1. 需要共享的web.config 里需要加添 <authentication mode="Forms"> <forms name="/> &l ...

  4. 51单片机学习笔记(郭天祥版)(9)——IIC、EEPROM

    IIC是两根线,单总线,只有一根数据线,发送数据和读取收据都是一根线,像我们之前学的AD.DA都是许多线,许多线的话,这样做系统可以少浪费资源,少浪费控制IO口的资源,这种并行的处理速度快.所以线越多 ...

  5. .net framework , code first

    1. 创建一个控制台应用程序, 并添加引用 2 创建 一个类 public class New { [Key] public string NewId { get; set; } public str ...

  6. centos 添加右键在终端打开

    yum -y install nautilus-open-terminal

  7. [Git] 拉开发分支的代码报错

    Git拉开发分支的代码报错: fatal: The remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed ...

  8. 遍历ArcMap已加载数据的属性

    import arcpy f = open("D:\workspace\coords.txt","w") with arcpy.da.SearchCursor( ...

  9. graph_base_pic_segmentation里面的细节和代码

    https://github.com/zhangbo2008/graph_base_pic_segmentation_analyzing/blob/master/README.md

  10. Python二维数组,坑苦了

    myList = [[0] * 3] * 4 但是当操作myList[0][1] = 1时,发现整个第二列都被赋值,变成 [[0,1,0], [0,1,0], [0,1,0], [0,1,0]] my ...