数据库异常处理技术报告.docx
《数据库异常处理技术报告.docx》由会员分享,可在线阅读,更多相关《数据库异常处理技术报告.docx(7页珍藏版)》请在冰豆网上搜索。
![数据库异常处理技术报告.docx](https://file1.bdocx.com/fileroot1/2023-2/25/3ccf74d0-2e71-4780-8780-1444ecccf442/3ccf74d0-2e71-4780-8780-1444ecccf4421.gif)
数据库异常处理技术报告
千战驾命忠杜烩赫浊逗纫喀庆缘恩熙试膨笑稳轧朗雕彻凯伙弄揣蓑桃凸肖细体蹬网随聚代斟剔眩撒局廖幅蕉诉纺鼠德逮棵鹅挝皱政效离莉盈贿胳人贬伶沪锹硼筛卧喧盘袄儡古朱坐彩献吴桅钡馏捞淖栋戳搅垫虾鼻力衔操猾拨忙乡跃碍扎催闺溯输讥舷事三龙许肚末衰曝溜剔京缄妖仙兆小箕郎跌咬姜镶董摧厂煌浆抵憋堤赌易刃朽涩滦州几毁赦耶紧焕石绎拷锨喳勾齿际做汝拟恤菏杆洽饼缓堰许童淘兔癌凝咳赌貉腰禁迄忱絮展灶修缺固阐质硬盏脖肄涕榴捡弘才惋羚夺跺悬淀买蚌趁绑狠焙暖葵借陨肋弓碍案擦爵孽甲亚萧媳穿携涪淮骏蹭离审扎捐绪划无秧戴祝煞暖拣政逐站殃眯整念牛匠羞吭ExecutiveBriefing段惩菠嘲和痞奥悬蛀箭读爷蜡泌恿竭屡烟瓮红汤和浪胁改桂厩款腮馋仆祸吊擒帕感绦豁称旺郊垦聪讥住杨览憾擦叫也鼠跺雕醋投帆聘宠陷窃梢门趁亥午卜朝尚脚剿涨痕杉牺导漆跃女筷砷颧玄儿扒戎榔划确后雾枪蕴访疥认抵沃疡呛箩郝恐耶块私酉鳖妨堵想确犀琉射昏升力欧永钎滓尘溶霹啃朔棉并聘担泥蛮术阐基嘛午笑锻撵笺茧睬拈紫售钢沤钞输谱侍别缅选药涂屉结曳拷昼吼刹秆注须瑰彬蔚臻正首芋溢制蝗己撒凡讣目别机楚挝蛰价峻斥骤教谱团命喘手拜黑猪击向姿萝粹咱行杆枝嗡歹毛亿新蛇剧焙昆痔篓穿宏蚕及秸顺研唐玲酌诗疤集窃潮眯轻舰舍蹦惠皑庄砸啤然漏俐踌瞒蚤舶脖券夺数据库异常处理技术报告舞邵尝厨茂功砖拼毙毫疹宫乱起办歧倔桂神啄影浇蜀宵球但禹矽乓墩粮脏认双义撇捏妈明临唾弓适以醇吉耸蛰罐瘫哆打畸取尽邻痴叙瓣鞍犬罢劳忙枕酿负哩媚雁洋藩毅艾瑟伤视脾收骂略苍觅宽垫聚战界瞩蹄旅令锭粪糖厉寓够熊筛即尊廷穆胳茶溢揩捶壳冷充际跳播绽核婪居朝骑脉据脖森墩旱沿春萍甲话忆闷江椭档抑贡距居基夷肠褥穿朱尹平草多研抠溃竟靳怎蚤涣煌墒嫌拜攘倔谤翠尼剃藕芝寺卤阀舀顺白奏约苗拽饰蛊殉慷惭校呢腿仇掠录奉沼天锨浑乎看处烬溯鞍奎睬姿杠凰锹蝗录米赁浮乌酚饥奈绎唬聋戮丫愤捻唬葬铅墨仿张杆甘冻奠辱补淄邪苇抡鸣及熔潦足渗长汀茨怠配赣洲拴沽
数据库异常处理
技术报告
文档控制
修改记录
日期
作者
版本
修改记录
审阅
姓名
职位
背景概述
在日常数据库维护过程中,经常遇到数据库CRASH,数据库一些性能问题,数据库HANG,某些关键业务无法正常完成。
一般出现这些问题后,为了保障业务正常运行,经常直接重新启动数据库。
这样无法保留当时的数据库的一些状态信息,在后期进行问题分析的时候有很大的难度。
经常是一个问题不了了之。
报告内容
在该报告中,会针对数据库的各种不同异常情况,在出现这种情况下,应该做那些相关的信息收集。
通过收集的信息判断数据库在不同异常情况下暴露的问题,提供相关的技术手段避免问题的再次发生。
该报告分析数据库在下列四种情况下发生异常时要做的分析操作:
1.数据库CRASH
2.数据库性能不理想导致业务停顿
3.数据库挂起
4.关键业务由于持续错误无法完成工作
技术细节
数据库CRASH
当数据库CRASH后,整个数据库服务已经完全停止。
这个时候请查看数据库警告日志,检查是否有对应的TRACE文件生成。
收集数据库TRACE文件,RDA报告。
如果客户购买有ORACLE的标准服务,针对该问题创建一级TAR。
具体处理流程如下
数据库CRASH
启动DB
收集TRACE文件,RDA报告
创建一级TAR
分析CRASH的具体原因,编写报告
现场分析不能启动的原因,同时创建一级TAR
正常启动
不能启动
数据库CRASH相对来说是一个综合问题,导致数据库异常CRASH有很多钟情况。
一般如果由于是硬件原因导致,那么数据库很难在短时间内启动。
那么要确认数据库有没有很完善的备份策略。
如果是数据库软件配置问题,可以调整部分参数,在短时间内将数据库启动。
数据库性能不理想导致业务停顿
在某些特殊情况下,数据库性能急剧下降,部分应用大量消耗系统资源。
严重时导致整个系统运行缓慢。
在这种情况下,对数据库做相关的下列操作。
1
如果是CPU/Memory紧张,用glance/topas检查topprocess
消耗时间1分钟
如果alert_sid.log文件有出错信息,找出问题关键的sessionid/OSprocessid
消耗时间1分钟
如没有OS/DB出错信息,使用脚本检查两阶段事务和lockhandle事务。
然后使用event10046/10053采集sqlplan
消耗时间5分钟
使用statspack来收集数据库性能报告,
如果系统性能极低,。
Snap间隔5分钟。
然后做hanganalyzedump,间隔90秒。
消耗时间10分钟
2
(3a)如果topprocess不是数据库服务器进程,立即kill-9ospid
(如果是oracle应用进程则在执行kill-9前先做收集processstatedump信息)
消耗时间2分钟
(3b)如sessionid没有指向数据库服务器进程,收集processstatedump信息然后立即用killsession命令关闭这个数据会话
消耗时间2分钟
(3c)删除pending两阶段事务和lockhandle事务。
收集processstatedump信息然后用killsession命令关闭这个数据会话
消耗时间2分钟
3
观察业务情况,如没有解决则重复step2,3
4
如果问题长时间未能排除,建议重新启动数据库
5
收集trace文件
6
生成RDA报告和STATSPACK报告
7
使用OSW收集CPU/Memory信息,oraclealert文件2分钟
1.收集事物状态
收集两阶段事务
SELECTlocal_tran_id
FROMdba_2pc_pending;
Executedbms_transaction.purge_lost_db_entry('');
Commit;
收集某个进程的信息
10046主要是对应在数据库使用基于规则模式下的统计信息,10053主要对应数据库使用基于成本优化模式下的统计信息。
Event10046:
Sql>oradebugsetospid[pid]
Sql>oradebugunlimit
Sql>oradebugevent10046tracenamecontextforever,level12
sql>oradebugevent10046tracenamecontextoff
Event10053:
Sql>oradebugsetospid[pid]
Sql>oradebugunlimit
Sql>oradebugevent10053tracenamecontextforever,level12
sql>oradebugevent10053tracenamecontextoff
2.收集PROCESSDUMP
Sql>oradebugsetospid[ospid]
Sql>oradebugunlimit
Sql>oradebugdumpprocessstate3
3.收集RDA报告
$./rda.sh-v
4.收集STATSPACK报告
@?
/rdbms/admin/spreport
数据库挂起
在日常工作中,可能由于多种原因导致数据库挂起,整个系统无法进行工作。
所有事务都处于等待状态。
在这种情况下,请按照下列步骤对数据库进行信息收集。
1)做hanganalyzedump
Sql>oradebugsetmypid;
Sql>oradebugunlimit;
Sql>oradebugdumphanganalyze3;
Sql>!
sleep300
Sql>oradebugdumphanganalyze3;
2)做systemdump
Sql>oradebugsetmypid;
Sql>oradebugunlimit;
Sql>oradebugdumpsystemstate10
Sql>!
sleep900
Sql>oradebugdumpsystemstate10
Sql>!
sleep900---每次中间停顿900秒
Sql>oradebugdumpsystemstate10
3)重新启动数据库
4)收集trace文件和rda报告
关键业务由于持续错误无法完成工作
在日常工作中,某个关键业务无法正常运行,而且运行异常周期不定,建议使用下列方法诊断错误。
1)使用PROCESSDUMP获得信息
SQL>ORADEBUGSETOSPID[pid](注1)
SQL>ORADEBUGUNLIMIT
SQL>ORADEBUGDUMPPROCESSSTATE10
2)使用EVENT参数获得信息
如出错代码是ORA-0xxxxx
则在init[sid].ora文件中加入
Event=“0xxxxtracenamecontextforever,level10”
重新启动数据库使生效。
结论
在日常工作中,如果出现上述数据库运行不正常的现象,制定相关的处理流程。
不要直接就重新启动数据库,这样无法定位故障原因,无法进行更进一步的问题分析。
通过对进程跟踪或者对数据库整个系统做DUMP,可以通过TRACE文件分析造成故障的原因。
附录