Oracle 锁表解决方法

--查看被锁对象

select a.session_id,a.object_id,a.oracle_username,b.object_type,b.object_name from v$locked_object a,all_objects b

where a.object_id = b.object_id;

--解锁办法

1)查到sid、serial#

select c.sid,c.serial# from v$session c where c.sid in(select a.session_id  from  v$locked_object a,all_objects b where a.object_id = b.object_id );

2)解锁

alter system kill session ‘sid,serial#’;

对于上述方法kill session无效,报ora错误时,用以下办法解决:

1)、--找出spid

select spid, osuser, s.program

from v$session s,v$process p

where s.paddr=p.addr and s.sid = 'xxx'--由上述查锁sql可以得到

2)、用root用户登录oracle数据库的服务器,杀掉进程马上解锁

kill -9 spid;

附上2段自动解锁sql:

--仅适用单个sid

declare

v_sid number;

v_serial number;

vv_sql varchar2(4000);

begin

select c.sid,c.serial# into v_sid,v_serial from v$session c

where c.sid in

(select a.session_id  from  v$locked_object a,all _objects b where a.object_id = b.object_id );

dbms_output.put_line(v_sid||','||v_serial);

vv_sql :='alter system kill session '||''''||v_sid||','||v_serial||'''';

execute immediate vv_sql;

end;

--游标遍历适用多个sid

declare

begin

for cur in

(select c.sid,c.serial# from v$session c

where c.sid in

(select a.session_id  from  v$locked_object a,all_objects b where a.object_id = b.object_id )) loop

execute immediate 'alter system kill session '||''''||cur.sid||','||cur.serial#||'''';

end loop;

end;

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

时间: 2024-11-03 18:21:38

Oracle 锁表解决方法的相关文章

Oracle变异表解决方法--ORA-04091错误

Oracle变异表解决方法--ORA-04091错误 原因:触发器(或者被语句中引用的用户自定义PL/SQL函数)视图去查询(或修改)一个被另一语句修改而触发的表. 解决方法:重写触发器(或函数)避免读该表. 对表进行DELETE,UPDATE,INSERT操作时,所操作的表就变成了变异表,对表的行级(FOR EACH ROW)触发器中不能对该表进行DML操作.这时可以使用两个方法解决. [@more@] 1.采用自治事务pragma autonomous_transaction解决. 下面给出

Oracle 11gR2 用exp无法导出空表解决方法

Oracle 11gR2 用exp无法导出空表解决方法        在11gR2中有个新特性,当表无数据时,不分配segment以节省空间,Oracle 当然在执行export导出时,空表则无法导出,但是还是有解决办法的: 解决方法:一.insert一行,再rollback就产生segment了.该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 二.设置deferred_segment_creation参数  该参数值默认是TRUE,当改为FALSE时,无无是空表

Oracle11G R2 用exp无法导出空表解决方法

Oracle11G R2 用exp无法导出空表解决方法 作者:吴伟龙  Name:Prudence Woo QQ:286507175 msn:happy-wuweilong@hotmail.com         在11G R2中有个新特性,当表无数据时,不分配segment,以节省空间Oracle当然在执行export导出时,空表则无法导出,但是还是有解决办法的: 解决方法:   一.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生seg

Win7系统添加打印机无Print Spooler服务无注册表解决方法

  Win7系统添加打印机无Print Spooler服务无注册表解决方法.win764位系统刚装几天发现笔记本无法安装虚拟打印机,因为我经常使用PDF打印,比如cutePDF打印机.开始搜索各种经验,发现都无法解决问题, 总有各种疏漏,在此总结一下,供自己回顾,同时希望能惠及他人. 方法/步骤 问题描述,在设备与打印机中"添加打印机"时提示Windows无法添加打印机,后台相关服务没有运行. 通过百度知晓,原因可能是服务printer spooler没有运行.此时去查看该项服务.具体

Oracle 11G R2 用exp无法导出空表解决方法

Oracle 11G在用EXPORT导出时空表不能导出 11G R2中有个新特性当表无数据时不分配segment以节省空间 解决方法 一. insert一行再rollback就产生segment了. 该方法是在在空表中插入数据再删除则产生segment.导出时则可导出 空表. 二. 设置deferred_segment_creation 参数 该参数值默认是TRUE当改为FALSE时无论是空表还是非空表都分配 segment.修改SQL语句 alter system se

spring oracle 锁表-为什么insert操作会把整张表都锁住呢?

问题描述 为什么insert操作会把整张表都锁住呢? 项目中遇到一个很奇怪的问题: 问题描述:现在需要从项目外部导大量的数据到项目内,这个时候我起了一个spring事务往很多张表中去插入数据,这个时候其他用户访问系统去更新旧的数据的时候发现表被锁了.也就是说我在导入数据的时候,其他用户都不能对系统的表进行相应的更新操作.这是为什么???? 解决方案 查的时候不会锁住,只有曾删改才会 解决方案二: 当ORACLE执行insert等DML语句时,会首先自动在所要操作的表上申请一个TM锁,当TM锁获得

64位Win7安装+32位Oracle + PL/SQL 解决方法

  软件景象:64位win7.32位Oracle 10g. PL/SQL 9.0.4.1644   媒介:以前开辟用的都是32位体系,忽然换到64位上,安装景象真的有点麻烦了,尤其对于PL/SQL只支撑32位等.看了很多的材料,但一些题目并不克不及直接解决.花了一天时候终于安装成功了,下文将安装过程中碰到的题目记录下,以便作为今后的参照,也对大师解决类似题目有效.   情景:安装完win7后,新建了一个用户,但在安装完Oracle后,点击Net Configuration Assistant,,

mysql导出导入中文表解决方法_Mysql

在开发过程中会经常用到mysql导出导入中文表,本文将详细介绍其如何使用,需要的朋友可以参考下一.先针对utf8导出: (1)导出源数据库的所有表: 复制代码 代码如下: mysqldump -u root -p密码 --socket=mysql.sock --default-character-set=utf8 --set-charset=utf8 --hex-blob --databases 数据库名 > utf8.sql (2)修改sql文件,删除文件头中包含的创建数据库的命令 (3)登录

oracle创建表的方法和一些常用命令_oracle

1.主键和外键主键:关系型数据库中的一条记录中有若干个属性,若其中的某一个属性组(注意是组,可以是一个,也可以是多个)能唯一标识一条记录,那么该属性组就是主键外键:关系型数据库表中的一列或者某几列的组合,它的值与另外一张表的某一列或者某几列相匹配,且为另一张表的主键(即这张表的某一列或某几列是另外一张表的主键,称这一列或几列为另外一张表的外键) 注1:一张表主键只能有一个,可以有多个外键以及唯一索引 注2:Oracle数据库共有5个约束:主键.外键.非空.唯一.条件非空:这个列的值不能为空(NO