oracle批量清除会话,oracle快速彻底清理kill会话
今天开发反馈说,执行某个程序update的时候hang住,查看了一下是个小表,只有3000多行数据。第一反应是有锁,把该实例的所有session kill后,执行update还是hang住,单独执行了下where条件后面的select很快。于是觉得应该是在2节点上还有lock,于是执行查询:
select * from gv$lock where id1=383105;
SQL> select * from gv$lock where id1=383105;
INST_ID ADDR KADDR SID TYPE ID1 ID2 LMODE REQUEST CTIME BLOCK
-------------- -------- ---------- --------- -------- --------- --------- ---------- -------------- ---------- ----------
2 0000000110AF61B0 0000000110AF6210 1333 TM 383105 0 3 0 6819 2
果然,2节点上还有一个session持有锁。
连接到2节点,执行查询:
SQL> select sid,serial#,osuser from v$session where sid=1333;
SID SERIAL# OSUSER
--------- -------------- ------------------------------
1333 22559 6005821
alter system kill session '1333,22559';
杀了会话后,再查询,发现1333的session还存在:
SQL> select sid,serial#,osuser from v$session where sid=1333;
SID SERIAL# OSUSER
--------- -------------- ------------------------------
1333 22559 6005821
于是想从系统层kill,可是通过以下sql查询不到1333的spid
select p.pid,p.spid,s.sid,s.serial# from v$process p,v$session s where s.paddr=p.addr and s.sid=1333;
查询后发现,
当在Oracle中kill session以后, Oracle只是简单的把相关session的paddr 指向同一个虚拟地址.此时v$process和v$session失去关联,进程就此中断。
然后Oracle就等待PMON去清除这些Session.所以通常等待一个被标记为Killed的Session退出需要花费很长的时间.
如果此时被Kill的process,重新尝试执行任务,那么马上会收到进程中断的提示,process退出,此时Oracle会立即启动PMON
来清除该session.这被作为一次异常中断处理.
根据以下sql找到之前的paddr:
select p.addr from v$process p where pid <> 1
minus
select s.paddr from v$session s;
07000107C8C050F8
07000107DCC19D88
根据v$process的addr找到spid:
select * from v$process where addr in ('07000107C8C050F8','07000107DCC19D88');
然后找到系统进程号,杀掉就好了。由于部分过程没有保留下执行结果,就只有记录下sql了。
oracle@cq2:] ps -ef|grep 8847870
oracle 8847870 1 3 Aug 06 - 734:23 ora_pz99_CQRPT2
oracle 10420652 13107576 0 11:11:01 pts/1 0:00 grep 8847870
[oracle@cq2:] ps -ef|grep 14221746
oracle 12583324 13107576 0 11:11:22 pts/1 0:00 grep 14221746
oracle 14221746 1 0 08:16:07 - 0:04 oracleCQRPT2 (LOCAL=NO)
[oracle@cq2:] kill -9 14221746
[oracle@cq2:] ps -ef|grep 14221746
oracle 12583046 13107576 0 11:12:11 pts/1 0:00 grep 14221746
测试过程还可以查看另一文章:https://www.cnblogs.com/kerrycode/p/4034231.html
oracle批量清除会话,oracle快速彻底清理kill会话相关推荐
- oracle批量查询更新,Oracle批量查询、删除、更新使用BULK COLLECT提高效率
BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer用法笔记. 例1: 批量查询项目资金账户号为 & ...
- oracle批量建同义词,Oracle批量创建同义词
一.介绍 Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系.它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用 ...
- oracle批量插入优化,oracle批量插入优化方案
今天听DBA说如果从一个表批量查询出一批数据之后批量插入另外一张表的优化方案: 1)不写归档日志: 2)采用独占 关于insert /*+ append */我们需要注意以下三点: a.非归档模式下, ...
- oracle 批量导入 数据,Oracle批量插入数据的三种方式【推荐】
第一种: begin insert into tableName(column1, column2, column3...) values(value1,value2,value3...); inse ...
- oracle批量清除会话,oracle快速彻底杀掉session
今天开发反馈说,执行某个程序update的时候hang住,查看了一下是个小表,只有3000多行数据.第一反应是有锁,把该实例的所有session kill后,执行update还是hang住,单独执行了 ...
- oracle批量粘贴文本,ORACLE 快速批量导入文本数据到数据库(sqlldr工具)方法与分析...
在实际生产环境中,常会碰到将一些如通过通讯接口传过来的数据(文本文件 txt)导入到数据库的某张表中.通常做法是使用ORACLE自带的包功能打开文件,将文件中的数据用LOOP循环一行行读入内存数组中, ...
- oracle批量复制,OracleCopier(Oracle数据复制工具)
OracleCopier是一款简单方便的数据复制工具,帮助用户节省将数据从一个Oracle数据库传输到另一个数据库的时间,用户可以通过软件在Oracle数据库之间来回导数据了,十分方便. 基本简介 O ...
- oracle批量加载,Oracle教程:使用SQL*Loader高速批量数据加载工具
Oracle教程:使用SQL*Loader高速批量数据加载工具 1.控制文件中包含要加载的数据 首先创建一张测试表 然后创建一个控制文件(其中包含被加载的数据) 然后在命令行执行加载 查看dept表 ...
- oracle批量构造数据,oracle批量构造数据方法 - rd_clp的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
1.一种是只要数据条数,至于里面内容可以是序列方式,另外可能几个表中相互 id的关联,那建议用存诸过程写. 表a(id,name)有学员的信息 表b(id,testid,subject,score)有 ...
最新文章
- 支持 gRPC 长链接,深度解读 Nacos 2.0 架构设计及新模型
- HDFS小文件问题及解决方案
- 解决第一个div浮动,后面div覆盖的问题
- 深度剖析冒泡排序机制
- Hive表路径修改和分区表数据加载命令
- chmod 文件夹及子文件夹_了解linux文件属性之chgrp,chown,chmod
- Qt SD卡 文件系统挂载、文件预览
- Java面试23种设计模式之单例模式的8种实现方式
- visual studio 2015 rc cordova -hello world
- 多线程操作SQLite注意事项
- python工具包: pandas
- oracle ora27072,ORA-27072: skgfdisp
- 黑客入侵Windows XP的几个常用方法
- 联想小新air13装双系统_联想小新Pro 13黑苹果详细安装教程
- 学生管理系统总结收获——限制字符
- redis 常用配置文件配置
- android最新adt下载地址,Android SDK和最新ADT下载地址
- 英特尔第十代处理器为什么不支持win7_为什么7代CPU不支持WIN7,原因是什么
- 多任务学习Multi-task Learning(MTL)概述
- hdu 1290 (切西瓜问题)