环境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应用。
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; 即可。 |