应用系统生命周期是一个整体,除了最开始的需求调研、开发测试和上线,更长的时期是在运维方面。应用系统的价值体现也就是在运维阶段,一个经常报错故障的系统运维环境,是很难获得良好的用户体验的。
在实践中,软件开发商和运维方面如果没有完善的沟通交流,新系统是不容易融入原有的运维体系中的,更有甚者会引起很多其他故障。本篇就介绍一个由于备份策略冲突引起的磁盘空间故障。
1、环境介绍和故障
笔者最近接收一个系统,上线运维一年余。交接时候,业务部门反映曾经出现磁盘空间占满故障。当时引起整个系统瘫痪,最后联系开发商介入才解决问题。但是当时反馈也没有彻底解决,只能定时找开发商进行处理。
由于资料信息渠道有限,笔者只能实地观察分析。数据库服务器版本为红帽Linux 6.2,数据库版本为11.2.0.3。
[root@DB ~]# cat /etc/RedHat-release
Red Hat Enterprise Linux Server release 6.1 (Santiago)
SQL> select * from v$version;
BANNER
---------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
故障是从磁盘空间相关的,所以当前磁盘状态df如下。
[root@DB ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 59G 8.4G 48G 15% /
tmpfs 3.9G 288K 3.9G 1% /dev/shm
/dev/sda2 194M 41M 143M 23% /boot
/dev/sda1 200M 256K 200M 1% /boot/efi
/dev/sda8 1.4T 351G 976G 27% /data
/dev/sda4 59G 23G 34G 40% /home
/dev/sda5 59G 180M 56G 1% /tmp
/dev/sda6 59G 5.9G 50G 11% /var
系统空间分布比较典型,资源相对来说是比较富裕的。最大容量分区/data目录将近1.4T数据量,使用了351G。从oracle用户环境变量上,数据库软件是安装在/home文件夹下,而数据文件是在/data里面。
[oracle@DB]/home/oracle>env | grep ORA
ORACLE_BASE=/home/oracle/app
ORACLE_HOME=/home/oracle/app/product/11.2.0/db_1
ORACLE_OWNER=oracle
ORACLE_SID=db
业务系统数据shema数据量极小,只有77M。根据业务分析,系统的业务数据只保存在数据库中,而且没有删除的机制。这种情况下,由于业务数据突然膨胀引发的磁盘空间爆满的机率是很低的。
分析重点在于,/data中超过300G的空间消耗是如何出现的?
2、问题分析
进入/data目录,我们发现应用程序在这个目录中进行RMAN备份。
[root@DB rman]# pwd
/data/db/rman
[root@DB rman]# ls -l
total 1312
drwxr-xr-x. 2 oracle oinstall 409600 Mar 7 01:02 bak
-rw-r--r--. 1 oracle oinstall 0 Aug 21 2013 get
drwxr-xr-x. 2 oracle oinstall 921600 Mar 7 01:01 logs
-rwxr-x---. 1 oracle oinstall 1037 Jul 1 2013 rman_full.sh
显然,/data/db/rman目录是应用系统内部的备份机制。目前很多系统都有自带的数据库备份模块,从现在看,系统是计划使用RMAN程序进行备份。
目录中的rman_full.sh脚本是主要执行脚本。
[root@DB rman]# cat rman_full.sh
#!/bin/ksh
#set env
(篇幅原因,有省略……)
$BIN/rman log $BACKUP_LOG/$TARGET_SID.full.$DATE_3.log <<EOF
connect target /
run{
allocate channel c1 type disk ;
allocate channel c2 type disk ;
backup full database format '$BACKUP_PATH/${DATE_2}_full_%d_%s_%p_%u.bak'
tag='full' include current controlfile;
sql 'alter system archive log current';
backup archivelog all format '$BACKUP_PATH/${DATE_2}_archivelog_%d_%s_%p_%u.bak';
delete noprompt expired backupset of archivelog all ;
release channel c1 ;
release channel c2 ;
}
crosscheck backup;
delete noprompt expired backup;
delete noprompt obsolete;
exit;
EOF
从公允的角度看,这个脚本是看不出什么问题的。设置环境变量、目录位置、对数据库和归档文件进行备份。之后进行crosscheck检查expired backup信息,最后依据obsolete retention原则将过期日志进行删除。
目录结构中的bak是存放备份集合的地方(虽然控制文件还是遗留在$ORACLE_HOME/dbs中),logs目录为文本日志。进入bak目录之后,检查备份情况。
[root@DB bak]# ls | more
20130719_archivelog_DB_109189_1_k5of3j4s.bak
20130719_archivelog_DB_109190_1_k6of3j4t.bak
20130719_full_DB_109180_1_jsof3j1b.bak
20130719_full_DB_109186_1_k2of3j4d.bak
20130720_archivelog_DB_109258_1_maof64d1.bak
20130720_archivelog_DB_109259_1_mbof64d2.bak
20130720_full_PDB_109255_1_m7of64cn.bak
(篇幅原因,有省略)
20140307_full_DB_115107_1_d3p2ho2g.bak
20140307_full_DB_115108_1_d4p2ho2g.bak
20140307_full_DB_115109_1_d5p2ho47.bak
201401171422.dmp
full_20130720.tar.gz
rm
注意:备份片中的时间日期是在其中的,从2013年7月开始,一直备份集合就存在。数据总量是300G。
[root@DB bak]# du -h
301G .
这个显然是有问题,在rman备份脚本中,有明确的delete obsolete语句,将不需要的备份集合删除。确定obsolete的规则是可以从show all中看到。
RMAN> show all;
RMAN configuration parameters for database with db_unique_name DB are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
留存窗口策略是7天。现实bak目录中的内容显然是超过了这个范围。长期的备份留存会让bak占有的空间越来越多,这样即使/data目录有1.4T这么大的空间,也会被撑满的。
那么,确认到撑满的原因之后,就需要确认Oracle在执行应用程序RMAN脚本时候,为什么没有成功删除备份。寻找logs目录中每天的日志信息,可以找到答案。
[root@DB logs]# tail -n 20 db.full.20140307010102.log
Backup Piece 73678 27-FEB-14 c-1778314713-20140227-02
Backup Set 73679 27-FEB-14
Backup Piece 73679 27-FEB-14 a5p1mv7i_1_1
Backup Set 73680 27-FEB-14
Backup Piece 73680 27-FEB-14 a6p1mv8m_1_1
Backup Set 73681 27-FEB-14
Backup Piece 73681 27-FEB-14 c-1778314713-20140227-03
Backup Set 73684 28-FEB-14
Backup Piece 73684 28-FEB-14 /data/awpdb/rman/bak/20140228_full_PDB_115018_1_aap1ncc6.bak
Backup Set 73685 28-FEB-14
Backup Piece 73685 28-FEB-14 /home/oracle/app/product/11.2.0/db_1/dbs/c-1778314713-20140228-00
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of delete command at 03/07/2014 01:02:57
RMAN-06091: no channel allocated for maintenance (of an appropriate type)
在删除obsolete的时候出现问题,RMAN-06091表示分配channel出现了问题。于是,问题原因思路就出现了:根源在于删除obsolete的时候报错,长期以来脚本不能成功删除过期备份,最后备份文件撑满文件系统。
- 大小: 44.2 KB
分享到:
相关推荐
与其他备份解决方案相比, pg_probackup具有以下好处,可以帮助您实施不同的备份策略并处理大量数据: 增量备份:页面级增量备份可让您节省磁盘空间,加快备份和还原速度。 使用三种不同的增量模式,您可以根据...
12.1.1备份和恢复解决方案 12.1.2数据库备份的分类 12.1.3错误类型 12.2物理备份工具RMAN 12.2.1 RMAN工作环境 12.2.2 RMAN支持备份的文件 12.2.3闪回恢复区 12.2.4 RMAN环境变量 12.2.5 RMAN的登录方式 ...
6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的...
可能是一个包含注册表数据文件的结构已损坏,也可能内存中该文件的系统映像已损坏,或者因为备份副本(或日志)不存在(或损坏)导致无法恢复该文件。 1016 由注册表引起的 I/O 操作发生了不可恢复的错误。...
6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器...
2.7.9 将表和索引放在不同的磁盘上 39 2.7.10 将日志文件保存到独立的物理磁盘 39 2.7.11 表的分区 40 2.8 处理器瓶颈分析 40 2.8.1 % Processor Time 41 2.8.2 % Privileged Time 41 2.8.3 Processor Queue ...
2.7.9 将表和索引放在不同的磁盘上 39 2.7.10 将日志文件保存到独立的物理磁盘 39 2.7.11 表的分区 40 2.8 处理器瓶颈分析 40 2.8.1 % Processor Time 41 2.8.2 % Privileged Time 41 2.8.3 Processor Queue ...
6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的...
6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的...
由于文件太大,分成了3部分,当前第1部分,请下载完3个部分,并放在同一目录,否则无法解压! 内容简介 《SQL Server 2008管理员必备指南》按照...15.3 使用备份策略 15.4 创建备份设备 15.5 执行备份 15.5.1 在SQL...
由于文件太大,被分为3部分,当前第3部分,请下载完总共的3部分,并放在同一目录,否则无解压。 内容简介 《SQL Server 2008管理员必备指南》按照...15.3 使用备份策略 15.4 创建备份设备 15.5 执行备份 15.5.1 在...
由于文件太大,被分成3部分,当前第2部分,请下载完三部分,并放在同一目录,否则无法解压。 内容简介 《SQL Server 2008管理员必备指南》按照...15.3 使用备份策略 15.4 创建备份设备 15.5 执行备份 15.5.1 在SQL ...
6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的...
6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器...
6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的...
不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 ...
进行自动化维护和实现基于策略的管理 监视服务器活动并优化性能 管理日志传送和数据库镜像 执行备份和还原 《微软技术丛书》包括以下几个子系列 从入门到精通 适舍新手程序员的实用教程 侧重于基础...
进行自动化维护和实现基于策略的管理 监视服务器活动并优化性能 管理日志传送和数据库镜像 执行备份和还原 《微软技术丛书》包括以下几个子系列 从入门到精通 适舍新手程序员的实用教程 侧重于基础...