一.查询锁基本信息:
select a.object_name, --被锁的资源
dd.*
from (
select a.sid,
'Wait' "Status", --/*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */ LOCK表明该进程锁住了某个资源,WAIT表示该进程正在等待某个资源
a.username, --ORACLE用户名
a.machine, --ORACLE机器
a.serial#,
a.last_call_et "Time", --表示该进程最后一次进行操作至当前的时间(秒)
a.program, --产生死锁的语句主要来自哪个应用程序
a.command,
a.lockwait, --死锁的状态,如果有内容表示被死锁
b.id1, --锁标识。某个LOCK状态的ID1与某个WAIT状态的ID1相同,可说明锁的正是另一个进程等待的。
c.sql_text "SQL" -- 锁住资源的SQL语句
from v$session a, v$lock b, v$sqltext c
where a.username is not null
and a.lockwait = b.kaddr
and c.hash_value =a.sql_hash_value
union
select a.sid,
'Lock' "Status", --/*+ NO_MERGE(a) NO_MERGE(b) NO_MERGE(c) */
a.username,
a.machine,
a.serial#,
a.last_call_et "Time",
a.program,
a.command,
a.lockwait,
b.id1,
c.sql_text "SQL"
from v$session a, v$lock b, v$sqltext c
where b.id1 in
(
select distinct e.id1 -- /*+ NO_MERGE(d) NO_MERGE(e) */
from v$session d, v$lock e
where d.lockwait = e.kaddr
)
and a.username is not null
and a.sid = b.sid
and b.request=0
and c.hash_value =a.sql_hash_value
) dd
left join v$locked_object o on dd.sid = o.session_id
left join all_objects a on o.object_id = a.object_id
注:NO_MERGE()保证视图的查询不被拆散。这是防止CBO在设计执行方案时将Oracle优化过的视图拆分。以保证执行效率。
二.解锁:
alter system kill session 'sid,serial#';
三.原因分析
1.由于外键原因导致的表级锁
当在一个session中对从表进行update,insert或delete操作时,oracle会默认对从表数据施加行级锁,而与此同时,如果在另一个session中对主表进行delete操作,oracle便会寻找所有以主表ID为FK的从表,然后看该从表是否有该外键的索引。如果有,则访问索引,如果没有,则对从表施加表级锁,然后对全表进行扫描。
解决办法:为从表的外键建立索引,这也是在使用外键时的推荐方式。
分享到:
相关推荐
通过修改ini配置自动备份时间目录什么的
利用ORA文件恢复数据库,Oracle数据库灾难恢复
OraCmd.rar..................oracmdcmdcdmcdmcdmdmdmdm
------------原创地. ------------原创地.------------原创地.------------原创地.------------原创地. ------------原创地.
客户端进行连接的时候,系统不定期出现ora-12520,ora-12516的连接问题, 问题解决方案建议: 1、增加process和session的连接数。 2、检查连接的应用,是不是有没有释放的连接。 3、将修改参数local_listener中的vip为...
Ora9i数据库管理员指南,系统学习数据库管理。
NULL 博文链接:https://springlin.iteye.com/blog/1520668
1 解决Oracle 9.2.0.6版本数据库由于ORA-07445宕机问题 故障现象: XX网数据库宕机,查看日志发现以下内容: Wed Jun 8 20:24:17 2005 Errors in file /u02/app/oracle/admin/unicom/udump/unicom_ora_661.trc: ORA-...
oracle数据库优化之后,报错报错“ora-00838”的处理方法
golang 使用go-ora 连接数据库 示例代码。 不用安装 cgo,不用安装mingw,也不用oracle客户端
oracle数据库错误大全,常见错误都可以找到
开发环境:SpringBoot+SSM,同样适合SpringBoot,具备一定Maven项目基础初学者,详细说明地址http://blog.csdn.net/fjekin/article/details/75541573
能匹配任何数据库进行编辑 特别是oracle 缺少编辑工具 使用后可以不亚于sql的编辑器 并且还带有强大的提示功能
oracle数据库,错误代码ORA-29275,参考解决方案。
解决启动数据库时ORA-03113问题
关于oracle做恢复操作时启动数据库报错,通常是由于rman做了恢复操作导致的报错. 通过继续执行恢复指令而恢复数据库,成功启动数据库.
在oracle数据库中远程连接的认证方式有两种:分别是操作系统认证和密码认证,在安装完oracle软件并创建数据库之后,默认...本文介绍了如何远程登录并启动oracle数据库(ORA-01031:insufficient privileges的解决方法)
您可能感兴趣的文章:常用的Oracle doc命令(收藏)Oracle 多行记录合并/连接/聚合字符串的几种方法Oracle中字符串连接的实现方法php连接oracle数据库及查询数据的方法plsql连接oracle数据库报ora 12154错
oracle数据库的配置文件,用于进行连接配置
去年才开始用的这个软件,没想到,时隔一年后,来到不同的地方工作,竟然也用这个。所以推荐大家用用,还是很不错的