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

前端之家收集整理的这篇文章主要介绍了oracle物理DG管理-redo数据传输,应用与三种模式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

环境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=orcllgwr 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应用。

@H_404_194@ ( 图片来自互联网)

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,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;

即可。

猜你在找的Oracle相关文章