• Oracle进程中的 LOCAL=NO 和 LOCAL=YES


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

    oracle 16007 16006 0 10:27 ? 00:00:00

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

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

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

     现在就有一个问题,假如我们在客户端通过PL/SQL developer 或者 Toad 工具连上服务器后,在执行sql 的过程中死掉了,我们只能结束程序,亦或者我们直接kill 掉toad 的进程,那么在服务器上并不会释放之间建立的监听进程。 没有释放的相关进程还是继续占用系统资源。 所以对于这些已经死掉的进程,我们可以kill 掉这些进程: kill -9 PID。不过在生产库上要慎用,要确认进程是死掉的才可以kill。

    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 

  • 相关阅读:
    网卡中断负载均衡
    【Linux】tcp缓冲区大小的默认值、最大值
    ssh RSA key变化后处理
    drop_caches控制page cache
    Linux的page cache使用情况/命中率查看和操控
    如何在vscode中调试vue-cli项目?
    vue-cli || webpack 打包的时候css里面写的背景图片的路径出错问题
    charles 的安装和手机配置 (我用的win7系统 ,和 iphone8 的配置)
    如何结合插件 vue-lazyload 来简单实现图片懒加载?
    cordova 和 java ( JDK ) 和 android-studio (SDK)的初始安装和配置
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/3780860.html
Copyright © 2020-2023  润新知