1.先看2个命令执行的结果:
[oracle@hfcc-svr-newccsdb1~]$ps-ef|less
UIDPIDPPIDCSTIMETTYTIMECMD
oracle46910May28?00:00:05oraclenewccs(LOCAL=NO)
oracle49511May28?05:57:23oraclenewccs(LOCAL=NO)
oracle86311May28?05:30:25oraclenewccs(LOCAL=NO)
oracle120910May28?01:19:29oraclenewccs(LOCAL=NO)
oracle147910May28?01:30:50oraclenewccs(LOCAL=NO)
oracle158310May28?01:32:50oraclenewccs(LOCAL=NO)
oracle223410May28?00:16:05oraclenewccs(LOCAL=NO)
oracle228510May28?00:17:24oraclenewccs(LOCAL=NO)
oracle247910May28?00:20:57oraclenewccs(LOCAL=NO)
oracle289110May28?00:03:55oraclenewccs(LOCAL=NO)
oracle321310May28?00:02:55oraclenewccs(LOCAL=NO)
oracle344710May28?00:03:58oraclenewccs(LOCAL=NO)
oracle346010May28?00:00:23oraclenewccs(LOCAL=NO)
[oracle@hfcc-svr-newccsdb1~]$ps-aux|less
USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND
oracle4690.00.410759972320408?SsMay280:05oraclenewccs(LOCAL=NO)
oracle4951.210.1107623447505684?RsMay28356:58oraclenewccs(LOCAL=NO)
oracle8631.110.0107623447455964?SsMay28330:21oraclenewccs(LOCAL=NO)
oracle12090.27.3107622165485856?SsMay2879:28oraclenewccs(LOCAL=NO)
oracle14790.37.5107623445595556?SsMay2890:49oraclenewccs(LOCAL=NO)
oracle15830.37.6107612165679140?SsMay2892:50oraclenewccs(LOCAL=NO)
oracle22340.05.9107622124398364?SsMay2816:05oraclenewccs(LOCAL=NO)
oracle22850.05.8107622204313736?SsMay2817:24oraclenewccs(LOCAL=NO)
oracle24790.05.9107611764436164?SsMay2820:57oraclenewccs(LOCAL=NO)
注:1.ps-aux和ps-ef的区别是显示的选项不一样,aux能显示进程占用的内存和CPU.
2.Less可以对返回结果上下翻动
2.我们在服务器上用sqlplus连接数据库,在查看进程,会多出一条记录:
oracle1600716006010:27?00:00:00
oraclenewccs(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
通过上面2个示例,我们可以看出区别在LOCAL=NO和LOCAL=YES。
LOCAL=NO:非本地连接,即网络连接。它是通过Listener连接到服务器的。客户端的应用通过客户端的监听向服务器的监听发送请求,服务器的监听接收后,在与数据库连接,执行相关操作,在把结果返回给客户端。这是通过监听的流程。所以在客户端需要配置监听,即配置tnsnames.ora。
LOCAL=YES:本地连接。本地连接不走监听,所以在服务监听没有启动的情况下,通过本地的sqlplus还是可以连上数据库的。
现在就有一个问题,假如我们在客户端通过PL/SQLdeveloper或者Toad工具连上服务器后,在执行sql的过程中死掉了,我们只能结束程序,亦或者我们直接kill掉toad的进程,那么在服务器上并不会释放之间建立的监听进程。没有释放的相关进程还是继续占用系统资源。所以对于这些已经死掉的进程,我们可以kill掉这些进程:kill-9PID。不过在生产库上要慎用,要确认进程是死掉的才可以kill。
-bash-3.2$ps-ef|greporacleorcl
oracle23211020:56?00:00:00oracleorcl(LOCAL=NO)
oracle23911021:02?00:00:00oracleorcl(LOCAL=NO)
oracle24421021:06?00:00:00oracleorcl(LOCAL=NO)
oracle25342416021:09pts/100:00:00greporacleorcl
-bash-3.2$kill-92321
-bash-3.2$ps-ef|greporacleorcl
oracle23911021:02?00:00:00oracleorcl(LOCAL=NO)
oracle25442416021:10pts/100:00:00greporacleorcl
下面脚本是kill掉连接时间超过30分钟的网络连接的进程。把脚本放在crontab里,定时执行即可。
kill.sh:
ps-e-opid-oetime-oargs|grepLOCAL=NO>/tmp/tmpfile
cat/tmp/tmpfile|whilereadLINE
do
TIME=`echo$LINE|awk'{print$2}'`
TIME=`echo$TIME|awk-F:'{print$1}'`
if[$TIME-gt30]
then
echo$LINE>>/tmp/tmpflie2
fi
done
cut-c1-5/tmp/tmpfile2|xargs-t-n1kill-9
rm-f/tmp/tmpfile
rm-f/tmp/tmpfile2
------------------------------------------------------------------------------
Blog:http://blog.csdn.net/tianlesoftware
网上资源:http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1群:62697716(满);DBA2群:62697977