常州一地区负责人嚎哭,他业务全停了,说是数据库连接不上了,原因是RMAN备份引起的,具体原因分析请看下文。
1、首先,看系统存储情况,如下图:
系统负责人说,D盘和E盘都有数据库文件,数据库备份在E盘。
2、 查看数据库告警日志,有大量如下信息,看信息貌似数据库归档有问题了:
Sun Aug 21 11:30:31 2016
ARCH: Archival stopped, error occurred. Will continue retrying
Sun Aug 21 11:30:31 2016
Archiver process freed from errors. No longer stopped
Sun Aug 21 11:35:31 2016
Archiver process freed from errors. No longer stopped
Sun Aug 21 11:35:31 2016
ARCH: Archival stopped, error occurred. Will continue retrying
Archiver process freed from errors. No longer stopped
ARCH: Archival stopped, error occurred. Will continue retrying
3、查看数据库的RMAN备份目录,RMAN的全备份日志里的ORA-19502告诉了我们原因,确实是E盘磁盘空间不足:
RMAN> RUN {
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> allocate channel c3 type disk;
5> backup filesperset 6 database format 'E:/backup/data/full_data_%d_%T_%s_%p';
6> sql 'alter system archive log current';
7> sql 'alter system archive log current';
8> sql 'alter system archive log current';
9> backup archivelog all format 'E:/backup/data/full_arch_%d_%T_%s_%p' delete input;
10> backup current controlfile format 'E:/backup/data/data/full_ctrl_%d_%T_%s_%p';
11> crosscheck backup;
12> crosscheck archivelog all;
13> delete noprompt archivelog all completed before "sysdate-15";
14> delete noprompt expired backup;
15> delete noprompt obsolete;
16> release channel c1;
17> release channel c2;
18> release channel c3;
19> }
20> exit;
......
通道 c3: 正在启动段 1 于 15-8月 -16
RMAN-03009: backup 命令 (c1 通道上, 在 08/15/2016 17:34:03 上) 失败
ORA-19502: 文件 "E:\BACKUP\DATA\FULL_DATA_ORCL2_20160815_1136_1", 块编号 6295680 (块大小=8192) 上出现写入错误
ORA-27070: 异步读取/写入失败
OSD-04016: 异步 I/O 请求排队时出错。
O/S-Error: (OS 112) 磁盘空间不足。
通道 c1 已禁用, 将在另一个通道上运行该通道上失败的作业
RMAN-03009: backup 命令 (c2 通道上, 在 08/15/2016 17:34:03 上) 失败
ORA-19502: 文件 "E:\BACKUP\DATA\FULL_DATA_ORCL2_20160815_1135_1", 块编号 9574272 (块大小=8192) 上出现写入错误
ORA-27070: 异步读取/写入失败
OSD-04016: 异步 I/O 请求排队时出错。
O/S-Error: (OS 112) 磁盘空间不足。
通道 c2 已禁用, 将在另一个通道上运行该通道上失败的作业
释放的通道: c1
释放的通道: c2
释放的通道: c3
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backup 命令 (c3 通道上, 在 08/15/2016 17:34:03 上) 失败
ORA-19502: 文件 "E:\BACKUP\DATA\FULL_DATA_ORCL2_20160815_1137_1", 块编号 4491392 (块大小=8192) 上出现写入错误
ORA-27070: 异步读取/写入失败
OSD-04016: 异步 I/O 请求排队时出错。
O/S-Error: (OS 112) 磁盘空间不足。
4、结合告警日志和RMAN全备份日志,猜测数据库的归档目录也在E盘,经查看数据库的归档目录在E:\BACAKUP\ARCH下,然后发现E:\BACKUP\ARCH下有438G的归档文件,查看最近的归档备份日志:
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: backup 命令 (在 08/16/2016 12:03:19 上) 失败
RMAN-06059: 没有找到预期的归档日志, 归档日志的丢失将影响可恢复性
ORA-19625: 识别文件E:\BACKUP\ARCH\ARCH_866716582_1_27892.ARC时出错
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
1、首先,看系统存储情况,如下图:
系统负责人说,D盘和E盘都有数据库文件,数据库备份在E盘。
2、 查看数据库告警日志,有大量如下信息,看信息貌似数据库归档有问题了:
Sun Aug 21 11:30:31 2016
ARCH: Archival stopped, error occurred. Will continue retrying
Sun Aug 21 11:30:31 2016
Archiver process freed from errors. No longer stopped
Sun Aug 21 11:35:31 2016
Archiver process freed from errors. No longer stopped
Sun Aug 21 11:35:31 2016
ARCH: Archival stopped, error occurred. Will continue retrying
Archiver process freed from errors. No longer stopped
ARCH: Archival stopped, error occurred. Will continue retrying
3、查看数据库的RMAN备份目录,RMAN的全备份日志里的ORA-19502告诉了我们原因,确实是E盘磁盘空间不足:
RMAN> RUN {
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> allocate channel c3 type disk;
5> backup filesperset 6 database format 'E:/backup/data/full_data_%d_%T_%s_%p';
6> sql 'alter system archive log current';
7> sql 'alter system archive log current';
8> sql 'alter system archive log current';
9> backup archivelog all format 'E:/backup/data/full_arch_%d_%T_%s_%p' delete input;
10> backup current controlfile format 'E:/backup/data/data/full_ctrl_%d_%T_%s_%p';
11> crosscheck backup;
12> crosscheck archivelog all;
13> delete noprompt archivelog all completed before "sysdate-15";
14> delete noprompt expired backup;
15> delete noprompt obsolete;
16> release channel c1;
17> release channel c2;
18> release channel c3;
19> }
20> exit;
......
通道 c3: 正在启动段 1 于 15-8月 -16
RMAN-03009: backup 命令 (c1 通道上, 在 08/15/2016 17:34:03 上) 失败
ORA-19502: 文件 "E:\BACKUP\DATA\FULL_DATA_ORCL2_20160815_1136_1", 块编号 6295680 (块大小=8192) 上出现写入错误
ORA-27070: 异步读取/写入失败
OSD-04016: 异步 I/O 请求排队时出错。
O/S-Error: (OS 112) 磁盘空间不足。
通道 c1 已禁用, 将在另一个通道上运行该通道上失败的作业
RMAN-03009: backup 命令 (c2 通道上, 在 08/15/2016 17:34:03 上) 失败
ORA-19502: 文件 "E:\BACKUP\DATA\FULL_DATA_ORCL2_20160815_1135_1", 块编号 9574272 (块大小=8192) 上出现写入错误
ORA-27070: 异步读取/写入失败
OSD-04016: 异步 I/O 请求排队时出错。
O/S-Error: (OS 112) 磁盘空间不足。
通道 c2 已禁用, 将在另一个通道上运行该通道上失败的作业
释放的通道: c1
释放的通道: c2
释放的通道: c3
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: backup 命令 (c3 通道上, 在 08/15/2016 17:34:03 上) 失败
ORA-19502: 文件 "E:\BACKUP\DATA\FULL_DATA_ORCL2_20160815_1137_1", 块编号 4491392 (块大小=8192) 上出现写入错误
ORA-27070: 异步读取/写入失败
OSD-04016: 异步 I/O 请求排队时出错。
O/S-Error: (OS 112) 磁盘空间不足。
4、结合告警日志和RMAN全备份日志,猜测数据库的归档目录也在E盘,经查看数据库的归档目录在E:\BACAKUP\ARCH下,然后发现E:\BACKUP\ARCH下有438G的归档文件,查看最近的归档备份日志:
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: backup 命令 (在 08/16/2016 12:03:19 上) 失败
RMAN-06059: 没有找到预期的归档日志, 归档日志的丢失将影响可恢复性
ORA-19625: 识别文件E:\BACKUP\ARCH\ARCH_866716582_1_27892.ARC时出错
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
由上述RMAN归档备份日志,发现有归档文件被误删除了,导致归档备份无法进行,从而导致E:\BACKUP\ARCH下有大量的归档积压,将E盘爆掉,数据库无法归档,导致数据库hang住。
5、找到原因后,处理方法很简单,先手工删除积压的归档文件释放E盘空间,使用RMAN清理被误删除及过期的归档文件:
C:\>rman nocatalog
RMAN>connect target /
RMAN>crosscheck archivelog all;
RMAN>change archivelog all crosscheck;
RMAN>delete expired archivelog all;
然后,使用RMAN重新启动数据库全备份,数据库服务异常问题解决。
5、找到原因后,处理方法很简单,先手工删除积压的归档文件释放E盘空间,使用RMAN清理被误删除及过期的归档文件:
C:\>rman nocatalog
RMAN>connect target /
RMAN>crosscheck archivelog all;
RMAN>change archivelog all crosscheck;
RMAN>delete expired archivelog all;
然后,使用RMAN重新启动数据库全备份,数据库服务异常问题解决。