oracle物理DG管理-redo数据传输,应用与三种模式

来源:互联网 发布:js防止表单二次提交 编辑:程序博客网 时间:2024/04/28 15:38

环境http://blog.csdn.net/sunziyue/article/details/50799648基础之上

1学习配置参数

下列参数为primary 角色相关

*.db_name='orcl'            //注意Guard Data中所有数据库DB_NAME应该一致;

*.db_unique_name='orcldg'  //配置有效的db_unique_name列表,且负责主备验证内容;

*.log_archive_config='dg_config=(orcl,orcldg)' //同一个Guard Data中所有数据库的db_unique_name;

*.log_archive_dest_1='location=/u01/app/oracle/archivelogvalid_for=(all_logfiles,all_roles)  db_unique_name=orcldg'    //本地归档文件路径;

*.log_archive_dest_2='service=orcl lgwr sync affirm  valid_for=(online_logfiles,primary_role)  db_unique_name=orcl'    //远程归档文件路径,负责传输重做等;

service:远程备库网络服务名

lgwr或者arch:  lgwr或者arch进程传输主库的redo数据

sync或者async: 同步或者异步传输

affirm与noaffirm: affirm表示只有当日志写入standby重做日志后才算日志传输成功,noaffirm则没有这个要求;

reopen:主数据库重新连接备库的时间

net_timeout:当采用sync传输模式时,超过多少秒则表示网路超时(默认为30s),建议设置改参数;

valid_for:定义使用log_archive_dest_n参数归档,控制主备库是否可以归档在线日志文件或者归档备用日志文件,有如下子参数:

                 online_logfile:仅归档联机日志文件

                 standby_logfile:归档备用日志文件

                 all_logfiles:归档所有日志文件

                 primary_role:在主角色起作用

                 standby_role:在备角色起作用

                 all_roles:在所有角色起作用

compression:传送中进行压缩,

delay:在备库延迟应用redo的时间(秒/单位)

*.log_archive_dest_state_1=enable  //控制相关归档路径是否生效;

*.log_archive_dest_state_2=enable  //控制相关归档路径是否生效;

*.log_archive_max_processes=10   //归档进程数量;

以下参数为主库转为standby 角色时相关的参数

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

*.log_file_name_convert='/u01/app/oracle/oradata/orcl','/u01/app/oracle/oradata/orcldg'     //当备库和主库文件不同,彼此切换主备的时候使用该参数转换;

*.fal_server=orcl     //用于管理归档中断,FAL(fetch archive log),响应传输归档的库;

*.fal_client=orcldg  

*.standby_file_management=auto//如果主库数据文件发生某些修改,是否自动同步到备库;

2三种模式

比较项

最大保护

最高可用

最大性能

Redo写或传输进程

lgwr

lgwr

lgwr或者arch

网络传输模式

sync

sync

sync或者async

是否落盘确认

affirm

affirm

affirm或者noaffirm

standby redologs

需要

需要

可有可无

(1)设置参数位置

主库log_archive_dest_n参数设置

示例:*.log_archive_dest_2='service=orcl  lgwr sync affirm

valid_for=(online_logfiles,primary_role)  db_unique_name=orcl'

(2)重要参数分析

arch:只支持最大性能模式。归档日志通过primary上的arch进程传送给standby的rfs进程,保存到指定路径(如果有standby redo logfile,则保存到该位置,然后再归档),然后redo应用。

                                   
                                                             ( 图片来自互联网)

lgwr:primary使用LGWR即时将日志传送到standby的rfs进程,并保存到standby redo logfile中,而不再需要等到归档操作时才传送,保存到standbyredo logfile,然后再归档,然后redo应用。

用LGWR传输大致如下:

1)主库:只要有新的重做日志产生,lgwr进程将触发LNSn进程把新生成的日志传输给备库rfs进程。

2)备库:rfs进程接收到日志后,将其写入standby重做日志,如果备库开启了实时应用,就立即做日志应用,如果没有开启,则等standby重做日志归档后再应用。

3)其中,async和sync的区别在于:sync是在redo还在内存时,LNSn进程就开始传输,而async是在redo写到online redo log后,LNSn才开始传输。

同步的实时性来看,lgwr(sync) > lgwr(async)> arch

sync模式下,主库产生任何redo时,同时马上触发网络传输给备库RFS进程; 


async模式下,主库产生redo时,先写到本地online redo logfile文件中,LNSn进程从online redo logfile文件中取redo数据网络传输给备库RFS进程。


(3)模式切换

首次performance>>availability>>protection顺序需要在主库执行且主库必须处于mount状态;

如果已经由performance>> availability>>protection数据保护级别操作过1次,那么再次操作时可直接操作;

protection>>availability>>performance顺序直接操作即可

主备库操作:SQL>select database_role,protection_mode,protection_level from v$database;

主库更改log_archive_dest_n参数配置,如:

SQL>alter system set log_archive_dest_2='service=orcldg lgwr sync valid_for=(online_logfiles,primary_role) db_unique_name=orcldg';

主库操作:SQL> shutdown immediate;

备库操作:alter database recover managed standby database cancel;

主库操作:SQL>startup mount;

主库操作:SQL>alter database set standby database to maximize availability;

主库操作:SQL>alter database open

完成。

问题

当切换为alter database set standby database to maximize protection;之后alter database open报错

alter database open

*

ERROR at line 1:

ORA-03113: end-of-file on communication channel

Process ID: 10711

Session ID: 1 Serial number: 5

解决:读alert_orcl.log,我这里是备库端监听没有启动,启动了问题就解决了。

Fatal NI connect error 12541, connecting to:

(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=orcldg)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcldg)(CID=(PROGRAM=oracle)(HOST=orcldg)(USER=oracle))))

  VERSION INFORMATION:

      TNS for Linux: Version 11.2.0.4.0 - Production

      TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.4.0 - Production

  Time: 08-MAR-2016 21:14:11

  Tracing not turned on.

  Tns error struct:

    ns main err code: 12541

TNS-12541: TNS:no listener

    ns secondary err code: 12560

    nt main err code: 511

TNS-00511: No listener

    nt secondary err code: 111

    nt OS err code: 0

***********************************************************************

3备库怎样应用redo数据

启动实时应用://备库MRP进程直接读取standbyredo logfile应用

                           alter database recover managed standby database using current logfile disconnect from session;

取消实时应用:alter database recover managed standby database cancel;

延迟应用数据:

                 主库*.log_archive_dest_2='service=orcl…'参数中指定delay属性(如果备库实时应用redo数据,delay则不起作用)

                 备库配置:alter database recover managed standby database delay 10 disconnect from session;//举例

取消延时应用数据:alter database recover managed standby database nodelay;

备库启动遇到问题

SQL> startup

ORA-10458: standby database requires recovery

ORA-01196: file 1 is inconsistent due to a failed media recovery session

ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'

原因是由于某些redo没有传输到备库,可能落后了很多归档文件

处理:

1)备库查询:SQL>select process,client_process,sequence#,status from v$managed_standby;//定位正在应用的日志文件

select max(sequence#) from v$archived_log;

2)主库查询:SQL> select process,client_process,sequence#,status from v$managed_standby;//查询主库当前写到的日志文件

select max(sequence#) from v$archived_log;

3)对比备库与主库之间的待传输应用日志文件,从主库拷贝到备库归档路径

4)备库注册

ALTER DATABASE REGISTER PHYSICAL LOGFILE '/u01/app/oracle/archivelog/xxx.dbf' ;

5)备库应用redo

alter database recover managed standby database disconnect from session;

即可。

 

0 0
原创粉丝点击