关于oracle用户下连接为LOCAL=NO的进程解释

文章转自:http://blog.csdn.net/tianlesoftware/article/details/5675404

1. 先看2个命令执行的结果:

[oracle@hfcc-svr-newccsdb1 ~]$ ps -ef | less

UID        PID  PPID  C STIME TTY          TIME CMD

oracle     469     1  0 May28 ?        00:00:05 oraclenewccs (LOCAL=NO)

oracle     495     1  1 May28 ?        05:57:23 oraclenewccs (LOCAL=NO)

oracle     863     1  1 May28 ?        05:30:25 oraclenewccs (LOCAL=NO)

oracle    1209     1  0 May28 ?        01:19:29 oraclenewccs (LOCAL=NO)

oracle    1479     1  0 May28 ?        01:30:50 oraclenewccs (LOCAL=NO)

oracle    1583     1  0 May28 ?        01:32:50 oraclenewccs (LOCAL=NO)

oracle    2234     1  0 May28 ?        00:16:05 oraclenewccs (LOCAL=NO)

oracle    2285     1  0 May28 ?        00:17:24 oraclenewccs (LOCAL=NO)

oracle    2479     1  0 May28 ?        00:20:57 oraclenewccs (LOCAL=NO)

oracle    2891     1  0 May28 ?        00:03:55 oraclenewccs (LOCAL=NO)

oracle    3213     1  0 May28 ?        00:02:55 oraclenewccs (LOCAL=NO)

oracle    3447     1  0 May28 ?        00:03:58 oraclenewccs (LOCAL=NO)

oracle    3460     1  0 May28 ?        00:00:23 oraclenewccs (LOCAL=NO)

[oracle@hfcc-svr-newccsdb1 ~]$ ps -aux | less

USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND

oracle     469  0.0  0.4 10759972 320408 ?   Ss   May28   0:05 oraclenewccs (LOCAL=NO)

oracle     495  1.2 10.1 10762344 7505684 ?  Rs   May28 356:58 oraclenewccs (LOCAL=NO)

oracle     863  1.1 10.0 10762344 7455964 ?  Ss   May28 330:21 oraclenewccs (LOCAL=NO)

oracle    1209  0.2  7.3 10762216 5485856 ?  Ss   May28  79:28 oraclenewccs (LOCAL=NO)

oracle    1479  0.3  7.5 10762344 5595556 ?  Ss   May28  90:49 oraclenewccs (LOCAL=NO)

oracle    1583  0.3  7.6 10761216 5679140 ?  Ss   May28  92:50 oraclenewccs (LOCAL=NO)

oracle    2234  0.0  5.9 10762212 4398364 ?  Ss   May28  16:05 oraclenewccs (LOCAL=NO)

oracle    2285  0.0  5.8 10762220 4313736 ?  Ss   May28  17:24 oraclenewccs (LOCAL=NO)

oracle    2479  0.0  5.9 10761176 4436164 ?  Ss   May28  20:57 oraclenewccs (LOCAL=NO)

 

注:1. ps -aux 和 ps -ef 的区别是显示的选项不一样,aux 能显示进程占用的 内存 和CPU. 

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

 

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

oracle   16007 16006  0 10: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/SQL developer 或者 Toad 工具连上服务器后,在执行sql 的过程中死掉了,我们只能结束程序,亦或者我们直接kill 掉toad 的进程,那么在服务器上并不会释放之间建立的监听进程。 没有释放的相关进程还是继续占用系统资源。 所以对于这些已经死掉的进程,我们可以kill 掉这些进程: kill -9 PID。不过在生产库上要慎用,要确认进程是死掉的才可以kill。 

 

-bash-3.2$ ps -ef|grep oracleorcl

oracle    2321     1  0 20:56 ?        00:00:00 oracleorcl (LOCAL=NO)

oracle    2391     1  0 21:02 ?        00:00:00 oracleorcl (LOCAL=NO)

oracle    2442     1  0 21:06 ?        00:00:00 oracleorcl (LOCAL=NO)

oracle    2534  2416  0 21:09 pts/1    00:00:00 grep oracleorcl

-bash-3.2$ kill -9 2321

-bash-3.2$ ps -ef|grep oracleorcl

oracle    2391     1  0 21:02 ?        00:00:00 oracleorcl (LOCAL=NO)

oracle    2544  2416  0 21:10 pts/1    00:00:00 grep oracleorcl

下面脚本是kill 掉连接时间超过30分钟的网络连接的进程。 把脚本放在crontab里,定时执行即可。

kill.sh: 
 ps -e -o pid -o etime -o args|grep LOCAL=NO>/tmp/tmpfile 
 cat /tmp/tmpfile|while read LINE 
 do 
 TIME=`echo $LINE|awk '{print $2}'` 
 TIME=`echo $TIME|awk -F: '{print $1}'` 
 if [ $TIME -gt 30 ] 
 then 
 echo $LINE >> /tmp/tmpflie2 
 fi 
 done 
 cut -c 1-5 /tmp/tmpfile2 |xargs -t -n1 kill -9 
 rm -f /tmp/tmpfile 
 rm -f /tmp/tmpfile2 

时间: 2024-08-29 07:35:28

关于oracle用户下连接为LOCAL=NO的进程解释的相关文章

Linux下和Windows下创建Oracle数据库,表空间,Oracle用户

通过SSH工具或是XShell工具进入远程Linux下. 其中,通过SSH工具登录的界面如下: 其中Host Name是远程服务器的ip地址.User Name是服务器的一个用户名,端口号默认22,Connect进去后可以填写服务器的密码. 通过XShell工具登录的界面如下: 点击上面的New按钮,填写HOST主机地址,即服务器的IP地址,点击OK即可.   输入命令:    cd /    到根目录下 启动tomcat usr/local/tomcat/bin/startup.sh(这是to

数据库服务器-什么情况下会出现oracle数据库自身连接超出最大连接数 ----急急急!!!

问题描述 什么情况下会出现oracle数据库自身连接超出最大连接数 ----急急急!!! 5C 这些天一直被这个问题困扰,oracle连接超出最大连接数.原以为是tomcat程序还有没释放的连接,但是经过追踪审查之后发现不是程序的问题,而是数据库本身连接数异常多.下面是我操作过程. 重启oracle服务后,登陆sqlplus.SQL> select count(*) from v$session;SQL> show parameter processes;SQL> show parame

dba-oracle命令行下只有sys用户可以连接

问题描述 oracle命令行下只有sys用户可以连接 环境:oracle11g win10 命令行下可以连接sqlplus sys/1@orcl as sysdba 但是其他用户无法连接ORA-01031: insufficient privileges 或者错误01034 但是通过plsql用户均可连接,权限为dba. 密码文件有 解决方案 http://www.cnblogs.com/qiangqiang/archive/2010/10/16/1852962.html 解决方案二: orac

在命令行下进行Oracle用户解锁的语句_oracle

在DBA的日常工作中,经常遇到为Oracle用户解锁的操作:这篇文章给出在命令行下进行Oracle用户解锁的操作方法,通过几条简单的解锁语句就能完成此项工作.下面是具体的过程: 默认的scott用户是被锁定的,先解锁就能登陆上了. 使用下面的语句解锁scott: 复制代码 代码如下: alter user scott account unlock; 解锁之后可能会要求你该密码: 复制代码 代码如下: alter user scott identified by tiger; 再登陆: 复制代码

Windows下PHP4.0与Oracle 8的连接设置

oracle|window PHP在Linux/Unix下连接oracle8是很容易的事,但在windows平台下实在不易,本人经过长久的摸索才找到可靠的方法,不敢独享, 现公布出来以飨大家. 笔者使用的开发环境: windows 98 第二版 php4.04pl1 apache 1.3.14 window版 oracle 8.05客户端 PHP以CGI方式安装完毕测试成功后.以以下代码测试 <?php $conn = OCILogon("cinmsiii","cinm

浅谈Windows下 PHP4.0与oracle 8的连接设置

oracle|window PHP在Linux/Unix下连接oracle8是很容易的事,但在windows平台下实在不易,本人经过长久的摸索才找到可靠的方法,不敢独享, 现公布出来以飨大家. 笔者使用的开发环境: windows 98 第二版 php4.04pl1 apache 1.3.14 window版 oracle 8.05客户端 PHP以CGI方式安装完毕测试成功后.以以下代码测试 <?php $conn = OCILogon("cinmsiii","cinm

c++-win32 C++应用程序放到Server08下连接oracle报错

问题描述 win32 C++应用程序放到Server08下连接oracle报错 程序是C++的,连接本地Oracle数据库,方法为 CoInitialize(NULL);ConnectionPtr conn; try{ conn.CreateInstance(_uuidof(Connection)); conn->Open("Provider=OraOLEDB.Oracle.1;Data Source=ORACLE;Persist Security Info=false;Password=

spool命令、创建一个表,创建并且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站

  1.spool命令 spool "D:\test.txt" spool off SQL> host cls 2.创建一个表 SQL> --条件(1):有创建表的权限,(2):有表空间 SQL> desc t4;  名称                                      是否为空? 类型  ----------------------------------------- -------- ----------------------

oracle用户x下有一表a,怎么赋予表a里面的用户b对这个表的管理权限

问题描述 oracle用户x下有一表a,怎么赋予表a里面的用户b对这个表的管理权限 oracle用户x下有一表a,怎么赋予表a里面的用户b对这个表的管理权限?我是用x登录的,现在想给表a里面的用户b,赋予管理这个表的权限?表下面的其他用户建的表b是不是也有管理权限?怎么写sql语句啊?求救 解决方案 oracle将A用户下的所有表的查看权限赋予给B用户