`

不同备份策略不兼容引起的磁盘空间故障解决实例

阅读更多


应用系统生命周期是一个整体,除了最开始的需求调研、开发测试和上线,更长的时期是在运维方面。应用系统的价值体现也就是在运维阶段,一个经常报错故障的系统运维环境,是很难获得良好的用户体验的。

在实践中,软件开发商和运维方面如果没有完善的沟通交流,新系统是不容易融入原有的运维体系中的,更有甚者会引起很多其他故障。本篇就介绍一个由于备份策略冲突引起的磁盘空间故障。



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:PostgreSQL备份和恢复管理器

    与其他备份解决方案相比, pg_probackup具有以下好处,可以帮助您实施不同的备份策略并处理大量数据: 增量备份:页面级增量备份可让您节省磁盘空间,加快备份和还原速度。 使用三种不同的增量模式,您可以根据...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    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的登录方式 ...

    MySQL 5.1中文手冊

    6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的...

    Windows 系统错误代码简单分析

    可能是一个包含注册表数据文件的结构已损坏,也可能内存中该文件的系统映像已损坏,或者因为备份副本(或日志)不存在(或损坏)导致无法恢复该文件。  1016 由注册表引起的 I/O 操作发生了不可恢复的错误。...

    MYSQL中文手册

    6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器...

    SQLServer2008查询性能优化 2/2

    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 ...

    SQLServer2008查询性能优化 1/2

    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 ...

    MySQL 5.1参考手册 (中文版)

    6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的...

    MySQL 5.1参考手册

    6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    由于文件太大,分成了3部分,当前第1部分,请下载完3个部分,并放在同一目录,否则无法解压! 内容简介 《SQL Server 2008管理员必备指南》按照...15.3 使用备份策略 15.4 创建备份设备 15.5 执行备份 15.5.1 在SQL...

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    由于文件太大,被分为3部分,当前第3部分,请下载完总共的3部分,并放在同一目录,否则无解压。 内容简介 《SQL Server 2008管理员必备指南》按照...15.3 使用备份策略 15.4 创建备份设备 15.5 执行备份 15.5.1 在...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    由于文件太大,被分成3部分,当前第2部分,请下载完三部分,并放在同一目录,否则无法解压。 内容简介 《SQL Server 2008管理员必备指南》按照...15.3 使用备份策略 15.4 创建备份设备 15.5 执行备份 15.5.1 在SQL ...

    mysql官方中文参考手册

    6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的...

    MySQL 5.1参考手册中文版

    6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器...

    MySQL5.1参考手册官方简体中文版

    6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的...

    mysql5.1中文手册

    不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 ...

    SQL.Server.2008管理员必备指南.part2.rar(2/4)

     进行自动化维护和实现基于策略的管理  监视服务器活动并优化性能  管理日志传送和数据库镜像  执行备份和还原  《微软技术丛书》包括以下几个子系列  从入门到精通  适舍新手程序员的实用教程  侧重于基础...

    SQL.Server.2008管理员必备指南.part1.rar(1/4)

     进行自动化维护和实现基于策略的管理  监视服务器活动并优化性能  管理日志传送和数据库镜像  执行备份和还原  《微软技术丛书》包括以下几个子系列  从入门到精通  适舍新手程序员的实用教程  侧重于基础...

Global site tag (gtag.js) - Google Analytics