kill掉所有的Oracle远程连接进程或ORACLE进程
2013-05-08 15:37
190 查看
1、KILL所有远程连接
有些时候产线DB进行保养,限制的时间比较短,而通常这个时候又有大量用户远程连接的情况下,通过shutdown immediate来关闭数据库,需要的时间比较长,虽然通过shutdown abort来关闭数据库比较快速,但是容易出现数据库起不来的情况,所以要快速关闭oracle数据库,就需要人工kill掉远程连接,从网上查资料得到这个方法比较方便快速,那就是可以用一条命令Kill掉它们。
所有含有关键字“LOCAL=NO”的进程,这是Oracle数据库中远程连接进程的共同特点,因此通过以下命令可以kill掉所有的进程
ps -ef |grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9
管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。下面说说用管道符联接起来的几个命令:
ps -ef|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9
管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。下面说说用管道符联接起来的几个命令:
“ps -ef”是Red Hat 里查看所有进程的命令。这时检索出的进程将作为下一条命令“grep LOCAL=NO”的输入。
“grep LOCAL=NO”的输出结果是,所有含有关键字“LOCAL=NO”的进程,这是Oracle数据库中远程连接进程的共同特点。
“grep -v grep”是在列出的进程中去除含有关键字“grep”的进程。
“cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
“xargs kill -9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -9”命令的参数,并执行该命令。“kill -9”会强行杀掉指定进程,这样就成功清除了oracle的所有远程连接进程。其它类似的任务,只需要修改“grep LOCAL=NO”中的关键字部分就可以了。
2、杀掉ORACLE所有进程
ps -ef|grep ora|awk '{print $2}'|xargs kill -9
在solaris下如何kill oracle所有进程
如果数据库的连接数太多,访问起数据库来会非常的慢,严重影响程序的效率,在不想重新启动数据库实例的情况只可以杀死连接oracle的连接进程如下代码所示:
ps -ef | grep "ora" | grep -v grep | awk
'{print $2}' | while read ORA_PID
do
kill -9 $ORA_PID
done
补充:
3、kill -9 杀掉oracle所有进程却不能启动和连接数据库的解决办法!
通过sqlplus "/as sysdba"登录信息我们可以知道,sqlplus认为oracle数据库并没有关闭。
oracle的进程都不存在了,但sqlplus为什么认为oracle没有关闭呢?它是根据什么来判断的?
查看此时的共享内存段情况
[oracle@rep ~]$ ipcs -as
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x91c11414 491531 oracle 640 142606336 10
------ Semaphore Arrays --------
key semid owner perms nsems
0xeddca300 360448 oracle 640 154
------ Message Queues --------
key msqid owner perms used-bytes messages
从上面的信息可以看出,oracle之前占用的共享内存段和信号段都还在,而sqlplus是根据这些信息来判断数据库是否关闭的。
我们虽然kill了oracle的进程,但是并没有清除其对应的共享内存段和信号段。
原因找到的,下面就是清除共享内存段和信号段了。
清除共享内存段:
要清除oracle共享内存段,必须保证没有任何连接连接到oracle数据库上,否则清除共享内存段会失败。
我们用暴力方法强制杀死连接到oracle的进程:
[root@rep ~]# ps -ef|grep ora|awk '{print $2}'|xargs kill -9
[root@rep ~]# su - oracle
[oracle@rep ~]$ ipcrm -m 491531
清除信号段:
[oracle@rep ~]$ ipcrm -s 360448
查看此时共享内存等信息:
[oracle@rep ~]$ ipcs -as
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
从上面信息看到,共享内存段和信号段已经被清除。
5、启动oracle
清除完信号段后,我们再用sys登录数据库,就会发现,sqlplus已经认为数据库是关闭的了。
此时我们可以正常启动数据库:
[oracle@rep ~]$ sqlplus "/as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on D??úáù 7?? 28 14:17:46 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to an idle instance.
idle> startup
ORACLE instance started.
Total System Global Area 135337420 bytes
Fixed Size 452044 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
其实这种情况下,我们只需要清除信号段就可以正常启动数据库,但为了更彻底一点,我们选择了把共享内存也一并清除。
一般遇到这种情况有两种解决方法:
1、直接重启OS
2、清除共享内存和信号量
最后简单总结一下:
1、oracle进程终止不代表数据库关闭
2、oracle进程异常中止时要及时清除对应的共享内存段和信号段
3、sqlplus是根据信号段来判断oracle数据库是否是关闭的
有些时候产线DB进行保养,限制的时间比较短,而通常这个时候又有大量用户远程连接的情况下,通过shutdown immediate来关闭数据库,需要的时间比较长,虽然通过shutdown abort来关闭数据库比较快速,但是容易出现数据库起不来的情况,所以要快速关闭oracle数据库,就需要人工kill掉远程连接,从网上查资料得到这个方法比较方便快速,那就是可以用一条命令Kill掉它们。
所有含有关键字“LOCAL=NO”的进程,这是Oracle数据库中远程连接进程的共同特点,因此通过以下命令可以kill掉所有的进程
ps -ef |grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9
管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。下面说说用管道符联接起来的几个命令:
ps -ef|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9
管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。下面说说用管道符联接起来的几个命令:
“ps -ef”是Red Hat 里查看所有进程的命令。这时检索出的进程将作为下一条命令“grep LOCAL=NO”的输入。
“grep LOCAL=NO”的输出结果是,所有含有关键字“LOCAL=NO”的进程,这是Oracle数据库中远程连接进程的共同特点。
“grep -v grep”是在列出的进程中去除含有关键字“grep”的进程。
“cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
“xargs kill -9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -9”命令的参数,并执行该命令。“kill -9”会强行杀掉指定进程,这样就成功清除了oracle的所有远程连接进程。其它类似的任务,只需要修改“grep LOCAL=NO”中的关键字部分就可以了。
2、杀掉ORACLE所有进程
ps -ef|grep ora|awk '{print $2}'|xargs kill -9
在solaris下如何kill oracle所有进程
如果数据库的连接数太多,访问起数据库来会非常的慢,严重影响程序的效率,在不想重新启动数据库实例的情况只可以杀死连接oracle的连接进程如下代码所示:
ps -ef | grep "ora" | grep -v grep | awk
'{print $2}' | while read ORA_PID
do
kill -9 $ORA_PID
done
补充:
3、kill -9 杀掉oracle所有进程却不能启动和连接数据库的解决办法!
通过sqlplus "/as sysdba"登录信息我们可以知道,sqlplus认为oracle数据库并没有关闭。
oracle的进程都不存在了,但sqlplus为什么认为oracle没有关闭呢?它是根据什么来判断的?
查看此时的共享内存段情况
[oracle@rep ~]$ ipcs -as
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x91c11414 491531 oracle 640 142606336 10
------ Semaphore Arrays --------
key semid owner perms nsems
0xeddca300 360448 oracle 640 154
------ Message Queues --------
key msqid owner perms used-bytes messages
从上面的信息可以看出,oracle之前占用的共享内存段和信号段都还在,而sqlplus是根据这些信息来判断数据库是否关闭的。
我们虽然kill了oracle的进程,但是并没有清除其对应的共享内存段和信号段。
原因找到的,下面就是清除共享内存段和信号段了。
清除共享内存段:
要清除oracle共享内存段,必须保证没有任何连接连接到oracle数据库上,否则清除共享内存段会失败。
我们用暴力方法强制杀死连接到oracle的进程:
[root@rep ~]# ps -ef|grep ora|awk '{print $2}'|xargs kill -9
[root@rep ~]# su - oracle
[oracle@rep ~]$ ipcrm -m 491531
清除信号段:
[oracle@rep ~]$ ipcrm -s 360448
查看此时共享内存等信息:
[oracle@rep ~]$ ipcs -as
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
------ Semaphore Arrays --------
key semid owner perms nsems
------ Message Queues --------
key msqid owner perms used-bytes messages
从上面信息看到,共享内存段和信号段已经被清除。
5、启动oracle
清除完信号段后,我们再用sys登录数据库,就会发现,sqlplus已经认为数据库是关闭的了。
此时我们可以正常启动数据库:
[oracle@rep ~]$ sqlplus "/as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on D??úáù 7?? 28 14:17:46 2007
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to an idle instance.
idle> startup
ORACLE instance started.
Total System Global Area 135337420 bytes
Fixed Size 452044 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
其实这种情况下,我们只需要清除信号段就可以正常启动数据库,但为了更彻底一点,我们选择了把共享内存也一并清除。
一般遇到这种情况有两种解决方法:
1、直接重启OS
2、清除共享内存和信号量
最后简单总结一下:
1、oracle进程终止不代表数据库关闭
2、oracle进程异常中止时要及时清除对应的共享内存段和信号段
3、sqlplus是根据信号段来判断oracle数据库是否是关闭的
相关文章推荐
- Linux下kill掉所有的Oracle远程连接进程
- Linux下kill掉所有的Oracle远程连接进程
- Linux下kill所有的Oracle远程连接
- kill -9 杀掉oracle所有进程却不能启动和连接数据库的解决办法!
- kill连接某个数据库的所有进程(Ms SqlServer)
- 在solaris下如何kill oracle所有进程
- Oracle Kill 远程连接来的用户
- Linux下kill所有的Oracle远程连接
- 在solaris下如何kill oracle所有进程
- Oracle在RAC环境下远程客户端连接的问题
- 连接oracle数据库出现oracle ORA-12526: TNS: 监听程序: 所有适用例程都处于受限模式
- PL/SQL远程连接ORACLE
- pl/sql连接远程Oracle
- 连接远程oracle和SVN服务器客户端的使用
- Oracle客户端连接远程Oracle服务中文乱码问题
- MySQL中kill掉所有表的进程
- PLSQL Developer连接远程oracle配置
- plsql连接远程oracle(简易客户端)
- Oracle客户端的安装与远程连接配置
- Oracle 11g 客户端连接远程服务器数据库配置