论文部分内容阅读
一般来说,一个Oracle数据库管理员应该做的Oracle数据库系统监控方案如下:
1.每天对Oracle数据库的运行状态、日志文件、备份情况、数据库的空间使用情况、系统资源的使用情况进行检查,发现并解决问题。
2.每周对数据库对象的空间扩展情况、数据的增长情况进行监控,对数据库做健康检查,对数据库对象的状态做检查。
3.每月对表和索引等进行Analyze,检查表空间碎片,寻找数据库性能调整的机会,进行数据库性能调整,提出下一步空间管理计划。对Oracle数据库状态进行一次全面检查。
在系统实际运行中,经常出现由于数据库连接数及编码不规范造成的错误,出现的问题在客户端显示为:“系统忙”、“系统不可用”等错误。
问题分析
上述问题极大妨碍用户正常使用系统,更影响用户正常工作,因此解决这个问题势在必行。重新启动Tomcat,用户便又可以正常登录,但是在系统运行一段时间以后,这个问题便重复出现。
根据出现问题时,显示“系统忙”错误,用户不能正常登录,所以问题的初步原因是由于访问服务器的用户数量太多,即系统拥挤造成的。
为明确问题原因,解决问题从确定用户访问系统的最大连接数目入手,同时监控Ora-cle数据库的会话连接情况。
准备工作
在本地建立一个数据库sid,然后使用Net Configuration Assistant工具配置参数,实现与远程数据库的连接。
缩写监控sql脚本
1.计算Oracle数据库的会话连接数其算法描述如下:Count();While not eof(v$Sesslon)If(Username="compiere")/*username(用户名)为compiere*/{if(machine="yinglong")/*machine(机器名)为yinglong*/
{if(Schemaname="compiere")/*schem-aname(模式名)为compiere*/Count++;/*统计连接数*/ endif}endif}endif}
访问系统的用户数量和数据库的会话连接情况明确为监控对象。
2.计算Oracle数据库的会话死连接数。If(username='complere'){If(machine='yinlong'){If(status='inactive'){/*连接状态为死*/If(scnemaname='compiere'){Count++;}}}}
3.计算Oracle数据库的会话活连接数。If(username='comptere'){
If(machine='yinglong'){
If(status='active')/*连接状态*/{
if(Schemaname='compiere')Count++;}}}
4,系统当前访问用户数量。If(t:on_line=1){ /*表示用户在线;*/If(t.log_time<=sysdate){/*在线时间*/If(t.log_lp<>="){/*用户ip不为空*/Count++}}}
监控数据结果
实验结果:在Oracle的sqlpluswork-sheet中运行脚本语言,得到监控数据(如下表)。
结果分析
数据表明在同一时间Oracle数据库的会话连接大多被死连接所占用。
在服务器重新启动现象发生后,死连接数量大幅度减少,即Tomcat重新启动,Oracle重新启动后,死连接数量就会减少;从表中数据可以看到,随着有用户访问系统,死连接不断产生,而且即使是用户退出系统死连接仍然保留,不会消失;这样死连接越积累越多,除非服务器重新启动,死连接才能释放。
已设定Oracle最大连接数目参数为450个,其中50个为Oracle系统进程所用;假设所有应用此系统的用户全部登录,此时在线的用户数量为100个;此时还余下450-50-100=300个连接,足已不会造成系统忙、系统拥挤的现象。
因此,死连接正是造成系统拥挤、系统忙的根本原因。
问题解决
基于以上的分析,修改程序代码是一种解决方法。此外,单从数据库的角度,可以使用sql命令解决:
命令脚本如下:ALTERSYSTEMKILLSESSION'sid.serlal';
解决方案:
1.通过数据库自动执行计划,在系统静默时间将数据库连接杀死。由于业务系统应用为24*7应用方式,此种方法易造成业务的错误。
2.通过查找中间件服务器和数据库系统日志,以及日常的管理监控,找到存在的编码罅隙并解决。但此种方法由于整个系统庞大,不可能解决所有存在的编码问题。
3.通过基于业务规则和日常的监控数据分析,设定一个安全的阀值,手工进行管理,同时,优化数据库和中间件服务器的配置参数,编写DBA管理软件进行监控,即手工与自动方式结合进行解决的方案,此问题已经在现场得到满意的结果。
(作者单位:沈阳师范大学软件学院)
1.每天对Oracle数据库的运行状态、日志文件、备份情况、数据库的空间使用情况、系统资源的使用情况进行检查,发现并解决问题。
2.每周对数据库对象的空间扩展情况、数据的增长情况进行监控,对数据库做健康检查,对数据库对象的状态做检查。
3.每月对表和索引等进行Analyze,检查表空间碎片,寻找数据库性能调整的机会,进行数据库性能调整,提出下一步空间管理计划。对Oracle数据库状态进行一次全面检查。
在系统实际运行中,经常出现由于数据库连接数及编码不规范造成的错误,出现的问题在客户端显示为:“系统忙”、“系统不可用”等错误。
问题分析
上述问题极大妨碍用户正常使用系统,更影响用户正常工作,因此解决这个问题势在必行。重新启动Tomcat,用户便又可以正常登录,但是在系统运行一段时间以后,这个问题便重复出现。
根据出现问题时,显示“系统忙”错误,用户不能正常登录,所以问题的初步原因是由于访问服务器的用户数量太多,即系统拥挤造成的。
为明确问题原因,解决问题从确定用户访问系统的最大连接数目入手,同时监控Ora-cle数据库的会话连接情况。
准备工作
在本地建立一个数据库sid,然后使用Net Configuration Assistant工具配置参数,实现与远程数据库的连接。
缩写监控sql脚本
1.计算Oracle数据库的会话连接数其算法描述如下:Count();While not eof(v$Sesslon)If(Username="compiere")/*username(用户名)为compiere*/{if(machine="yinglong")/*machine(机器名)为yinglong*/
{if(Schemaname="compiere")/*schem-aname(模式名)为compiere*/Count++;/*统计连接数*/ endif}endif}endif}
访问系统的用户数量和数据库的会话连接情况明确为监控对象。
2.计算Oracle数据库的会话死连接数。If(username='complere'){If(machine='yinlong'){If(status='inactive'){/*连接状态为死*/If(scnemaname='compiere'){Count++;}}}}
3.计算Oracle数据库的会话活连接数。If(username='comptere'){
If(machine='yinglong'){
If(status='active')/*连接状态*/{
if(Schemaname='compiere')Count++;}}}
4,系统当前访问用户数量。If(t:on_line=1){ /*表示用户在线;*/If(t.log_time<=sysdate){/*在线时间*/If(t.log_lp<>="){/*用户ip不为空*/Count++}}}
监控数据结果
实验结果:在Oracle的sqlpluswork-sheet中运行脚本语言,得到监控数据(如下表)。
结果分析
数据表明在同一时间Oracle数据库的会话连接大多被死连接所占用。
在服务器重新启动现象发生后,死连接数量大幅度减少,即Tomcat重新启动,Oracle重新启动后,死连接数量就会减少;从表中数据可以看到,随着有用户访问系统,死连接不断产生,而且即使是用户退出系统死连接仍然保留,不会消失;这样死连接越积累越多,除非服务器重新启动,死连接才能释放。
已设定Oracle最大连接数目参数为450个,其中50个为Oracle系统进程所用;假设所有应用此系统的用户全部登录,此时在线的用户数量为100个;此时还余下450-50-100=300个连接,足已不会造成系统忙、系统拥挤的现象。
因此,死连接正是造成系统拥挤、系统忙的根本原因。
问题解决
基于以上的分析,修改程序代码是一种解决方法。此外,单从数据库的角度,可以使用sql命令解决:
命令脚本如下:ALTERSYSTEMKILLSESSION'sid.serlal';
解决方案:
1.通过数据库自动执行计划,在系统静默时间将数据库连接杀死。由于业务系统应用为24*7应用方式,此种方法易造成业务的错误。
2.通过查找中间件服务器和数据库系统日志,以及日常的管理监控,找到存在的编码罅隙并解决。但此种方法由于整个系统庞大,不可能解决所有存在的编码问题。
3.通过基于业务规则和日常的监控数据分析,设定一个安全的阀值,手工进行管理,同时,优化数据库和中间件服务器的配置参数,编写DBA管理软件进行监控,即手工与自动方式结合进行解决的方案,此问题已经在现场得到满意的结果。
(作者单位:沈阳师范大学软件学院)