故障012:定时备份作业-6007悬案
- 1. 问题描述
- 2. 解决过程
- 2.1 大胆推想
- 2.2 找规律
- 2.3 尝试换掉AP
- 2.4 检查资源限制
- 2.5 资源放宽SYSDBA
- 3. 精神感悟
DM技术交流QQ群:940124259
1. 问题描述
诡异的现象总是伴随着隐藏的功能被打开,可能耽误你很长时间找原因,可费劲!!
本案例发生很久,题材准备已久,迟迟未准备文字描述,今天专门整理成文,同大家分享曲折的过程。
本次产生的问题是定时备份作业总是执行失败,备份路径下只存在空内容的备份集文件夹名,翻看dm_BAKRES_年月.log日志,错误代码-6007(网络通讯异常),当时挠头想本机发起定时备份,网络流量未流出本网卡,不存在中间网络安全设备的拦截,那么调转焦点到本机,排除本地各种安全软件的可能性,哔哩啪啦,回到数据库本身。
2. 解决过程
2.1 大胆推想
既然定时备份作业徘徊在30分钟执行失败,换个思路,手工执行一次备份或手工调度一次备份任务,效果如何?
实验的结论:手工执行备份和手工调度备份任务,均正常(截图忘了,省略)。暂时陷入死胡同,解决思路再换一下,去日志找线索。
-- 手工执行一次备份
backup database full backupset '/dmdata/dmbak/FSFULL202306'-- 手工调度备份任务
select * from sysjob.sysjobsteps;
call sp_dbms_job_run(jobid);
2.2 找规律
万事万物皆有规律,没找到规律,一般是认知有限,不能发现规律。
从备份日志入手找共性,发现近几次的备份失败出奇的一致,执行半小时左右,程序则中断。
2.3 尝试换掉AP
得了,先换掉AP辅助插件,利用dmserver本身机制来实现联想备份。
call sp_set_para_value(2, 'BAK_USE_AP, 2);
/opt/dmdbms/bin/DmServiceDB1 restart-- 修改下作业调度,再观察备份作业触发,执行半小时也是失败的。
2.4 检查资源限制
结论越来越清晰,只有定时调度备份作业才会失败。该检查下各账户的资源限制情况。
-- 查询用户资源限制项(CPU、内存、读取页数)
SELECTB.NAME AS "用户名",A.CPU_PER_CALL AS "用户的一个请求能够使用的 CPU 时间上限(秒)",A.CPU_PER_SESSION AS "一个会话允许使用的 CPU 时间上限(秒)",A.MEM_SPACE AS "会话占有的私有内存空间上限(MB)",A.READ_PER_CALL AS "每个请求能够读取的数据页数",A.READ_PER_SESSION AS "一个会话能够读取的总数据页数上限",A.INFO1 AS "一个会话连接、访问和操作数据库服务器的时间上限(10分钟)"
FROMSYSRESOURCES A,SYSOBJECTS B
WHEREB.TYPE$ ='UR'AND B.SUBTYPE$='USER'AND B.ID = A.ID;ALTER USER SYSDBA LIMIT CONNECT_TIME UNLIMITED
;
好家伙,SYSDBA账户被设置30分钟的资源访问限制。ok,那我们修改下资源配置,放开它。
2.5 资源放宽SYSDBA
alter user sysdba limit connect_time unlimited;
du -hd1 --time /dmdata/dmbak | sort -t$‘\t’ -k2
3. 精神感悟
这坑爹的备份故障,花了一周的晚上空闲时间排查,本来云环境的存储IO很拉胯,每天顶多测试两次备份,持续到周末晚上十一点,总算找到原因。
然而资源访问限制SYSDBA账户,无辜躺着中枪,根本不会第一时间联想过来。估摸着,某些人手欠,可能是使用管理工具时不小心点到(这种可能30%),
另一种可能是在学习达梦,不了解参数含义,试着修改,没有明显出错,没人在乎,还有一种可能等保测评改了没改回去。