问题出现
数据库版本
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
搭建ADG,采用real-time apply方式
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE;
数据库保护模式:
SQL> SELECT protection_mode FROM v$database;
PROTECTION_MODE
--------------------
MAXIMUM PERFORMANCE
将数据库保护模式修改为MAXIMIZE PROTECTION
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 5.0508E+10 bytes
Fixed Size 2217504 bytes
Variable Size 2.8454E+10 bytes
Database Buffers 2.2012E+10 bytes
Redo Buffers 39710720 bytes
Database mounted.
SQL> ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;
Database altered.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 40916
Session ID: 145 Serial number: 3
问题出现
primary alert.log信息如下:
Wed Aug 03 13:37:51 2016
NSS3 started with pid=55, OS id=52738
ARCt: Archival started
ARC0: STARTING ARCH PROCESSES COMPLETE
******************************************************************
LGWR: Setting 'active' archival for destination LOG_ARCHIVE_DEST_3
******************************************************************
LGWR: Attempting destination LOG_ARCHIVE_DEST_3 network reconnect (16086)
Wed Aug 03 13:38:01 2016
LGWR: RFS network connection re-established at host 'orcl_stby'
LGWR: Error 16086 opening RFS destination for reconnect
LGWR: RFS network connection re-established at host 'orcl_stby'
LGWR: Error 16086 opening RFS destination for reconnect
standby alert.log信息如下
Wed Aug 03 13:37:54 2016
Using STANDBY_ARCHIVE_DEST parameter default value as /backup/redo/archive/
RFS[1]: Assigned to RFS process 8894
RFS[1]: Identified database type as 'physical standby': Client is LGWR SYNC pid 51980
Primary database is in MAXIMUM PROTECTION mode
Standby controlfile consistent with primary
Wed Aug 03 13:37:55 2016
RFS[2]: Assigned to RFS process 8896
RFS[2]: Identified database type as 'physical standby': Client is LGWR SYNC pid 51980
Primary database is in MAXIMUM PROTECTION mode
Standby controlfile consistent with primary
Standby controlfile consistent with primary
RFS[2]: No standby redo logfiles of file size 209715200 AND block size 512 exist
RFS[2]: No standby redo logfiles selected (reason:7)
Errors in file /u01/app/diag/rdbms/orcl_stby/orcl/trace/orcl_rfs_8896.trc:
ORA-16086: Redo data cannot be written to the standby redo log
Wed Aug 03 13:38:01 2016
RFS[3]: Assigned to RFS process 8898
RFS[3]: Identified database type as 'physical standby': Client is LGWR SYNC pid 51980
Primary database is in MAXIMUM PROTECTION mode
Standby controlfile consistent with primary
Standby controlfile consistent with primary
RFS[3]: No standby redo logfiles of file size 209715200 AND block size 512 exist
RFS[3]: No standby redo logfiles selected (reason:7)
Errors in file /u01/app/diag/rdbms/orcl_stby/orcl/trace/orcl_rfs_8898.trc:
ORA-16086: Redo data cannot be written to the standby redo log
问题分析
1、从主库的日志信息看,FRS无法同步到备库;
2、备库的信息看到
RFS[3]: No standby redo logfiles of file size 209715200 AND block size 512 exist
RFS[3]: No standby redo logfiles selected (reason:7)
备库申请200MB的standby redo log但是没有
检查standby redo log
SQL> select group#,bytes/1024/1024 from v$standby_log;
GROUP# BYTES/1024/1024
---------- ---------------
11 50
12 50
13 50
14 50
15 50
16 50
6 rows selected.
因此将备库的standby redo log的大小修改为200M
SQL>
SQL>
SQL>
SQL>
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 5.0508E+10 bytes
Fixed Size 2217504 bytes
Variable Size 2.8454E+10 bytes
Database Buffers 2.2012E+10 bytes
Redo Buffers 39710720 bytes
Database mounted.
SQL> alter database open;
Database altered.
SQL> insert into test values(1);
1 row created.
SQL> commit;
Commit complete.
重新启动primary数据库
SQL> startup mount;
ORACLE instance started.
Total System Global Area 5.0508E+10 bytes
Fixed Size 2217504 bytes
Variable Size 2.8454E+10 bytes
Database Buffers 2.2012E+10 bytes
Redo Buffers 39710720 bytes
Database mounted.
SQL> alter database open;
Database altered.
数据库启动成功,将主库的standby redo log也做同样的修改,以防止故障转移的时候出现同样的问题。
问题总结
standby redo log需要200M的原因是因为redo log的大小也是200M,所以要保证redo log和standby redo log的大小。
SQL> select group#,bytes/1024/1024 from v$log;
GROUP# BYTES/1024/1024
---------- ---------------
1 200
2 200
3 200
4 200
5 200