不停机处理oracle超过最大processes数故障
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,在做oracle数据库管理的时候,经常会有用户遇到超过最大进程数的错误,表现为新的连接无法登入数据库。一致提示超过最大的process数 。其实这个问题,如果用户是测试环境,好解决。直接关闭数据库或者
千家信息网最后更新 2025年01月20日不停机处理oracle超过最大processes数故障
在做oracle数据库管理的时候,经常会有用户遇到超过最大进程数的错误,表现为新的连接无法登入数据库。一致提示超过最大的process数 。其实这个问题,如果用户是测试环境,好解决。直接关闭数据库或者直接kill掉所有的"LOCAL=NO"的进程。
但是很多情况是,用户无法接受停机,或者kill掉所有的远端连接。基于以上情况,写了如下脚本
#!/usr/bin/perl#write by wulei#get the first parameter$arg1="";chomp($arg1);while($arg1 eq ""){ print "please input your first parameter:"; $arg1=; chomp($arg1); if($arg1 ne ""){ @temp1=`ps -eo lstart,pid,args | grep '$arg1' | grep -v grep`; $process_count=`ps -eo lstart,pid,args | grep '$arg1' | grep -v grep | wc -l`; chomp($process_count); if($process_count eq "0") { $arg1=""; print "we got 0 processes,please retry!\n"; next; } print "We will kill $process_count(count) processes\n"; print "All the processes list below!!!!!!!!!!!!!!!!!\n"; print "#############################################################\n"; print @temp1; } chomp($arg1);}#get the second parameter$arg2="";chomp($arg2);while($arg2 eq ""){print "\n";print "\n";print "############################################################\n";print "#[null] kill all the process we had got #\n";print "#[num ] kill the process start at before sysdate-number #\n";print "if you want exit,enter 'ctrl+c' #\n";print "############################################################\n";print "please input your second parameter:";$arg2= ;chomp($arg2);if($arg2 eq ""){ print "Are you sure,to kill all the process above:[y/n]"; $confirm= ; chomp($confirm); if($confirm eq "Y" or $confirm eq "y") { #kill all the process ,we got it @result=`ps -eo pid,args | grep '$arg1' | grep -v grep`; print "Kill List !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"; print "###################################################################\n"; foreach $result (@result) { @result1=split(/\s+/,$result); chomp($result1[0]); if($result1[0] ne ""){ #`kill -9 '$result1[0]'`; print $result1[0]." ".$result1[1]." ".$result1[2]."\n"; push(@kill_Queue,$result1[0]); } } $killQueueLen=@kill_Queue; print "###################################################################\n"; print "We will kill '$killQueueLen' processes!!\n"; print "Are you sure about kill the processes above?[y/n]"; $yesorno= ; chomp($yesorno); if($yesorno eq "Y" or $yesorno eq "y") { print "###################################################################\n"; foreach $kill_Queue (@kill_Queue) { print $kill_Queue; chomp($kill_Queue); if($kill_Queue ne "") { `kill -9 '$kill_Queue'`; } } } elsif($yesorno eq "N" or $yesorno eq "n") { @kill_Queue=(); $arg2=""; next; } else { print "###################################################################\n"; print "JUEST Y or N!!!!\n"; print "###################################################################\n"; next; } print "OK\n"; exit; } elsif($confirm eq "N" or $confirm eq "n") { exit 0; } else { print "Please input [y/n]:"; next; }}else{ if($arg2 =~ /^[+-]?\d+$/) { @result=`ps -eo lstart,pid,args | grep $arg1 | grep -v grep`; my @kill_Queue=""; print "killed list\n"; print "###################################################################\n"; foreach $result ( @result) { if($result ne "") { @result1 =split(/\s+/,$result); $time_start=$result1[1]." ".$result1[2]." ".$result1[3]." ".$result1[4]; $format_time=`date -d '$time_start' '+%Y/%m/%d %T'`; chomp($format_time); $pro_st_time=`date +%s -d '$format_time'`; $a1=`date`; chomp($a1); chomp($pro_st_time); chomp($kill_time); $cur_time=`date +%s -d '$a1'`; $kill_time=$cur_time-$arg2; if($pro_st_time > $kill_time) { print $result1[5]." ".$result1[6]." ".$result1[7]."\n"; push(@kill_Queue,$result1[5]); } } else { next; }} $killQueueLen=@kill_Queue-1; print "###################################################################\n"; print "We will kill '$killQueueLen' processes!!\n"; print "Are you sure about kill the processes above?[y/n]"; $yesorno= ; chomp($yesorno); if($yesorno eq "Y" or $yesorno eq "y") { foreach $kill_Queue (@kill_Queue) { chomp($kill_Queue); if($kill_Queue ne "") { `kill -9 '$kill_Queue'`; } } } elsif($yesorno eq "N" or $yesorno eq "n") { $arg2=""; next; } }}print "retry";}print "End of the script\n";print "================================================================\n";
脚本的基本功能就是,可以数据要过滤的进程例如"LOCAL=NO",然后获得所有匹配进程的开始时间和进程内容。然后,需要数据要kill的进程是在当前时间点之前多少秒开始的进程。如果输入null的话。就是kill掉所有匹配的进程。如果输入1000的话,就是kill掉所有在过去1000秒钟开始的标记为"LOCAL=NO"的所有的进程。
执行完过程之后,就应该可以连接到数据库中。调整process参数。保证系统正常运行,然后再查询导致此错误的原因。
这样的话,我们就可以尽可能的减少对系统的影响。
当前脚本知识在linux上测试过,没有在其他类unix系统测试。
进程
数据
数据库
就是
用户
系统
脚本
测试
最大
情况
时间
错误
输入
一致
这样的话
内容
功能
原因
参数
尽可能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发感兴趣的研究课题
联想服务器是多少瓦
网络安全选择题题库及答案
农村网络安全宣传简报
风险数据库管理手册
图存储数据库的技术路线图
操作系统属于数据库的应用系统
哪个大学用的数据库这本书
数据库oracle更换密码
数据库源代码管理
小翼商服网络技术有限公司
软件开发模式的影响
网络安全博览会在哪里举办
网络技术中心电话
景东县公安局网络安全宣传
如何编码主数据库
网络安全检查都查什么
因网络安全事件发生什么
dellt320服务器怎么用
耐磨行业服务软件开发
配方软件开发案例
数据库删除主键
政务局网络安全
小米联通无法连接服务器
贝壳找房软件开发工资待遇
spc软件开发经验
chns数据库是多少
江苏通用软件开发销售价格
tcga数据库gepia
宁夏态势平台软件开发