【ORACLE_环境】ORACLE的DATA GUARD手工搭建(含图解)

ORACLE Data Guard搭建

 

交流群:263992520   入群密码:csdn

初学者集中营:http://www.chuxuezhe.net

 

1、简介:

介绍如何进行DGdata guard)搭建,我们可以使用手工创建和EMGC图形界面进行GC环境的搭建。本总结也非权威版,属于参考版物。如果有问题可以通过讨论解决:

个人邮箱:zyjj_530@163.com

QQ86141725  (加好友时,请标注“环境问题”)

 

2、准备

熟悉ORACLE联机帮助,了解ORACLE基本架构。熟悉LINUX基本命令操作。

 

3、环境准备

1.   手工建立一个数据库作为PRIMARY DATABASEPROD

2.   然后根据PROD创建备库STANDBY DATABASESTANDBY

3.   先建立的备库类型是物理类型,然后在物理类型之上,创建逻辑类型的备库。

4、概念梳理

4.1、介绍

     在DG环境中,至少有两个数据库,一个数据库处于Open状态,对外提供服务,该数据库就为Primary Database。另一个数据库处于恢复状态,该数据库为Standby Database

     Data Guard通过日志同步机制保证冗余数据和主数据之间的同步,这种同步可以实时、延时,同步、异步多种方式。

 

4.2、架构

按照功能分成3个部分:

a.日志发送(Redo Send

b.日志接收(Redo Receive

c.日志应用(Redo Apply

注:Oracle官方文档中,将日志发送和日志接收合为Redo Transport Service。

 

4.3、日志发送

DG中,Primary Database运行过程中,会源源不断的产生redo日志,这些日志会发送到Standby Database对应的目录下,进行存放。

那么Primary Database可以根据发送方式的不同,通过LGWRARCH进程完成日志的传输。

 

下面我们来介绍一下,几种日志发送的方式:

Ø  使用LGWR进程的SYNC(同步)方式

1.      Primary Database产生的redo日志需要同时写入本地,并且还要通过本地的LNSn进程(Network Server Process),再由LNSn进程将日志通过网络发送给远端目的地(log_archive_dest_2中配置的service地址)。

2.      Standby DatabaseRFS进程(Remote File Server)把接收到的日志写入到Standby redo logfile日志中。

3.       当Primary Database发生日志切换时,会出发Standby Database上的日志切换,即Primary Dtabase发生归档时,此时Standby DatabaseStandby redo logfile进行归档,然后出发MRP进程(Managed Recovery Process)或LSP进程(Logical Standby Process)恢复归档。

4.      对于LGWR的同步日志传送模式,LGWR必须等待写入本地日志文件操作和通过LNSn进程的网络传送都成功,Primary Database上的事务才能够提交。

5.       因为Primary Databaseredo日志是实时传送的,于是Standby Database可以使用两种恢复方式:实时恢复(图4.1操作,即Real-Time Apply),只要RFS把日志写入到Standby Redo Logfile中就会立即恢复;归档时恢复(图4.2操作),在完成对Standby Redo Logfile进程归档才出发恢复。

  

 Ø  使用LGWR进程的ASYNC(异步)方式

1.      Primary Database产生Redo日志后,LGWR把日志写入到本地文件中,此时事务就会被提交,无需等待LNSn进程传输成功后,再提交,所以称为异步

2.      LNSn进程会异步的将日志内容发送到Standby Database

3.       当Primary Databaseredo日志写满后,发生日志切换,触发归档模式,也触发Standby Database侧对Standby Redo logfile的归档,然后出发MRPLSP进程进行恢复归档日志。

 

Ø  使用ARCH进程

1.      Primary Databse产生redo日志,LGWR进程写入到联机日志中,当一组redo日志写满时,发生日志切换,并触发本地归档,图中ARC0完成本地归档操作,本地归档的位置由Primary Database的参数:LOG_ARCHIVE_DEST_1=’location=/path’进行定义。

2.       完成本地归档后,redo日志可以继续进行重用。

3.      ARC1进程通过NetPrimary Database的归档日志发送到Standby DatabaseRFS进程。

4.      Standby DatabaseRFS进程将接受到的日志写入到归档日志中,位置由Standby Database的参数:LOG_ARCHIVE_DEST_1=’location=/path’进行定义。

5.      Standby DatabaseMRP进程或LSP进程在Standby Database侧应用这些日志,进行同步数据。

注:由于ARCH进程传递,只有在Primary Database的归档时,才会发送日志到Standby Database。如果Primary异常宕机,那么redo日志就有可能丢失,导致数据丢失的问题。

 

4.4、日志接收

对于Standby Database日志接收的地址,也就是归档日志存放的位置,算法如下:

1.       如果配置了STANDBY_ARCHIVE_DEST参数,则使用该参数指定的目录。

2.       如果某个LOG_ARCHIVE_DEST_n参数定义了VALID_FOR=(STANDBY_LOGFILES,*),则使用这个参数指定目录。

3.       如果数据库的COMPATIBLE参数大于等于10.0,则任意选取一个LOG_ARCHIVE_DEST_n的值。

4.       如果STANDBY_ARCHIVE_DESTLOG_ARCHIVE_DEST_n参数均未设置,则使用缺省的STANDBY_ARCHIVE_DEST参数,缺省值为$ORACLE_HOME/dbs/arch

 

4.5、日志应用

1.        Standby Database分为逻辑Standby Database和物理Standby Database

Ø  物理Standby Database:使用Media Recovery技术,在数据块级别进行恢复,块与块之间的恢复。这种方式没有数据类型的限制,可以保证两个数据库完全一致。物理Standby Database数据库只能在mount状态下进行恢复,也可以打开,但是只能以只读方式打开,并且打开时不能执行恢复操作。

Ø  逻辑Standby Database:使用Logminer技术,通过把日志内容还原成SQL语句,然后SQL引擎执行这些语句,逻辑Standby Database不支持的数据类型,我们可以通过视图dba_logstdby_unsupported中查看不支持的数据类型。逻辑Standby Database不能保证数据的一致性。

 

如果是物理Standby Database,使用下面命令启动Real-Time

 

如果是逻辑Standby Database,使用下面命令启动Real-Time

 

查看是否使用Real-Time Apply

 

5、DATA GUARD环境(物理备库)

5.1、手工创建数据库PROD

5.1.1、创建相关文件目录

 

这里我将PRODSTANDBY库,即PRIMARY DATABASESTANDBY DATABASE的文件日志创建成功。我建立的目录位置,都是ORACLE默认存放一些文件的默认路径,如果大家使用RAW或磁盘组进行管理的话,那么需要在初始化参数文件中进行指定。

5.1.2、生成密码文件

使用orapwd file=orapwPROD password=oracle entries=5命令进行创建

注:建议这步前面就创建,否则在创建数据库的时候,会提示错误,也会强行断开数据库连接。

 

5.1.3、生成spfile,编辑spfile参数信息

Ø  直接使用vi initPROD.ora,进行编辑,内容如下:

只需要设置这两个参数,其他参数等我们到nomount状态下,使用spfile文件进行设置即可。

 

Ø  登陆sqlplus,生成spfile,将数据库启动到nomount状态:

 

Ø  修改SPFILE参数:

修改完成后,重启数据库,然后将数据库启动到nomount状态:

 

 Ø  创建数据库

Create DataBase例句,可以在ORACLE官方手册中找到:直接查询关键字:creating an oracle database,该文档下的Step7Issue the CREATE DATABASE Statement,就能找到例句了:

CREATE DATABASEPROD                                                                                      

USER SYS IDENTIFIED BY oracle

USER SYSTEM IDENTIFIED BY manager

LOGFILE GROUP 1 ('/u01/app/oracle/oradata/PROD/redo01.log') SIZE 100M,

GROUP 2 ('/u01/app/oracle/oradata/PROD/redo02.log') SIZE 100M,

GROUP 3 ('/u01/app/oracle/oradata/PROD/redo03.log') SIZE 100M

MAXLOGFILES 5

MAXLOGMEMBERS 5

MAXLOGHISTORY 1

MAXDATAFILES 100

MAXINSTANCES 1

DATAFILE '/u01/app/oracle/oradata/PROD/system01.dbf' SIZE 325M REUSE

EXTENT MANAGEMENT LOCAL

SYSAUX DATAFILE '/u01/app/oracle/oradata/PROD/sysaux01.dbf' SIZE 325M REUSE

DEFAULT TEMPORARY TABLESPACE tempts1

TEMPFILE '/u01/app/oracle/oradata/PROD/temp01.dbf' SIZE 20M REUSE

UNDO TABLESPACE undotbs

---该值一定要和init<SID>.ora里面定义的undo_tablespace名称一样,否则创建数据库时会提示错误,大小写也有关系

DATAFILE '/u01/app/oracle/oradata/PROD/undotbs01.dbf'

SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

 

注:上述目录一定要事先存在,如果不存在在建库的时候,就会报错,提示无法找到相应的目录文件。

 

创建过程如下:创建过程中,需要等待一段时间,创建成功后如下图:

创建完数据库后,ORACLE会自动打开该数据库,即OPEN状态。

 

5.1.4、执行catalog.sqlcatproc.sql文件

1.         执行catalog.sql创建数据库所需要使用的数据字典和相关存储过程:

提示以下,表示创建成功:

 

2.         执行catproc.sql创建各种PL/SQL块的声明,包括过程、函数、数据类型、常量定义、并不是实际的代码:

提示以下,表示创建成功:

需要等待一段时间,创建过程有点长。

做到这里,手工创建数据库就基本OK了,下面就是在该数据库上进行相关操作。

  

5.2、PRIMARY库参数信息

5.2.1、将PROD置为归档模式,开启force logging模式

Force logging模式,要求oracle无论做什么操作,都记录redolog,这样在DG中会减少数据的丢失。

 

5.2.2、设置standby_file_management参数

Standb_file_management=auto:该参数表示主库上表空间、数据文件的增加或者删除可以在从库上自动同步。一般建议设置为auto,如果是manual的话,如果主库上的数据文件发生变化,需要手动去在备库上进行对相应数据文件的操作。

 

5.2.3、设置log_archive_config参数

Log_archive_config:该参数用来控制从远端数据库接收或发送redo数据,通过dg_config属性罗列同一个DATA GUARD中所有DB_UNIQUE_NAME(含PRIMARY数据库和STANDBY数据库),SEND/NOSEND控制是否可以发送,RECEIVE/NORECEIVE属性控制是否能够接收。

 

5.2.4、设置db_file_name_convert / log_file_name_convert参数

Db_file_name_convertStandby数据库的数据文件路径与Primary数据库数据文件路径不一致时,可以通过设置该参数的方式,让其自动转换。该参数值是成对出现的,前面是转换前的形式,后面是转换后的形式。

Log_file_name_convert与上面参数一样使用,只不过这个参数是控制日志文件的。

 

注:因为这里设置的是PRIMARY数据库的参数,如果是STANDBY数据库,那么这两个参数的值应该是对调的,在后面会列出。

5.2.5、设置fal_server / fal_client参数

Fal_server指定一个Net服务名,该参数值对应的数据库应为PRIMARY角色,当本地数据库为STANDBY角色时,如果发现存在归档中断的情况,该参数用来指定获取中断的归档文件的服务器。

Fal_client指定一个Net服务名,该参数值对应的数据库应为STANDBY角色,当本地数据库为PRIMARY角色时,如果发现存在归档中断的情况,该参数用来指定获取中断的归档文件的服务器。

注:PRIMARY数据库的参数,如果是STANDBY数据库,那么这两个参数的值应该是对调的,在后面会列出。

 

5.2.6、设置log_archive_dest_n参数

Log_archive_dest_n:归档文件的生成路径。Location属性指定的是本地保存归档日志的路径,service属性指定主库中归档日志传送到备库的相应位置。

Valid_for子属性参数:用来指定传输的内容,即发送指定角色生成的指定类型的日志文件,该参数为了确保,一旦发生角色切换操作后,数据库的正常运转。参数两个选项如下:

Rede_log_typeonline_logfilesstandby_logfilesall_logfiles

Database_roleprimary_rolestandby_roleall_roles

注:因为这里设置的是PRIMARY数据库的参数,如果是STANDBY数据库,那么这两个参数会有一定区别,在后面会列出。

修改以上参数以后,将PROD数据库进行重启,将参数信息写入到spfile,然后生成initPROD.ora文件:

 

5.2.7、创建备库的controlfile文件

我们可以通过跟踪主库和备库的control信息,来比较主库的control和standby control的区别:

 

主库控制文件:

<       Control Seq=132=0x84, File size=416=0x1a0

<       File Number=0, Blksiz=16384, File Type=1CONTROL

---

备库控制文件:

>       Control Seq=151=0x97, File size=416=0x1a0

>       File Number=0, Blksiz=16384, File Type=4BACKUP CONTROL

 

这里最大的区别是File Type的不同。

所以备库是物理库,打开的时候数据库是只读状态:

当在主库下创建备库的控制文件后,我们要将备库的控制文件先重新命名,因为我们要用冷备的方式创建备库,具体操作如下:

 

5.2.8、根据主库SPFILE,创建备库的initSTANDBY.ora

使用PRIMARY的初始化参数文件,创建STANDBY的初始化参数问题

 

设置STANDBY初始化参数文件,文件最好信息如下:

上面是STANDBY最终的初始化参数问题,红框的和原来PRIMARY的不一样,需要注意。

5.2.9、根据主库密码文件,创建备库的密码文件

这里我们只需要将主库的密码文件进行复制就行,如果主库和备库的密码文件不一致,可能会造成日志传输过程中,被禁止。

 

5.2.10、将主库数据文件拷贝到备库下,并替换控制文件

首先将主库关闭,然后拷贝数据文件到备库下:

 

将刚才创建的standby controlfile进行重命名:先要删除原先从主库COPY过来的控制文件

 

5.2.11、配置TNSNAMES.ORA文件

由于我们是在一台机器上配置DG,为了主备数据库能够正常通信,所以需要在tnsnames.ora中增加上述。然后使用lsnrctl start启动监听。 

 

5.2.12、启动备库,将备库置为恢复模式

备库启动成功。

 

将备库设置为恢复模式:

 

/u01/app/oracle/admin/STANDBY/bdump,使用tail –f alert_STANDBY.log查看告警日志信息:

此时备库已经变为只读模式了。下面我们只要将主库启动,然后进行日志切换,跟踪两边的告警日志,我们就可以知道日志传输是否成功。

 

 

5.2.13、启动主库,进行日志切换,跟踪告警日志

主库信息如下:

主库告警日志:

 

备库信息:

 

备库告警日志:

红色部分是,当主库进行日志切换时,备库告警日志中,会记录相应信息。

 

 

这样手工配置DG就基本结束了!

只要主库不断的切换日志,备库就会根据归档信息,进行数据同步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值