ORACLE 11G DATA GUARD基本原理是什么

68次阅读
没有评论

共计 7618 个字符,预计需要花费 20 分钟才能阅读完成。

本篇内容主要讲解“ORACLE 11G DATA GUARD 基本原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让丸趣 TV 小编来带大家学习“ORACLE 11G DATA GUARD 基本原理是什么”吧!

1、DATAGUARD 原理  

DATAGUARD 是通过建立一个 PRIMARY 和 STANDBY 组来确立其参照关系。

STANDBY 一旦创建,DATAGUARD 就会通过将主数据库 (PRIMARY) 的 REDO 传递给 STANDBY 数据库,然后在 STANDBY 中应用 REDO 实现数据库的同步。

有两种类型的 STANDBY:物理 STANDBY 和逻辑 STANDBY 

物理 STANDBY 提供与主数据库完全一样的拷贝(块到块),数据库 SCHEMA,包括索引都是一样的。它是直接应用 REDO 实现同步的。 

逻辑 STANDBY 则不是这样,在逻辑 STANDBY 中,逻辑信息是相同的,但物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的 REDO 转换成 SQL 语句,然后在 STANDBY 上执行 SQL 语句。逻辑 STANDBY 除灾难恢复外还有其它用途,比如用于用户进行查询和报表。

DATAGUARD 包含三个服务(日志传输、日志应用、角色转换) 

日志传输服务控制 REDO 数据的传输(传输日志,实施数据库保护模式)————–STANDBY 上通过起用 RFS 进程接收 REDO 数据。 

日志应用服务则一方面自动应用日志,另一方面自动检测 STANDBY 缺少的 REDO,并从主数据库或其它 STANDBY 中自动查询出丢失的 REDO。

DATAGUARD 的几种保护模式:最大保护,最大可用,最大性能  

最大保护是指除非 REDO 在至少一个 STANDBY 中可用,否则事务不能提交。如果在某个 STANDBY 中不可用,则主数据库的操作被停止。通常受制约比较多,在生产环境中不是很常用(性价比不好)。 

最大可用是指如果 STANDBY 不可用,主数据库仍然可以处理事务,只是在问题被纠正后,STANDBY 和主数据库进行再同步。这样的一个问题是:当再同步之前有 FAILOVER 时,有些数据可能会丢失。 

最大性能是指主数据库的提交操作不等待 STANDBY。PRIMARY 和 STANDBY 松耦合,数据保护级别较低。

物理 STANDBY 可能的模式:只读模式(OPEN READONLY)和恢复模式(MANANGED RECOVERY)

2、物理 DATAGUARD 实施简要过程  

主数据库的准备工作:FORCE LOGGING,ENABLE ARCHIVING,一个本地归档目的地。 

创建 STANDBY 数据库: 

1. 关闭主库,冷备份主库数据文件、日志文件和密码文件,然后启动主库,在主库上创建 STANDBY 的控制文件:alter database create standby controlfile as‘文件名’ 

2. 准备参数文件,将参数文件、备份的主库文件和 STANDBY 控制文件拷贝到 STANDBY 系统。 

需要更改的参数有:standby_archive_dest—–接收的归档日志存放处  

db_file_name_convert 和 log_file_name_convert—–仅当主库和 STANDBY 库在同一系统下时用  

log_archive_dest_1—–本地归档目的地  

log_archive_dest_2=’service=standby’—–归档到 STANDBY 的目的地  

standby_file_management=auto 

remote_archive_enable=true 

fal_server 

fal_client 

instance_name—–当主库和 STANDBY 库在同一系统下时该参数用于区分主库  

lock_name_space—–当主库和 STANDBY 库在同一系统下时指定 STANDBY 的实例名和 INSTANCE_NAME 相同  

3. 如果是 WINDOWS 系统,需要创建 WINDOWS 服务。 

4. 配置两台机器的 tnsnames.ora, 双方都能 tnsping 通  

5. 在主库和 STANDBY 库上配置监听  

6. 起用 STANDBY 系统上的死连接检测:sqlnet.ora 中设置 sqlnet.expire_time=2 

7. 在 STANDBY 上创建 SPFILE 

8. 启动 STANDBY: 

startup nomount 

alter database mount standby database 

9. 初始化日志应用服务  

alter database recover managed standby database disconnect from session;

3DATAGUARD 维护

1. 日志传送服务  

有些情况下,你可能需要在归档日志和应用日志之间有个时间间隔,此时可以通过在 STANDBY 上指定参数 log_archive_dest_n 中指定 delay=minutes 属性。 

STANDBY 上的日志应该与主库上的日志大小相同,另外 STANDBY 上的日志组应该比主库多,因为这样归档操作才有时间完成。也就是 RFS(日志接收)进程在使用 STANDBY 的日志前,不用等待该日志被归档。最简单判断日志组是否够的方法是查看警告日志和 RFS 的 TRACE 文件。 

增加 STANDBY 日志文件的方法: 

alter database 语句中使用 add standby logfile 子句。相关视图 vstandbylog,vlogfile 

增加 STANDBY 日志组的方法: 

alter database add standby logfile group 10 (‘文件名 1’,’文件名 2’) size 100M 对于多个 STANDBY 共享归档日志文件目的地,有些情况下需要指定 log_archive_dest_n 参数的 dependency 属性,该属性的作用是说明该目的地依赖于父目的地的成功归档。 

参数 log_archive_dest_n 还可以指定 reopen、max_failures、sync、async 属性。通过给该参数指定 LGWR 或者 ARCH 属性以选择是用 LGWR 还是 ARCH 进程传送日志。 

用于日志接收的几个进程是:LGWR,ARCH,RFS,FAL。FAL 进程用于解决日志缝。 

设置数据保护模式的语句为:alter database set standby database to maximun(protection|availability|performance)

2. 日志应用服务  

对于物理 STANDBY,日志应用服务涉及到下面几个进程:RFS,ARC,MRP。MRP 是管理恢复进程。 

启动 STANDBY 的恢复操作的几个命令:alter database recover managed standby database(启动前台会话);alter database recover managed standby database disconnect from session(启动后台会话,也就是说会话可以继续干别的事情);alter database recover managed standby database cancel(停止日志应用). 

可以通过查询视图 v$managed_standby 查看日志应用情况。

3. 数据文件管理  

当主库新创建数据文件,可定义参数 standby_file_management 为 auto,让 standby 也自动创建数据文件。如果主库和 standby 的数据文件的目录结构不一样,可以设定 db_file_name_convert 将主库上的文件名转换成 standby 上的文件名。如果 standby_file_management 设为 auto,则不能在 standby 上重命名或创建数据文件、日志文件。 

每分钟主库会询问 standby 是否有 gap,该行为被称为 heartbeat. 

可以查询视图 varchivedgap,如果发现有 GAP,则可以从主库上将日志文件拷贝到 standby,然后将相关文件注册到 standby,具体方法是:alterdatabaseregisterlogfile‘文件名′。当然也可以通过设置参数 falserver,falclient,让日志应用服务自动处理 gap 问题。对于 STANDBY 日志应用服务,下面几个视图有助于监控:vmanaged_standby,varchiveddeststatus,varchived_log,vlogstatus,vdataguard_status. 

可以设置参数 log_archive_trace 对归档进行不同级别的跟踪。

4. 角色转换  

ORACLE 支持两种形式的角色转换—-switchover 和 failover 

switchover 包含两个步骤,首先主库被转换成 STANDBY,然后 STANDBY 被转换成主库  

switchover 的准备工作:完成角色转换需要改变的参数(必须改变所有 STANDBY 上的 log_archive_dest_n 和 log_archive_dest_state_n); 确保主库和所有 STANDBY 都有连接; 确认没有用户连接到数据库; 对于 RAC 环境确保只有一个实例是活动状态; 角色转换之前,主库实例应该是 OPEN 状态,而 STANDBY 实例是 MOUNT 状态,因为这样的话,转换过程中 STANDBY 数据库也可以应用归档日志,如果 STANDBY 为 READONLY,切换操作仍然可以进行,只是要花一点额外的时间; 如果切换操作包含逻辑 STANDBY,那么,主库实例和 STANDBY 实例都必须为 OPEN 状态; 将要转换成主库的 STANDBY 变成归档模式; 取消在该 STANDBY 库上的日志延迟。 

switchover 的步骤:在当前主库上,首先确认可以执行 switchover 操作(select switchover_status from vdatabase, 如果值为 TOSTANDBY 则可以切换,否则需要检查当前 DATAGUARD 配置是否运行正常),然后将主库切换为 STANDBY(执行 ALTERDATABASECOMMITTOSWITCHOVERTOPHYSICALSTANDBY; 这样原控制文件被备份并生成新的 STANDBY 控制文件,然后只要重新启动该库为 STANDBY 模式就可以了); 以上操作完成后,在原 STANDBY 数据库上,需要查询原主库的切换信息是否被目标 STANDBY 接收到(SELECTSWITCHOVERSTATUSFROMVDATABASE; 如果结果为 SWITCHOVER PENDING 说明 STANDBY 切换为 PRIMARY 是可行的,否则需要检查 DATAGUARD 的配置是否运行正常),然后执行 ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 将 STANDBY 转换成 PRIMARY,并重新启动该库。这里需要说明的是如果该库在线重做日志不存在,该切换语句会自动创建它们,然而这样一来,会花费很长的时间。因此 ORACLE 建议手工增加在线重做日志。手工增加在线重做日志的方法有两种:第一种是将原主库的日志拷贝到原 STANDBY,并且定义参数 log_file_name_convert,让它将 standby 和新的日志联系起来。第二种方法是 DROP 所有目标 STANDBY 上存在的日志,并且用命令 ALTER DATABASE ADD STANDBY LOGFILE 创建新的日志。switchover 的最后一步是将新生成的 STANDBY 转换成恢复模式,并将新 PRIMARY 进行一次归档操作。

failover 的准备工作:完成角色转换需要改变的参数(必须改变所有 STANDBY 上的 log_archive_dest_n 和 log_archive_dest_state_n); 确保主库和所有 STANDBY 都有连接; 对于 RAC 环境确保只有一个实例是活动状态; 如果要进行 failover 操作的 STANDBY 当前运行于最大保护模式,则应该将它转换成最大性能模式(通过命令 ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;)

failover 的步骤:首先发现并解决日志 GAP 的问题,然后从其它库中将日志号高于本库的日志拷贝过来并应用这些日志,如果你没有手工注册新的日志,那么可以执行下面的语句 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH; 否则需要执行的语句为 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH SKIP STANDBY LOGFILE; 接下来执行 ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 完成切换并重新启动新的主库,可能的话对主库进行一次备份。

5. 启动 STANDBY 

STARTUP NOMOUNT; 

ALTER DATABASE MOUNT STANDBY DATABASE; 

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

6. 关闭 STANDBY 

首先确认是否处于恢复状态:SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY; 

取消恢复操作:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 

SHUTDOWN IMMEDIATE;

7. 让 standby 运行于只读访问模式  

启动 STANDBY 为只读模式: 

STARTUP NOMOUNT; 

ALTER DATABASE MOUNT STANDBY DATABASE; 

ALTER DATABASE OPEN READ ONLY; 

将恢复模式的 STANDBY 转换成 read only 模式: 

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 

ALTER DATABASE OPEN READ ONLY;

8. 让 STANDBY 从 READ ONLY 转变成恢复模式  

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

i. 让为只读模式的 STANDBY 执行排序操作应该注意的问题: 

排序操作不能使用非临时表空间,临时表空间必须是本地管理的,并且只包含临时文件  

如果在创建 STANDBY 时主库没有临时表空间,则需要在主库上创建临时表空间,并执行 ALTER SYSTEM SWITCH LOGFILE; 将 redo 传给 STANDBY。如果要给 STANDBY 的临时表空间增加临时文件,需要先将 STANDBY 转换成 READ ONLY 模式,并执行命令 ALTER TABLESPACE temp1 ADD TEMPFILE‘/disk1/oracle/dbs/s_temp1.dbf’SIZE 10M REUSE; 增加临时文件。

9. 可以通过对 STANDBY 的备份实现对数据库的备份。

10. 主库上的操作和 STANDBY 的应对: 

如果你执行 ALTER DATABASE CLEAR UNARCHIVED LOGFILE 或者打开数据库时使用 RESETLOGS,那么必须重新创建 STANDBY。 

如果你在主库上执行 ALTER DATABASE ENABLE|DISABLE, 如果你改变表空间的状态,如果你设置了参数 STANDBY_FILE_MANAGEMENT 为 AUTO 并创建表空间或者增加数据文件,则不需要对 STANDBY 进行操作。 

如果你在主库上删除了表空间或者数据文件,你需要在 STANDBY 上等日志应用后在操作系统上删除相关数据文件。 

如果你在主库上重命名了数据文件,你也要在 STANDBY 上重命名(因为是对控制文件的改变,所以没有日志传过去,因此两边都要进行相同的操作) 

如果你在主库上改变了控制文件,你就要重新创建 STANDBY 控制文件或者重建 STANDBY 数据库。 

如果你在主库上增加或删除日志文件,你也需要在 STANDBY 上进行同步变化。 

具体方法为:先取消恢复,如果 STANDBY_FILE_MANAGEMENT 为 AUTO,则改为 MANUAL,然后使用命令 ALTER DATABASE ADD STANDBY LOGFILE‘prmy3.log’SIZE 100K; 增加日志文件或者用命令 ALTER DATABASE DROP STANDBY LOGFILE‘prmy3.log’DROP 掉日志文件,最后恢复参数 STANDBY_FILE_MANAGEMENT 的值。 

如果你在主库上进行了 nologging|unrecoverable 等操作,则应该将包含这些变化的表空间拷贝到 STANDBY。 

如果你改变了主库的参数文件,那么你也应该改变 STANDBY 的参数文件。

三、监控进程  

SELECT PROCESS, CLIENT_PROCESS, SEQUENCE#, STATUS FROM V$MANAGED_STANDBY;

m. 监控恢复操作的进程  

SELECT ARCHIVED_THREAD#, ARCHIVED_SEQ#, APPLIED_THREAD#, APPLIED_SEQ# FROM V$ARCHIVE_DEST_STATUS;

 DATA GUARD 的最主要的功能是冗灾。当然根据配置的不同,DATA GUARD 还可以具备以下特点:高可用、性能提升、数据保护以及故障恢复等。

 DATA GUARD 可以分为物理 STANDBY 和逻辑 STANDBY 两种。二者的最大差别在于,物理 STANDBY 应用的是主库的归档日志,而逻辑 STANDBY 应用的是主库的归档日志中提取的 SQL 语句。由于二者这一点的区别,决定了物理 STANDBY 无论从逻辑结构和物理结构都是和主库保持一致,而逻辑 STANDBY 则只需保证逻辑结构一致,且逻辑 STANDBY 在应用 SQL 语句的时候,数据库可以处于打开的状态。

    如果从 DATA GUARD 的保护模式分,可以分为三种不同的保护模式:

    保护最大化:这种模式的配置可以保证主库和备库的同步,任何情况下主库的损毁都不会导致已提交数据的丢失。如果主库和备库之间的网络出现问题,或者备库本身出现问题,都会导致主库停止数据处理。

  可用最大化:这种模式和上面一种类似,也是会保证主库和备库的同步,区别在于,当网络或备库不可用时,主库仍然可以继续处理。

  性能最大化:主库和备库是异步的。这种模式可能在主库出现损毁时,丢失一部分数据。但是这种模式对主库负荷最小,因此具有最好的性能。

到此,相信大家对“ORACLE 11G DATA GUARD 基本原理是什么”有了更深的了解,不妨来实际操作一番吧!这里是丸趣 TV 网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计7618字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)