0
点赞
收藏
分享

微信扫一扫

主备库redo日志大小不一样异常处理

爱上流星雨 2022-07-01 阅读 53

实验目标:模拟主备库redo日志大小不一样的异常场景,并提供解决方案.
环境介绍:
主库:oracle 11.2.0.4 + CentOS 7.9 实例名:orcl150
备库:oracle 11.2.0.4 + CentOS 7.9 实例名:orcl151
1、redo大小
1.1、主库情况
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
SQL> col member for a60
SQL> r
1* select b.thread#,a.group#,a.member,bytes/1024/1024,b.members from v$logfile a,v$log b where a.group#=b.group#
THREAD# GROUP# MEMBER BYTES/1024/1024 MEMBERS
---------- ---------- ------------------------------------------------------------ --------------- ----------
1 3 /u01/app/oracle/oradata/orcl150/redo03.log 50 1
1 2 /u01/app/oracle/oradata/orcl150/redo02.log 50 1
1 1 /u01/app/oracle/oradata/orcl150/redo01.log 50 1
SQL> select vlf.MEMBER,vl.GROUP#,vl.THREAD#,vl.BYTES/1024/1024 as "size(M)",vl.STATUS,vlf.TYPE from v$log vl,v$logfile vlf;
MEMBER GROUP# THREAD# size(M) STATUS TYPE
------------------------------------------------------------ ---------- ---------- ---------- ---------------- -------
/u01/app/oracle/oradata/orcl150/redo03.log 1 1 50 INACTIVE ONLINE
/u01/app/oracle/oradata/orcl150/redo03.log 2 1 50 INACTIVE ONLINE
/u01/app/oracle/oradata/orcl150/redo03.log 3 1 50 CURRENT ONLINE
/u01/app/oracle/oradata/orcl150/redo02.log 1 1 50 INACTIVE ONLINE
/u01/app/oracle/oradata/orcl150/redo02.log 2 1 50 INACTIVE ONLINE
/u01/app/oracle/oradata/orcl150/redo02.log 3 1 50 CURRENT ONLINE
/u01/app/oracle/oradata/orcl150/redo01.log 1 1 50 INACTIVE ONLINE
/u01/app/oracle/oradata/orcl150/redo01.log 2 1 50 INACTIVE ONLINE
/u01/app/oracle/oradata/orcl150/redo01.log 3 1 50 CURRENT ONLINE
/u01/app/oracle/oradata/orcl150/redo11_standby.log 1 1 50 INACTIVE STANDBY
/u01/app/oracle/oradata/orcl150/redo11_standby.log 2 1 50 INACTIVE STANDBY

MEMBER GROUP# THREAD# size(M) STATUS TYPE
------------------------------------------------------------ ---------- ---------- ---------- ---------------- -------
/u01/app/oracle/oradata/orcl150/redo11_standby.log 3 1 50 CURRENT STANDBY
/u01/app/oracle/oradata/orcl150/redo12_standby.log 1 1 50 INACTIVE STANDBY
/u01/app/oracle/oradata/orcl150/redo12_standby.log 2 1 50 INACTIVE STANDBY
/u01/app/oracle/oradata/orcl150/redo12_standby.log 3 1 50 CURRENT STANDBY
/u01/app/oracle/oradata/orcl150/redo13_standby.log 1 1 50 INACTIVE STANDBY
/u01/app/oracle/oradata/orcl150/redo13_standby.log 2 1 50 INACTIVE STANDBY
/u01/app/oracle/oradata/orcl150/redo13_standby.log 3 1 50 CURRENT STANDBY
/u01/app/oracle/oradata/orcl150/redo14_standby.log 1 1 50 INACTIVE STANDBY
/u01/app/oracle/oradata/orcl150/redo14_standby.log 2 1 50 INACTIVE STANDBY
/u01/app/oracle/oradata/orcl150/redo14_standby.log 3 1 50 CURRENT STANDBY

21 rows selected.

1.2、备库情况
SQL> select database_role from v$database;

DATABASE_ROLE
----------------
PHYSICAL STANDBY
SQL> select b.thread#,a.group#,a.member,bytes/1024/1024,b.members from v$logfile a,v$log b where a.group#=b.group#;

THREAD# GROUP# MEMBER BYTES/1024/1024 MEMBERS
---------- ---------- ------------------------------------------------------------ --------------- ----------
1 3 /u01/app/oracle/oradata/orcl151/redo03.log 50 1
1 2 /u01/app/oracle/oradata/orcl151/redo02.log 50 1
1 1 /u01/app/oracle/oradata/orcl151/redo01.log 50 1

2、增加主库redo大小
2.1、取消实时应用
首先将备库实时应用取消
SQL> alter database recover managed standby database cancel;

Database altered.

2.2、处理主库redo
接下来在主库操作.
SQL> alter database add logfile group 4 ('/u01/app/oracle/oradata/orcl150/redo04.log') size 100m;

Database altered.

SQL> alter system switch logfile;

System altered.

SQL> alter system checkpoint;

System altered.

SQL> select group#,thread#,sequence#,members,status,archived from v$log;

GROUP# THREAD# SEQUENCE# MEMBERS STATUS ARC
---------- ---------- ---------- ---------- ---------------- ---
1 1 22 1 INACTIVE YES
2 1 23 1 INACTIVE YES
3 1 24 1 INACTIVE YES
4 1 25 1 CURRENT NO

SQL> alter database drop logfile group 1; 说明:drop前group 1的status需为inactive,下同.

Database altered.

SQL> select group#,thread#,sequence#,members,status,archived from v$log;

GROUP# THREAD# SEQUENCE# MEMBERS STATUS ARC
---------- ---------- ---------- ---------- ---------------- ---
2 1 23 1 INACTIVE YES
3 1 24 1 INACTIVE YES
4 1 25 1 CURRENT NO

SQL> alter database add logfile group 1 ('/u01/app/oracle/oradata/orcl150/redo01.log') size 100m;
alter database add logfile group 1 ('/u01/app/oracle/oradata/orcl150/redo01.log') size 100m
*
ERROR at line 1:
ORA-00301: error in adding log file '/u01/app/oracle/oradata/orcl150/redo01.log' - file cannot be created
ORA-27038: created file already exists
Additional information: 1

操作系统层面删除redo01.log
[root@oel ~]# cd /u01/app/oracle/oradata/orcl150/
[root@oel orcl150]# ll
total 1777672
-rw-r----- 1 oracle oinstall 9748480 Jun 30 17:16 control01.ctl
-rw-r----- 1 oracle oinstall 52429312 Jun 30 17:10 redo01.log
-rw-r----- 1 oracle oinstall 52429312 Jun 30 17:14 redo02.log
-rw-r----- 1 oracle oinstall 52429312 Jun 30 17:09 redo03.log
-rw-r----- 1 oracle oinstall 104858112 Jun 30 17:16 redo04.log
-rw-r----- 1 oracle oinstall 52429312 Apr 14 21:52 redo11_standby.log
-rw-r----- 1 oracle oinstall 52429312 Apr 14 21:52 redo12_standby.log
-rw-r----- 1 oracle oinstall 52429312 Apr 14 21:52 redo13_standby.log
-rw-r----- 1 oracle oinstall 52429312 Apr 14 21:52 redo14_standby.log
-rw-r----- 1 oracle oinstall 524296192 Jun 30 17:15 sysaux01.dbf
-rw-r----- 1 oracle oinstall 775954432 Jun 30 17:14 system01.dbf
-rw-r----- 1 oracle oinstall 20979712 Jun 30 17:15 temp01.dbf
-rw-r----- 1 oracle oinstall 31465472 Jun 30 17:14 undotbs01.dbf
-rw-r----- 1 oracle oinstall 5251072 Jun 30 17:14 users01.dbf
[root@oel orcl150]# rm -rf redo01.log

SQL> alter database add logfile group 1 ('/u01/app/oracle/oradata/orcl150/redo01.log') size 100m;

Database altered.

SQL> alter database drop logfile group 2;

Database altered.

SQL> alter database drop logfile group 3;

Database altered.

SQL> select group#,thread#,sequence#,members,status,archived from v$log;

GROUP# THREAD# SEQUENCE# MEMBERS STATUS ARC
---------- ---------- ---------- ---------- ---------------- ---
1 1 0 1 UNUSED YES
4 1 25 1 CURRENT NO

[root@oel orcl150]# rm -rf redo02.log
[root@oel orcl150]# rm -rf redo03.log

SQL> alter database add logfile group 2 ('/u01/app/oracle/oradata/orcl150/redo02.log') size 100m;

Database altered.

SQL> alter database add logfile group 3 ('/u01/app/oracle/oradata/orcl150/redo03.log') size 100m;

Database altered.

SQL> select group#,thread#,sequence#,members,status,archived from v$log;

GROUP# THREAD# SEQUENCE# MEMBERS STATUS ARC
---------- ---------- ---------- ---------- ---------------- ---
1 1 0 1 UNUSED YES
2 1 0 1 UNUSED YES
3 1 0 1 UNUSED YES
4 1 18 1 CURRENT NO

SQL> alter system switch logfile;

System altered.

SQL> alter system checkpoint;

System altered.

SQL> select group#,thread#,sequence#,members,status,archived from v$log;

GROUP# THREAD# SEQUENCE# MEMBERS STATUS ARC
---------- ---------- ---------- ---------- ---------------- ---
1 1 19 1 CURRENT NO
2 1 0 1 UNUSED YES
3 1 0 1 UNUSED YES
4 1 18 1 INACTIVE YES

SQL> alter database drop logfile group 4;

Database altered.

[root@oel orcl150]# rm -rf redo04.log

SQL> select b.thread#,a.group#,a.member,bytes/1024/1024,b.members from v$logfile a,v$log b where a.group#=b.group#;

THREAD# GROUP# MEMBER BYTES/1024/1024 MEMBERS
---------- ---------- ------------------------------------------------------------ --------------- ----------
1 2 /u01/app/oracle/oradata/orcl150/redo02.log 100 1
1 3 /u01/app/oracle/oradata/orcl150/redo03.log 100 1
1 1 /u01/app/oracle/oradata/orcl150/redo01.log 100 1

SQL> select vlf.MEMBER,vl.GROUP#,vl.THREAD#,vl.BYTES/1024/1024 as "size(M)",vl.STATUS,vlf.TYPE from v$log vl,v$logfile vlf;

MEMBER GROUP# THREAD# size(M) STATUS TYPE
------------------------------------------------------------ ---------- ---------- ---------- ---------------- -------
/u01/app/oracle/oradata/orcl150/redo02.log 1 1 100 CURRENT ONLINE
/u01/app/oracle/oradata/orcl150/redo02.log 2 1 100 UNUSED ONLINE
/u01/app/oracle/oradata/orcl150/redo02.log 3 1 100 UNUSED ONLINE
/u01/app/oracle/oradata/orcl150/redo03.log 1 1 100 CURRENT ONLINE
/u01/app/oracle/oradata/orcl150/redo03.log 2 1 100 UNUSED ONLINE
/u01/app/oracle/oradata/orcl150/redo03.log 3 1 100 UNUSED ONLINE
/u01/app/oracle/oradata/orcl150/redo01.log 1 1 100 CURRENT ONLINE
/u01/app/oracle/oradata/orcl150/redo01.log 2 1 100 UNUSED ONLINE
/u01/app/oracle/oradata/orcl150/redo01.log 3 1 100 UNUSED ONLINE
/u01/app/oracle/oradata/orcl150/redo11_standby.log 1 1 100 CURRENT STANDBY
/u01/app/oracle/oradata/orcl150/redo11_standby.log 2 1 100 UNUSED STANDBY

MEMBER GROUP# THREAD# size(M) STATUS TYPE
------------------------------------------------------------ ---------- ---------- ---------- ---------------- -------
/u01/app/oracle/oradata/orcl150/redo11_standby.log 3 1 100 UNUSED STANDBY
/u01/app/oracle/oradata/orcl150/redo12_standby.log 1 1 100 CURRENT STANDBY
/u01/app/oracle/oradata/orcl150/redo12_standby.log 2 1 100 UNUSED STANDBY
/u01/app/oracle/oradata/orcl150/redo12_standby.log 3 1 100 UNUSED STANDBY
/u01/app/oracle/oradata/orcl150/redo13_standby.log 1 1 100 CURRENT STANDBY
/u01/app/oracle/oradata/orcl150/redo13_standby.log 2 1 100 UNUSED STANDBY
/u01/app/oracle/oradata/orcl150/redo13_standby.log 3 1 100 UNUSED STANDBY
/u01/app/oracle/oradata/orcl150/redo14_standby.log 1 1 100 CURRENT STANDBY
/u01/app/oracle/oradata/orcl150/redo14_standby.log 2 1 100 UNUSED STANDBY
/u01/app/oracle/oradata/orcl150/redo14_standby.log 3 1 100 UNUSED STANDBY

21 rows selected.
SQL> select group#,thread#,sequence#,members,status,archived from v$log;

GROUP# THREAD# SEQUENCE# MEMBERS STATUS ARC
---------- ---------- ---------- ---------- ---------------- ---
1 1 19 1 CURRENT NO
2 1 0 1 UNUSED YES
3 1 0 1 UNUSED YES

2.3、处理主库standby redo
现在处理主库上的standby redo log
SQL> select group#,sum(bytes/1024/1024) "Size in MB" from v$standby_log group by group#;

GROUP# Size in MB
---------- ----------
11 50
13 50
14 50
12 50
SQL> select group#,status from v$standby_log;

GROUP# STATUS
---------- ----------
11 UNASSIGNED
12 UNASSIGNED
13 UNASSIGNED
14 UNASSIGNED

SQL> alter database drop standby logfile group 11;

Database altered.

SQL> alter database drop standby logfile group 12;

Database altered.

SQL> alter database drop standby logfile group 13;

Database altered.

SQL> alter database drop standby logfile group 14;

Database altered.

系统层面操作
[root@oel orcl150]# rm -rf redo11_standby.log
[root@oel orcl150]# rm -rf redo12_standby.log
[root@oel orcl150]# rm -rf redo13_standby.log
[root@oel orcl150]# rm -rf redo14_standby.log

SQL> alter database add standby logfile group 11 '/u01/app/oracle/oradata/orcl150/redo11_standby.log' size 100m;
SQL> alter database add standby logfile group 12 '/u01/app/oracle/oradata/orcl150/redo12_standby.log' size 100m;
SQL> alter database add standby logfile group 13 '/u01/app/oracle/oradata/orcl150/redo13_standby.log' size 100m;
SQL> alter database add standby logfile group 14 '/u01/app/oracle/oradata/orcl150/redo14_standby.log' size 100m;
SQL> select group#,sum(bytes/1024/1024) "Size in MB" from v$standby_log group by group#;

GROUP# Size in MB
---------- ----------
11 100
13 100
14 100
12 100
说明:如上所示,成功模拟出主备库redo日志大小不一样的场景.

3、模拟故障
3.1、主库产生redo日志
在主库添加数据,redo日志.
SQL> create table t1 tablespace users as select * from user_objects;

Table created.

SQL> insert into t1 select * from t1;

37697 rows created.

SQL> r
1* insert into t1 select * from t1

75394 rows created.

SQL> r
1* insert into t1 select * from t1

150788 rows created.

SQL> r
1* insert into t1 select * from t1

301576 rows created.

SQL> r
1* insert into t1 select * from t1

603152 rows created.

SQL> r
1* insert into t1 select * from t1
r

1206304 rows created.

SQL> 1* insert into t1 select * from t1

2412608 rows created.

SQL> commit;

Commit complete.

SQL> alter system switch logfile;

System altered.

SQL> select count(*) from t1;

COUNT(*)
----------
4825216

3.2、备库日志
2022-06-30 16:00:58.987000 +08:00
Archived Log entry 33 added for thread 1 sequence 26 rlc 1101942938 ID 0xf1d7f01e dest 2:
RFS[3]: No standby redo logfiles available for thread 1
RFS[3]: Opened log for thread 1 sequence 27 dbid -244204776 branch 1101942938
Media Recovery Log /u01/app/oracle/fast_recovery_area/archivelog/1_26_1101942938.dbf

报错"No standby redo logfiles available for thread 1",实际生产过程中会导致主备实时应用停止.

4、解决方案
4.1、修改前准备
备库停止MRP
SQL> alter database recover managed standby database cancel;

Database altered.

SQL> show parameter standby_file_management

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
standby_file_management string AUTO
说明:备库上此参数需要设置为manual,才能修改日志组.
SQL> alter system set standby_file_management=manual;

System altered.

SQL> show parameter standby_file_management;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
standby_file_management string MANUAL

4.2、处理备库redo
扩展备库日志大小
SQL> select group#,status from v$log;

GROUP# STATUS
---------- ----------------
1 CURRENT
2 CLEARING
3 UNUSED
说明:处理clearing 状态的日志组
SQL> alter database clear logfile group 2;

Database altered.

SQL> alter database drop logfile group 2;

Database altered.

[root@oeldg orcl151]# rm -rf redo02.log

SQL> alter database add logfile group 2 '/u01/app/oracle/oradata/orcl151/redo02.log' size 100m;

Database altered.

SQL> select group#,status from v$log;

GROUP# STATUS
---------- ----------------
1 CURRENT
2 UNUSED
3 UNUSED

处理处于current状态的日志组1.
回到主库,切换日志组 alter system switch logfile;

备库检查日志组1的状态,直到状态为clearing后再按上面方式处理日志组1.

SQL> select group#,status from v$log;

GROUP# STATUS
---------- ----------------
1 CLEARING
2 CURRENT
3 UNUSED

SQL> alter database clear logfile group 1;

Database altered.

SQL> alter database drop logfile group 1;

Database altered.

[root@oeldg orcl151]# rm -rf redo01.log
SQL> alter database add logfile group 1 '/u01/app/oracle/oradata/orcl151/redo01.log' size 100m;

Database altered.

主库切换日志组 alter system switch logfile;

SQL> select group#,status from v$log

GROUP# STATUS
---------- ----------------
1 CURRENT
2 CLEARING
3 CLEARING
SQL> alter database clear logfile group 3;

Database altered.

SQL> alter database drop logfile group 3;

Database altered.

[root@oeldg orcl151]# rm -rf redo03.log

SQL> alter database add logfile group 3 '/u01/app/oracle/oradata/orcl151/redo03.log' size 100m;

Database altered.

SQL> select vlf.MEMBER,vl.GROUP#,vl.THREAD#,vl.BYTES/1024/1024 as "size(M)",vl.STATUS,vlf.TYPE from v$log vl,v$logfile vlf;

MEMBER GROUP# THREAD# size(M) STATUS TYPE
------------------------------------------------------------------------------------------ ---------- ---------- ---------- ---------------- -------
/u01/app/oracle/oradata/orcl151/redo03.log 1 1 100 CURRENT ONLINE
/u01/app/oracle/oradata/orcl151/redo03.log 2 1 100 CLEARING ONLINE
/u01/app/oracle/oradata/orcl151/redo03.log 3 1 100 UNUSED ONLINE
/u01/app/oracle/oradata/orcl151/redo02.log 1 1 100 CURRENT ONLINE
/u01/app/oracle/oradata/orcl151/redo02.log 2 1 100 CLEARING ONLINE
/u01/app/oracle/oradata/orcl151/redo02.log 3 1 100 UNUSED ONLINE
/u01/app/oracle/oradata/orcl151/redo01.log 1 1 100 CURRENT ONLINE
/u01/app/oracle/oradata/orcl151/redo01.log 2 1 100 CLEARING ONLINE
/u01/app/oracle/oradata/orcl151/redo01.log 3 1 100 UNUSED ONLINE
/u01/app/oracle/oradata/orcl151/redo11_standby.log 1 1 100 CURRENT STANDBY
/u01/app/oracle/oradata/orcl151/redo11_standby.log 2 1 100 CLEARING STANDBY

MEMBER GROUP# THREAD# size(M) STATUS TYPE
------------------------------------------------------------------------------------------ ---------- ---------- ---------- ---------------- -------
/u01/app/oracle/oradata/orcl151/redo11_standby.log 3 1 100 UNUSED STANDBY
/u01/app/oracle/oradata/orcl151/redo12_standby.log 1 1 100 CURRENT STANDBY
/u01/app/oracle/oradata/orcl151/redo12_standby.log 2 1 100 CLEARING STANDBY
/u01/app/oracle/oradata/orcl151/redo12_standby.log 3 1 100 UNUSED STANDBY
/u01/app/oracle/oradata/orcl151/redo13_standby.log 1 1 100 CURRENT STANDBY
/u01/app/oracle/oradata/orcl151/redo13_standby.log 2 1 100 CLEARING STANDBY
/u01/app/oracle/oradata/orcl151/redo13_standby.log 3 1 100 UNUSED STANDBY
/u01/app/oracle/oradata/orcl151/redo14_standby.log 1 1 100 CURRENT STANDBY
/u01/app/oracle/oradata/orcl151/redo14_standby.log 2 1 100 CLEARING STANDBY
/u01/app/oracle/oradata/orcl151/redo14_standby.log 3 1 100 UNUSED STANDBY

21 rows selected.

SQL> show parameter standby_file_management;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
standby_file_management string MANUAL

4.3、处理备库standby redo

SQL> select group#,sum(bytes/1024/1024) "Size in MB" from v$standby_log group by group#;

GROUP# Size in MB
---------- ----------
11 50
13 50
14 50
12 50
SQL> select group#,status from v$standby_log;

GROUP# STATUS
---------- ----------
11 UNASSIGNED
12 UNASSIGNED
13 UNASSIGNED
14 UNASSIGNED

SQL> alter database drop standby logfile group 11;

Database altered.

SQL> alter database drop standby logfile group 12;

Database altered.

SQL> alter database drop standby logfile group 13;

Database altered.

SQL> alter database drop standby logfile group 14;

Database altered.

[root@oeldg orcl151]# rm -rf redo11_standby.log
[root@oeldg orcl151]# rm -rf redo12_standby.log
[root@oeldg orcl151]# rm -rf redo13_standby.log
[root@oeldg orcl151]# rm -rf redo14_standby.log
[root@oeldg orcl151]# pwd
/u01/app/oracle/oradata/orcl151

SQL> alter database add standby logfile group 11 '/u01/app/oracle/oradata/orcl151/redo11_standby.log' size 100m;

Database altered.

SQL> alter database add standby logfile group 12 '/u01/app/oracle/oradata/orcl151/redo12_standby.log' size 100m;

Database altered.

SQL> alter database add standby logfile group 13 '/u01/app/oracle/oradata/orcl151/redo13_standby.log' size 100m;

Database altered.

SQL> alter database add standby logfile group 14 '/u01/app/oracle/oradata/orcl151/redo14_standby.log' size 100m;

Database altered.

4.4、备库恢复日志应用
SQL> alter system set standby_file_management=auto;

System altered.

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

Database altered.

SQL> select process,status,sequence# from v$managed_standby;

PROCESS STATUS SEQUENCE#
--------- ------------ ----------
ARCH CLOSING 17
ARCH CONNECTED 0
ARCH CONNECTED 0
ARCH CONNECTED 0
RFS IDLE 0
RFS IDLE 0
RFS IDLE 0
RFS IDLE 25
MRP0 WAIT_FOR_LOG 25

9 rows selected.
参考网址:https://wenku.baidu.com/view/87aab6f11a5f312b3169a45177232f60ddcce78f.html

举报

相关推荐

0 条评论