`
swvip
  • 浏览: 154463 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转:两条Linux命令彻底杀死Oracle

阅读更多

今天编写的两条极具杀伤力的命令,它可以瞬间将Oracle杀死在无形之中。后面我将给出简单注释并展示一下它的威力。
$ ps -ef |grep $ORACLE_SID|grep -v grep|awk '{print $2}' | xargs kill -9
$ ipcs -m | grep oracle | awk '{print $2}' | xargs ipcrm shm

这两条命令的来由:
今天处理了三起Oracle数据库无故无法登录的问题,无论你采取什么手段都无法登陆到Oracle的SQL*PLus中,更谈不上故障排查了。
这种情况下有两种选择,第一种选择是经过一个较长的时间来排查故障原因,另外一种方法是不惜一切代价启动数据库以便尽快恢复生产。

如果是测试实验环境可以使用第一种方法来完成,对于排查问题的经验积累是有意的。
如果是生产环境,减少停机时间是最最至上的原则,所以我们只有不惜一切代价让数据库尽快恢复使用。

对于尽快恢复生产的方法主要也有两种。
第一种不惜代价的方法是重启服务器主机,彻底释放一切资源,重新来过,这种方法是有效的,不过停机时间还是有点长,而且技术含量比较低,所以不是很推荐使用这种超级“简单粗暴”的方法。
第二种方法就是我将要给大家展示的方法。

1.第一步:使用Linux的kill命令杀死所有与oracle有关的进程。
1)查询到与ORACLE_SID相关的oracle进程
$ ps -ef |grep $ORACLE_SID
oracle    7776     1  0 22:51 ?        00:00:00 ora_pmon_ora10g
oracle    7778     1  0 22:51 ?        00:00:00 ora_psp0_ora10g
oracle    7780     1  0 22:51 ?        00:00:00 ora_mman_ora10g
oracle    7782     1  0 22:51 ?        00:00:00 ora_dbw0_ora10g
oracle    7784     1  0 22:51 ?        00:00:00 ora_dbw1_ora10g
oracle    7786     1  0 22:51 ?        00:00:00 ora_lgwr_ora10g
oracle    7788     1  0 22:51 ?        00:00:00 ora_ckpt_ora10g
oracle    7790     1  0 22:51 ?        00:00:00 ora_smon_ora10g
oracle    7792     1  0 22:51 ?        00:00:00 ora_reco_ora10g
oracle    7794     1  0 22:51 ?        00:00:00 ora_cjq0_ora10g
oracle    7796     1  0 22:51 ?        00:00:00 ora_mmon_ora10g
oracle    7798     1  0 22:51 ?        00:00:00 ora_mmnl_ora10g
oracle    7832     1  0 22:51 ?        00:00:00 ora_arc0_ora10g
oracle    7834     1  0 22:51 ?        00:00:00 ora_arc1_ora10g
oracle    7836     1  0 22:51 ?        00:00:00 ora_qmnc_ora10g
oracle    7842     1  0 22:51 ?        00:00:00 ora_q000_ora10g
oracle    7847     1  0 22:52 ?        00:00:00 ora_q001_ora10g
oracle    7951  7592  0 23:11 pts/2    00:00:00 grep ora10g

2)去除掉包含grep命令本身的记录
$ ps -ef |grep $ORACLE_SID |grep -v grep
oracle    7776     1  0 22:51 ?        00:00:00 ora_pmon_ora10g
oracle    7778     1  0 22:51 ?        00:00:00 ora_psp0_ora10g
oracle    7780     1  0 22:51 ?        00:00:00 ora_mman_ora10g
oracle    7782     1  0 22:51 ?        00:00:00 ora_dbw0_ora10g
oracle    7784     1  0 22:51 ?        00:00:00 ora_dbw1_ora10g
oracle    7786     1  0 22:51 ?        00:00:00 ora_lgwr_ora10g
oracle    7788     1  0 22:51 ?        00:00:00 ora_ckpt_ora10g
oracle    7790     1  0 22:51 ?        00:00:00 ora_smon_ora10g
oracle    7792     1  0 22:51 ?        00:00:00 ora_reco_ora10g
oracle    7794     1  0 22:51 ?        00:00:00 ora_cjq0_ora10g
oracle    7796     1  0 22:51 ?        00:00:00 ora_mmon_ora10g
oracle    7798     1  0 22:51 ?        00:00:00 ora_mmnl_ora10g
oracle    7832     1  0 22:51 ?        00:00:00 ora_arc0_ora10g
oracle    7834     1  0 22:51 ?        00:00:00 ora_arc1_ora10g
oracle    7836     1  0 22:51 ?        00:00:00 ora_qmnc_ora10g
oracle    7842     1  0 22:51 ?        00:00:00 ora_q000_ora10g
oracle    7847     1  0 22:52 ?        00:00:00 ora_q001_ora10g

3)使用awk命令得到我们关心的进程号
$ ps -ef |grep $ORACLE_SID |grep -v grep|awk '{print $2}'
7776
7778
7780
7782
7784
7786
7788
7790
7792
7794
7796
7798
7832
7834
7836
7842
7847

4)万事俱备,我们最后使用kill命令将oracle的进程杀死,因此得到了下面完整的命令
$ ps -ef |grep $ORACLE_SID |grep -v grep|awk '{print $2}' | xargs kill -9

2.第二步:使用Linux的ipcs和ipcsrm命令释放oracle占用的共享内存。
1)使用ipcs命令查看系统中共享内存使用情况
$ ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 32768      root      644        72         2          dest
0x00000000 65537      root      644        16384      2          dest
0x00000000 98306      root      644        280        2          dest
0x00000000 131075     root      644        790528     2          dest
0x00000000 163844     root      644        790528     2          dest
0x00000000 196613     root      644        790528     2          dest
0x00000000 327689     oracle    644        790528     2          dest
0x00000000 360458     oracle    644        790528     2          dest
0x00000000 393227     oracle    644        790528     2          dest
0xecc5fba0 786447     oracle    640        5370806272 30

2)使用grep命令过滤后得到与oracle相关的内容
$ ipcs -m | grep oracle
0x00000000 327689     oracle    644        790528     2          dest
0x00000000 360458     oracle    644        790528     2          dest
0x00000000 393227     oracle    644        790528     2          dest
0xecc5fba0 786447     oracle    640        5370806272 31

2)使用awk命令获得上面我们关心的shmid字段内容
$ $ ipcs -m | grep oracle | awk '{print $2}'
327689
360458
393227
786447

3)最后使用ipcsrm命令释放共享内存
$ ipcs -m | grep oracle | awk '{print $2}' | xargs ipcrm shm
resource(s) deleted

再次查看一下,此时共享内存已经被释放。
$ ipcs -m | grep oracle
0x00000000 327689     oracle    644        790528     2          dest
0x00000000 360458     oracle    644        790528     2          dest
0x00000000 393227     oracle    644        790528     2          dest
0x00000000 786447     oracle    640        5370806272 31         dest

3.此时,我们便可以登录到数据库,最后启动数据库恢复生产。

4.小结
这种方法相对也是比较“粗暴”的。不过在危难之时还是可以派上用场。
重点强调:
手工杀掉oracle进程和手工释放共享内存是非常危险的,不到万不得已,千万不要使用;
这里我给出的两条极具杀伤力的命令,请不要轻易尝试。

Good luck.

-- The End --

分享到:
评论

相关推荐

    linux下编译oracle驱动qoci

    本文详细介绍了在Linux环境下编译Oracle驱动QOCI的完整流程,包括环境准备、oci源码编辑、库文件复制、编译命令执行以及最终的测试验证。通过这些步骤,可以有效地实现在Qt中访问Oracle数据库的功能。这对于那些希望...

    linux下oracle启动关闭及常用命令

    ### Linux 下 Oracle 启动关闭及常用命令 #### 一、概述 在 Linux 系统中管理和操作 Oracle 数据库是一项常见的任务。对于数据库管理员(DBA)而言,掌握如何在 Linux 环境下启动、关闭 Oracle 数据库以及常用的...

    linux oracle imp exp 执行命令安装

    这两个命令是Oracle Data Pump的一部分,用于将数据从一个数据库迁移到另一个数据库,或者备份和恢复数据。 1. **Oracle Data Pump**: Oracle Data Pump是一种高效的数据迁移工具,它比传统的Export和Import更快...

    Oracle Linux更新Yum源

    "Oracle Linux更新Yum源详解" Oracle Linux 是一个基于 Red Hat Enterprise Linux 源代码的操作系统,具有高性能、可靠性和安全性。Yum(Yellow dog Updater, Modified)是一个命令行的包管理器,用于管理 RPM ...

    如何解决Oracle杀死死锁进程

    解决 Oracle 杀死死锁进程的方法可以分为两步:首先,查找被锁定的表和锁定的会话,然后杀死锁定的会话和操作系统进程。 在解决死锁问题时,需要注意以下几点: * 需要拥有足够的权限来杀死锁定的会话和操作系统...

    linux-下命令安装Oracle

    linux-下命令安装Oracle.简洁易懂。。。。。。。。。。。。

    快速杀死oracle的session

    - 然后在Unix/Linux命令行中使用`kill`命令杀死该进程。 ```bash kill 目标SPID ``` - 最后执行`shutdown immediate`命令,完成数据库的快速关闭。 2. **Windows平台:** - 同样,首先获取目标Session的SPID...

    linux oracle重新启动

    ### Linux环境下Oracle数据库重启知识点详解 #### 一、概述 在Linux环境中,Oracle数据库的管理是常见的运维操作之一。为了确保系统的稳定运行,有时需要重启Oracle数据库及其监听器。本文将详细介绍在Linux环境下...

    Linux下Oracle Client的安装

    使用 `uname -i` 命令检测 Linux 服务器系统位数,以确定是否需要安装 32 位或 64 位的 Oracle 客户端安装包。 3. 安装 Oracle10G 客户端 可以使用 yum 或 rpm 命令来安装 Oracle10G 客户端。 四、 使用 XManager...

    oracle安装教程之Linux更换yum源

    "Oracle安装教程之Linux更换yum源" 在 Linux 环境中安装 Oracle 数据库之前,需要更换 yum 源,以便安装 Oracle 所需的依赖项。本文将指导您如何更换 yum 源,包括查看原有 yum 源、下载阿里云 yum 源、备份原有...

    linux上安装oracle11g详细步骤

    Linux 上安装 Oracle 11g 详细步骤 本文将指导您在 Linux 操作系统上安装 Oracle 11g 数据库。安装过程可能会很繁琐,但按照以下步骤,您可以顺利完成安装。 安装环境 * 操作系统:Red Hat Linux 5.4 (32 位) * ...

    Linux下oracle启动和监听

    Linux 下 Oracle 启动和监听 Oracle 数据库是重量级的,其管理非常复杂,将其在 Linux 平台上的启动和关闭步骤整理如下: 一、安装和配置 Oracle 在 Linux 平台上安装 Oracle 之后,需要创建 Oracle 系统用户,并...

    Linux下Oracle 12c的安全卸载

    ### Linux下Oracle 12c的安全卸载 在企业级应用环境中,Oracle数据库因其稳定性、安全性及高效性而被广泛采用。然而,在某些情况下,可能需要卸载Oracle 12c来解决安装过程中出现的问题或者进行版本升级。本文将...

    Linux下Oracle如何导入导出dmp文件详解

    对于本机安装了oracle 客户端,下述命令都可以在 dos 执行,当然 dmp 文件导出在本地。 但在实际研发时,没人愿意在本机上安装庞大的 oracle 软件,这时你需要使用 Xshell/puTTY.. 远程工具连接到 Linux 进行操作,...

    Oracle专用Linux操作系统-OracleLinux-R6-U5-Server-x86_64

    Oracle Linux是Oracle公司推出的一款基于Linux内核的操作系统,它主要设计用于支持Oracle数据库、中间件和其他企业级应用。Oracle Linux R6 U5 (Update 5) 是该操作系统的第六个主要版本的第五次更新,提供了对x86_...

    linux和Oracle常用命令linux环境配置ORACLE常用命令

    linux,linux和Oracle常用命令linux环境配置ORACLE常用命令

    linux下删除oracle

    Linux 下删除 Oracle 11g 数据库的步骤和命令 在 Linux 操作系统中删除 Oracle 11g 数据库需要按照一定的步骤和命令进行操作,以确保数据库的完全卸载和删除。下面是详细的步骤和命令: 步骤 1: 停止数据库 使用 ...

    oracle杀进程

    Oracle 杀进程是数据库管理员在日常工作中经常遇到的问题,特别是在数据库性能不佳或会话被锁死的情况下。因此,了解如何杀掉 Oracle 会话非常重要。本文将从 Oracle 数据库系统和操作系统两个方面介绍如何杀掉会话...

    Linux安装Oracle19C详细步骤

    Linux安装Oracle19C详细步骤 在这篇文章中,我们将详细介绍如何在 CentOS 7 和 Red Hat 7 系统中安装 Oracle 19C。整个安装过程可以分为六个步骤:系统要求和准备、关闭防火墙、图形桌面、selinux、修改静态 IP、...

    linux下远程定时备份oracle数据库

    在Linux环境下,远程定时备份Oracle数据库是一项至关重要的任务,它能确保数据的安全性和业务的连续性。Oracle数据库作为企业级的数据库管理系统,其备份与恢复策略必须严谨且可靠。以下将详细阐述如何在没有安装...

Global site tag (gtag.js) - Google Analytics