DataSync 异构数据同步
这种模式能够确保绝无数据丢失。要实现这一步当然是有代价的,它要求所有的事务在提交前其REDO不仅被写入到本地的Online?Redologs,还要同时写入到Standby数据库的Standby?Redologs,并确认REDO数据至少在一个Standby数据库中可用(如果有多个的话),然后才会在Primary数据库上提交。如果出现了什么故障导致Standby数据库不可用的话(比如网络中断),Primary数据库会被Shutdown,以防止数据丢失。 使用这种方式要求Standby?Database?必须配置Standby?Redo?Log,而Primary?Database必须使用LGWR,SYNC,AFFIRM?方式归档到Standby?Database. ? 2.?最高可用性(Maximum?availability) 这种模式在不影响Primary数据库可用前提下,提供最高级别的数据保护策略。其实现方式与最大保护模式类似,也是要求本地事务在提交前必须至少写入一台Standby数据库的Standby?Redologs中,不过与最大保护模式不同的是,如果出现故障导致Standby数据库无法访问,Primary数据库并不会被Shutdown,而是自动转为最高性能模式,等Standby数据库恢复正常之后,Primary数据库又会自动转换成最高可用性模式。 这种方式虽然会尽量避免数据丢失,但不能绝对保证数据完全一致。这种方式要求Standby?Database?必须配置Standby?Redo?Log,而Primary?Database必须使用LGWR,SYNC,AFFIRM?方式归档到Standby?Database. ? 3.?最高性能(Maximum?performance) 缺省模式。?这种模式在不影响Primary数据库性能前提下,提供最高级别的数据保护策略。事务可以随时提交,当前Primary数据库的REDO数据至少需要写入一个Standby数据库,不过这种写入可以是不同步的。如果网络条件理想的话,这种模式能够提供类似最高可用性的数据保护,而仅对Primary数据库的性能有轻微影响。这也是创建Standby数据库时,系统的默认保护模式。 这种方式可以使用LGWR?ASYNC?或者?ARCH?进程实现,Standby?Database也不要求使用Standby?Redo?Log。 ? 4.?修改数据保护模式步骤 1)关闭数据库,重启到Mount?状态,如果是RAC,需要关闭所有实例,然后只启动一个实例到mount状态。 2)修改模式: 语法:ALTER?DATABASE?SET?STANDBY?DATABASE?TO?MAXIMIZE?{PROTECTION?|?AVAILABILITY?|?PERFORMANCE};? 如:SQL>ALTER?DATABASE?SET?STANDBY?DATABASE?TO?MAXIMIZE?PROTECTION; 3)?打开数据库:?alter?database?open; 4)?确认修改数据保护模式: SQL>select?protection_mode,protection_level?from?v$database;? ? ? ? 三.?自动裂缝检测和解决 ? ??????当Primary?Database的某些日志没有成功发送到Standby?Database,?这时候发生饿了归档裂缝(Archive?Gap)。 缺失的这些日志就是裂缝(Gap)。?Data?Guard能够自动检测,解决归档裂缝,不需要DBA的介入。这需要配置FAL_CLIENT,?FAL_SERVER?这两个参数(FAL:?Fetch?Archive?Log)。 从FAL?这个名字可以看出,这个过程是Standby?Database主动发起的“取”日志的过程,Standby?Database?就是FAL_CLIENT.?它是从FAL_SERVER中取这些Gap,?10g中,这个FAL_SERVER可以是Primary?Database,?也可以是其他的Standby?Database。 如:FAL_SERVER=‘PR1,ST1,ST2‘; FAL_CLIENT和FAL_SERVER两个参数都是Oracle?Net?Name。?FAL_CLIENT?通过网络向FAL_SERVER发送请求,FAL_SERVER通过网络向FAL_CLIENT发送缺失的日志。?但是这两个连接不一定是一个连接。?因此FAL_CLIENT向FAL_SERVER发送请求时,会携带FAL_CLIENT参数值,用来告诉FAL_SERVER应该向哪里发送缺少的日志。?这个参数值也是一个Oracle?Net?Name,这个Name是在FAL_SERVER上定义的,用来指向FAL_CLIENT. ? 当然,除了自动地日志缺失解决,DBA?也可以手工解决。?具体操作步骤如下: ? 1)?查看是否有日志GAP:? ????SQL>?SELECT?UNIQUE?THREAD#,?MAX(SEQUENCE#)?OVER(PARTITION?BY?THREAD#)?LAST?FROM?V$ARCHIVED_LOG;? ? SQL>?SELECT?THREAD#,?LOW_SEQUENCE#,?HIGH_SEQUENCE#?FROM?V$ARCHIVE_GAP;? ??2)?如果有,则拷贝过来 3)?手工的注册这些日志:? SQL>?ALTER?DATABASE?REGISTER?LOGFILE?‘路径‘;? ? ? ? ? 四.?指定日志发送对象 ? 1.VALID_FOR属性指定传输及接收对象 LOG_ARCHIVE_DEST_n参数中的VALID_FOR属性,用来指定传输的内容。从字面理解VALID_FOR就是基于那谁有效,该属性有两个参数值需要指定:REDO_LOG_TYPE和DATABASE_ROLE,我们基本上可以将其理解为:发送指定角色生成的指定类型的日志文件,该参数的主要目的是为了确保,一旦发生角色切换操作后数据库的正常运转。 其中,REDO_LOG_TYPE和DATABASE_ROLE两个参数可供选择的参数值如下: REDO_LOG_TYPE:可设置为ONLINE_LOGFILE、STANDBY_LOGFILE、ALL_LOGFILES。?? DATABASE_ROLE:可设置为PRIMARY_ROLE、STANDBY_ROLE、ALL_ROLES。? ? 注意:VALID_FOR参数默认值是:VALID_FOR=(ALL_LOGFILES,ALL_ROLES)。? ? 推荐手动设置该参数而不要使用默认值,在某些情况下默认的参数值不一定合适,如逻辑Standby在默认情况下就处于OPEN?READ?WRITE模式,不仅有REDO数据而且还包含多种日志文件(Online?Redologs、Archived?Redologs及Standby?Redologs)。 默认情况下,逻辑Standby数据库生成的归档文件和接收到的归档文件在相同的路径下,这既不便于管理,也极有可能带来一些隐患。建议对每个LOG_ARCHIVE_DEST_n参数设置合适的VALID_FOR属性。本地生成的归档文件和接收到的归档文件最好分别保存于不同路径下。 ? 2.通过DB_UNIQUE_NAME属性指定数据库 (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |