热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Oracle】Oracle锁表处理

问题分析(1)锁的分析ORACLE里锁有以下几种模式:0:none1:null空2:Row-S行共享(RS):共享表锁,subshare3:Row-X行独占(RX):用于行的修

问题分析
(1)锁的分析
ORACLE里锁有以下几种模式:
0:none
1:null

2:Row-S 行共享(RS):共享表锁,sub share
3:Row-X
行独占(RX):用于行的修改,sub exclusive

4:Share
共享锁(S):阻止其他DML操作,share

5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub
exclusive

6:exclusive 独占(X):独立访问使用,exclusive 数字越大锁级别越高,
影响的操作越多。

1级锁有: S e l e c t ,
有时会在v$locked_object出现。

2级锁有:Select for update,Lock For
Update,Lock Row Share select for update当对话使用for
update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select
for update操作。

3级锁有:Insert,Update,Delete,Lock Row Exclusive
没有commit之前插入同样的一条记录会没有反应,
因为后一个3级的锁会一直等待上一个3级的锁,我们必须释放掉上一个才能继续工作。

4级锁有:Create Index, Lock
Share locked_mode为2、3、4级锁,不影响DML(insert,delete,update,select)操作,
但DDL(alter,drop等)操作会提示ora-00054错误。00054, 00000, "resource busy and acquire with
NOWAIT specified" // *Cause: Resource interested is busy. //*Action: Retry if
necessary.

5级锁有:Lock Share Row Exclusive 具体来讲有主外键约束时update /
delete ... ; 可能会产生4,5的锁。

6级锁有:Alter table, Drop table, Drop
Index,Truncate table, Lock
Exclusive


(2)查询锁方法
以DBA角色,
查看当前数据库里锁的情况可以用如下SQL语句:

select
t2.username,t2.sid,t2.serial#,t2.logon_time from

v$locked_object
t1,v$session t2 where t1.session_id=t2.sid

order by
t2.logon_time

如果有长期出现的一列,可能是没有释放的锁。

解决方法:
(1)释放锁的方法:
我们可以用下面SQL语句杀掉长期没有释放非正常的锁:
alter
system kill session ‘sid,serial#‘;
//sid,serial#是上面查询出来的

(2)系统级杀进程方法释放锁:
select
spid from v$process where addr = (select paddr

from v$session
where sid=&sid);$ kill -9 spid
//spid是上面查询出来的

(3)注意点:如果出现了锁的问题, 某个DML操作可能等待很久没有反应。
当你采用的是直接连接数据库的方式,也不要用OS系统命令 $kill process_num 或者 $kill -9
process_num来终止用户连接,因为一个用户进程可能产生一个以上的锁,杀OS进程并不能彻底清除锁的问题。

【Oracle】Oracle锁表处理,布布扣,bubuko.com


推荐阅读
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文详细介绍了Python中的生成器表达式、列表推导式、字典推导式及集合推导式等,探讨了它们之间的差异,并提供了丰富的代码示例。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 在使用KVM虚拟化技术通过NAT模式启动虚拟机时,可能会遇到qemu-ifup-nat脚本执行失败的错误。本文将详细介绍如何诊断和解决这一问题。 ... [详细]
  • Redis: 高效的键值存储系统
    Redis是一款遵循BSD许可的开源高性能键值存储系统,它不仅支持多种数据类型的存储,还提供了数据持久化和复制等功能,显著区别于其他键值缓存解决方案。 ... [详细]
  • 第1章选择流程控制语句1.1顺序结构的基本使用1.1.1顺序结构概述是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • 使用IntelliJ IDEA高效开发与运行Shell脚本
    本文介绍了如何利用IntelliJ IDEA中的BashSupport插件来增强Shell脚本的开发体验,包括插件的安装、配置以及脚本的运行方法。 ... [详细]
  • ED Tree HDU4812 点分治+逆元
    这道题非常巧妙!!!我们进行点分治的时候,算出当前子节点的所有子树中的节点,到当前节点节点的儿子节点的距离,如下图意思就是当前节点的红色节点,我们要求出红色节点的儿子节点绿色节点, ... [详细]
  • IIS6批量添加主机头,修改IIS数据库
    首先,找到IIS的数据库。默认是在C:\WINDOWS\system32\inetsrv下的MetaBase.xml文件。如果找不到,请右键右键站点-》所有服务-》将配置保存到一个 ... [详细]
  • 本文详细对比了HashMap和HashTable在多线程环境下的安全性、对null值的支持、性能表现以及方法同步等方面的特点,帮助开发者根据具体需求选择合适的数据结构。 ... [详细]
  • 神策数据分析基础
    本文介绍了基于用户行为的数据分析方法,包括业务问题的提出与定义、具体行为的识别及统计分析流程。同时,详细阐述了如何利用事件模型(Event Model)来描述用户行为,以及在实际应用中的案例分析。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • 本文列举了构建和运行 Struts2 应用程序所需的核心 JAR 文件,包括文件上传、日志记录、模板引擎等关键组件。 ... [详细]
  • selenium通过JS语法操作页面元素
    做过web测试的小伙伴们都知道,web元素现在很多是JS写的,那么既然是JS写的,可以通过JS语言去操作页面,来帮助我们操作一些selenium不能覆盖的功能。问题来了我们能否通过 ... [详细]
author-avatar
sucbenson-lee_905
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有