Oracle 服务器 进程中的 LOCAL=NO 和 LOCAL=YES

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-auxps-ef的区别是显示的选项不一样,aux能显示进程占用的内存和CPU.

2.Less可以对返回结果上下翻动

2.我们在服务器上用sqlplus连接数据库,在查看进程,会多出一条记录:

oracle1600716006010:27?00:00:00

oraclenewccs(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

通过上面2个示例,我们可以看出区别在LOCAL=NOLOCAL=YES

LOCAL=NO:非本地连接,即网络连接。它是通过Listener连接到服务器的。客户端的应用通过客户端的监听向服务器的监听发送请求,服务器的监听接收后,在与数据库连接,执行相关操作,在把结果返回给客户端。这是通过监听的流程。所以在客户端需要配置监听,即配置tnsnames.ora

LOCAL=YES本地连接本地连接不走监听,所以在服务监听没有启动的情况下,通过本地的sqlplus还是可以连上数据库的。

现在就有一个问题,假如我们在客户端通过PL/SQLdeveloper或者Toad工具连上服务器后,在执行sql的过程中死掉了,我们只能结束程序,亦或者我们直接killtoad的进程,那么在服务器上并不会释放之间建立的监听进程。没有释放的相关进程还是继续占用系统资源。所以对于这些已经死掉的进程,我们可以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

------------------------------------------------------------------------------

Bloghttp://blog.csdn.net/tianlesoftware

网上资源:http://tianlesoftware.download.csdn.net

相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx

DBA1群:62697716();DBA2群:62697977

<!--EndFragment-->

你可能感兴趣的:(oracle)