分析Oracle中11g DataGuard

技术分析Oracle中11g DataGuard这篇文章主要讲解了“分析Oracle中11g DataGuard”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“分析Orac

本文主要讲解“在Oracle中分析11g DataGuard”,简单明了,易学易懂。请跟随边肖的思路,一起学习学习《解析甲骨文11g数据卫士》!

1.什么是数据卫士?

DataGuard是oracle专门针对Oracle数据库推出的一项高可用性技术。8i之前叫待机Dtabase,从9i正式改名为DataGuard。通常,主备关系中至少有两个数据镜像节点。通过重做日志的同步技术来保证数据的实时同步,可以实现数据库主备的快速切换,实现数据的容灾。

2.为什么要使用DataGuard?

DataGuard的中文名也叫数据卫士.顾名思义,它是ORACLE为确保数据安全而推出的一项技术。主要应用于一些高度重视数据安全的场合,比如银行、电信等行业,他们在这些行业应用了多套DataGuard数据卫士来保障数据安全。

当然,它也用于数据库的日常维护而不中断业务,比如日常停机、测试变更、升级维护等等。

3.数据卫士带来的价值

可以实现数据零丢失、维护零停机,保证业务持续在线运行,通过读写分离有效分担数据库压力,降低因各种原因停机的风险。

4.数据卫士的体系结构

分析Oracle中11g  DataGuard

分析Oracle中11g  DataGuard

分析Oracle中11g  DataGuard

5.DataGuard安全吗?

DataGuard的同步是通过重做传输和备用端的应用来实现数据同步,所以它的同步链路是基于Oracle Net的,数据传输是通过Oracle Net来研究的。它们之间采用SSL协议。SSL由RSA公钥密码和对称密钥加密,提供身份验证、加密和数据完整性。SSL自动用于两个Oracle数据库中的重做传输验证。如果不满足SSL身份验证要求,每个数据库都必须使用telnet密码文件。在数据保护配置中,所有物理和快照备用数据库都必须使用主数据库中密码文件的副本,并且在授予或撤销SYSOPER或SYSDBA权限时,必须更改副本的刷新。

当密码文件用于重做传输验证时,密码文件中的用户帐户用于重做传输数据库之间的比较,以启动重做传输会话和目标数据库。密码也必须在两个数据库中。默认情况下,在验证重做传输会话密码文件时使用系统用户的密码。

6.数据卫士的三种保护模式

最大保护模式:

1)该模式提供最高级别的数据保护;

2)在提交主库的事务之前,要求至少有一个物理备用库接收重做日志;

3)当主库找不到合适的备份库写入时,主库会自动关闭,防止无保护数据出现;

4)优点:这种模式可以保证备用数据库没有数据丢失;

5)缺点:主库自动关闭会影响主库的可用性,在恢复备用库后才会提交。对网络等客观条件要求很高,主库的性能会受到很大影响。

最大可用性模式:

1)该模式提供仅次于“最大保护模式”的数据保护能力;

2)在提交主库的事务之前,要求至少有一个物理备用库接收重做日志;

3)当主库找不到合适的备份库写入时,主库不会关闭,而是暂时降低到“最大性能模式”模式,直到问题解决;

4)优点:这种模式可以保证备用数据库没有数据丢失,没有任何问题,是一种折中的方法;

5)缺点:正常运行时,缺点是主库的性能受多种因素影响。

最大性能模式:

1)该模式为默认模式,可以保证主数据库的最高可用性;

2)保证主库的运行不受备用库的影响,主库事务正常提交,主库的运行不受备用库任何问题的影响;

4)优点:避免了备份对主数据库性能和可用性的影响;

5)缺点:如果主存储库提交的交易相关的恢复数据没有发送到备用存储库,这些交易数据会丢失,不能保证数据不会丢失;

简单来说,它由三部分组成:主库、备用库和中间层(各种服务日志和归档文件)。后面再说中间层。让我们先看看主库和备用库:

主数据库

DG环境包含一个主库。主库可以是单个实例或RAC集群。备用库至少由一个备用数据库组成。主备库通过oracle Net相互通信,主备库不受地理位置限制。

备用数据库

S

tandby 数据库与主库一致保持事务一致。一个主库可以对应多个备库。备库的种类在11g中有三种:

1.物理备库

2.逻辑备库

3.快照备库

物理standby(Physical standby database)

        物理standby是对主库进行physically identical copy。 这是一种Media recovery,是基于block-for-block的恢复。在数据块级别进行恢复,这种方式没有数据类型的限制,可以保证两个数据库完全一致。

        在Oracle 11g之前,standby 数据库只能在Mount 状态下进行恢复,也可以是打开,但只能已只读方式打开,并且打开时不能执行恢复操作。到了11g,standby 可以启动到read-only状态并同步,这样standby 数据库就可以用来进行一些数据查询操作,提高数据库的利用率。

逻辑standby(Logical standby database)

        逻辑standby 的同步使用的是SQL Apply。这种方式 像logminer挖掘日志,但是通过Logminer 技术,通过把日志内容还原成SQL 语句,然后SQL引擎执行这些语句,Logminer Standby不支持所有数据类型,可以在视图 DBA_LOGSTDBY_UNSUPPORTED 中查看不支持的数据类型,如果使用了这种数据类型,则不能保证数据库完全一致。

快照 standby(Snapshot Standby Database)

Snapshot standby 是Oracle 11g中的新特性,也是对standby database的一次升级。Snapshot standby 和 物理standby,逻辑standby 一样,也会从主库接收归档文件,但是不同的是,snapshot standby 不会应用这些接收的归档。

Snapshot Standby Database和逻辑备库都建立在物理standby基础上,如果我们想在standby 库上做一些测试,因为主库我们不能动,我们可以在备库测。 那么我们就可以把这个standby 切换成snapshot standby。 

切换语句如下:

SQL> alter database convert to snapshot standby;

把snapshot standby 数据库打开,进行我们的测试。

SQL> alter database open;

测试完毕后,我们把数据库重启到mount 状态。 执行命令将数据库从snapshot状态切换到之前的状态,如物理standby或者逻辑standby。

SQL> alter database convert to physical standby;

从snapshot standby的功能看来oracle是逐渐弱化逻辑备库的,在11g中使用物理备库和快照备库将是主流

一、为何要设置数据库强制归档?

alter database force logging;

Oracle日志记录的三种模式:logging,force logging,nologging

logging:在创建数据库对象时(视图,索引,序列等)将日志信息写入联机重做日志文件,logging相当于

对象的一个属性,用来标记创建对象时是否记录了REDO日志,包括在DML时是否记录了REDO日志。

force logging:强制记录日志,对数据所有的操作都产生日志信息,并将信息写入联机重做日志文件。

nologging:相反,较少的记录日志。

在做DATA GUARD时要保证数据的一致性,所以打开数据库强制归档模式。

二、为什么要在mount状态下开启数据库归档?

Oracle数据库启动的三个阶段,nomount,mount,open,分别加载的文件为参数文件,控制文件,数据文件,

将数据库启动到mount阶段时,数据库根据参数文件中指定的控制文件路径打开控制文件,

获取数据文件和日志文件的信息,此时可对数据库进行维护,开启归档模式,Oracle规定要在mount实例下开启归档。

三、为什么要配置静态监听参数?

在DATA GUARD架构中,在数据库mount状态下,动态监听无法将服务注册到数据库,静态监听则可以完成这个任务。

典型监听文件listen.ora分为两个部分,LISTENER注册的是服务,SID_LIST_LISTENER注册的是实例。

四、参数文件中各项参数的意义是什么?

1、*.db_name='orcl' 

数据库名,需要保持同一个DATA GUARD中所有的数据库db_name一致

2、*.db_unique_name='orcl_p'

每一个数据库都要有唯一的名称

3、*.log_archive_config='dg_config=(orcl_p,orcl_s)'

该参数用于控制发送归档日志到远程位置,以及接收远程归档日志,并指定DATA GUARD配置的唯一数据库名,

默认值为SEND,RECEIVE,NODG_CONFIG, 当该

            参数为SEND时,会激活发送归档日志到远程位置,

            参数为NOSEND时,会禁止发送归档日志到远程位置;

            参数为RESEIVE时,会激活接收远程归档日志;

            参数为NORECEIVE时会禁止接收远程归档日志;

            参数为DG_CONFIG时,可以指定最多9个惟一数据库名;

            参数为NODG_CONFIG时,会禁止指定惟一数据库名,

该参数是动态参数,可以使用alter system set log_archive_config='SEND';来修改。

4、*.log_archive_dest_1='location=/u01/arch valid_for=(all_logfiles,all_roles) db_unique_name=orcl_p'

log_archive_dest_1是DG重做日志传输的主要参数,一般在主库中起作用,在处理级联备库的时候会在备库发挥作用,

该参数也可指定在线重做日志(ORL)和备库重做日志(SRL)产生归档日志的传输目的地。

(1)service:指定备库的网络连接名

(2)sync:指定使用同步的方法传送重做数据,即客户端事务的提交会发生在LGWR进程收到备库LNS发来的

信息确认之后,对于最大可用及最大保护模式,需要至少一个备库net_timeout指定LGWR进程

等待LNS进程响应时间,如果期间没有收到响应,则认为备库发生故障(failed),默认为30s,

等待期间需要做以下事情:

                    a:停止旧的LNS进程

                    b:启动新的LNS进程

                    c:与备库建立连接

                    d:检测并停止旧的RFS进程

                    e:启动新的RFS进程

                    f:选择并打开新的SRL

                    g:初始化SR头,即备库的重做日志数据库

                    h:响应LNS进程告知已经完成准备工作

完成上面的操作后,LNS进程会通知LGWR备库连接成功,如果该过程超过了30s,则会继续放弃备库。

(3)reopen:属性控制主库尝试重新连接已经发生故障的备库的等待时间,默认为30s

(4)db_unique_name属性要在log_archive_dest_n中使用的话同时要在log_archive_config中设置,否则DATA GUARD会拒绝连接这个目标库,必须在主备库中将db_unique_name添加到log_archive_config参数中,当主库发起连接时,它将会发送自己的db_unique_name到备库,同时要求备库返回惟一的db_unique_name。在备库中将会检查log_archive_config参数,以确保主库的db_unique_name存在,如果不存在,那么连接请求就会被拒绝,如果存在,备库会把自己db_unique_name返回主库的LNS进程,如果返回值与主库该值不匹配,连接就会被终止。

(5)valid_for:属性定义了何时使用目标参数log_archive_dest_n以及作用于何种类型的日志文件

                            日志文件的合法值有以下三种:

                                        online_logfile仅在归档ORL中有效

                                        standby_logfile仅在归档SRL中有效

                                        all_logfiles无论哪种重做日志文件类型都有效

                            角色的合法值有以下三种:

                                        primary_role仅在主库中有效

                                        standby_role仅在备库中有效

                                        all_roles主备库都有效   

(6)affirm:属性是使用sync方式目标的默认值

5、*.log_archive_dest_state_1=enable

用来指定归档目录是否可用。

6、*.standby_file_management='auto'

在主库创建数据文件时备库会自动创建数据文件

7、*.log_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/orcl'

      *.db_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/orcl'

log_file_name_convert与db_file_name_convert来保证主备库数据文件路径一致

8、*.fal_server='orcl_s'

FAL指获取归档日志(fetch archive log),因为网络中断或者资源紧张等问题导致主备日志不同步,

MRP(Managed recovery process)/LSP(Logical Standby Process)不能直接与主库连接来获取丢失的归档日志,因此需要用到FAL来解决,fal_server后对应备库的db_unique_name

五、Oracle DATA GUARD进程结构是怎样的?

1、存在于主库的进程:

(1)LGWR:收集事务日志,更新联机日志,在同步模式下,LGWR将redo信息直接传送到备库的RFS进程,主库在继续处理前等待备库的确认。在非同步的情况下,也是直接将日志信息传到备库的RFS进程,但是不等待备库的确认信息。

(2)ARCH:在归档的同时,传递日志到备库RFS进程,可以用于解决GAP日志不连续问题。

(3)LNSn:Primary Database 产生的Redo日志要同时写到日志文件和网络。也就是说LGWR进程把日志写到本地日志文件的同时还要发送给本地的LNSn进程(Network Server Process),再由LNSn(LGWR Network Server process)进程把日志通过网络发送给远程的目的地,每个远程目的地对应一个LNS进程,多个LNS进程能够并行工作。

2、存在于备库的进程:

(1)FAL:只有物理备库才有的进程,FAL指获取归档日志(Fetch Archive Log),因为网络中断或者资源紧张等问题导致主备日志不同步,MRP(Managed recovery process)/LSP(Logical Standby Process)不能直接与主库连 接来获取丢失的归档日志,因此需要用到FAL来解决。

(2)RFS(Remote File Server):主要用于接收从主库传过来的日志信息。arch进程归档重做日志,由MPR应用到备库。

(3)MRP(Managed Recovery Process):只针对于物理备库,应用归档日志到备库

(4)LSP(Logic Standby Process):只有逻辑备库拥有,控制归档日志应用到逻辑备库。

3、Oracle DG通过同步日志文件来保证主库与备库的一致性

如果一个数据库与单个或者多个备库之间连接出现问题,那么主库产生的日志文件便无法传输到备库上去,使用归档日志进程(FAL)提供一个客户服务机制,用于在主库与备库中断连接后将归档日志发送到备库上,以实现自动填充间隔和重新同步。在备库上,Oracle DATA GUARD使用远程文件服务器(RFS)进程从主数据库接收重做记录,使用管理恢复进程(MRP)将重做信息应用到物理备库中,使用逻辑备用进程(LSP)将经过SQL转换的重做信息应用到逻辑备库中。

4、Oracle DATA GUARD三种保护模式

保护模式

出现灾难时数据丢失风险

重做传输机制

最大保护

零数据丢失;双重故障保护

LGWR SYNC

最高可用性

零数据丢失;单故障保护

LGWR SYNC

最高性能

最小数据丢失

LGWR SYNC 或ARCH

默认保护模式为最高性能模式,可以使用alter database set standby database to maximize (protection|availability|performance}; 来切换保护模式

最大保护模式保证在事务提交时同时写到主库与备库的日志文件中来保证一致性,优点是安全,缺点是在备库出现故障时,主库也无法正常使用。

最高可用性相同与最大保护模式基本一样,不同点在于当备库出现故障时主库会立即切换为最高性能模式。

最高性能只需要确保提交的事务写到主库的日志文件中即可。

感谢各位的阅读,以上就是“分析Oracle中11g DataGuard”的内容了,经过本文的学习后,相信大家对分析Oracle中11g DataGuard这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/71988.html

(0)

相关推荐

  • MySQL如何优化WHERE子句

    技术MySQL如何优化WHERE子句这篇文章主要为大家展示了“MySQL如何优化WHERE子句”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL如何优化WHERE子句”

    攻略 2021年11月1日
  • 39三分之一是多少码,码数码数38又三分之一是什么意

    技术39三分之一是多少码,码数码数38又三分之一是什么意是欧洲鞋码的表示方式,是介于37和38之间,三分之一就是更靠近37码。阿迪的鞋子尺码不是以0.5进位的,是以2/3进位的,因此就会出现41又1/3,41又1/3等鞋

    生活 2021年10月20日
  • 使用pygame添加会自动移动的球(pygame的python鼠标)

    技术Pygame实现监听鼠标的示例分析Pygame实现监听鼠标的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。初始化参数import pygam

    攻略 2021年12月15日
  • python循环语句(python循环语句的运用)

    技术Python循环语句怎么用小编给大家分享一下Python循环语句怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是循环呢?简单理解

    攻略 2021年12月19日
  • Kafka Producer重试参数retries设置取舍的示例分析

    技术Kafka Producer重试参数retries设置取舍的示例分析Kafka Producer重试参数retries设置取舍的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有

    攻略 2021年11月17日
  • 「IOI2021」Dungeons

    技术「IOI2021」Dungeons 「IOI2021」Dungeons题目
    点这里看题目。
    分析
    比较考察基础的观察和诡异的优化的题目,值得一试。
    算法 1
    直接模拟,复杂度为 \(O(qs)\)。

    礼包 2021年11月18日