热门标签 | 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


推荐阅读
  • 本文详细探讨了 Django 的 ORM(对象关系映射)机制,重点介绍了其如何通过 Python 元类技术实现数据库表与 Python 类的映射。此外,文章还分析了 Django 中各种字段类型的继承结构及其与数据库数据类型的对应关系。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 深入理解T-SQL中的NULL与三值逻辑
    本文探讨了SQL Server中的三值逻辑,解释了谓词计算结果为TRUE、FALSE和UNKNOWN的规则。通过具体示例,详细说明了如何正确处理NULL值,并探讨了在不同约束条件下的行为。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • Qt中QSpinBox与QSlider的联动实现
    本文介绍如何在Qt框架下将QSpinBox和QSlider组件进行联动,使用户在拖动滑块或修改文本框中的数值时,两个组件能同步更新,从而提供更加直观和便捷的用户体验。 ... [详细]
  • 本文介绍了如何使用Java中的同步方法和同步代码块来实现两个线程的交替打印。一个线程负责打印1到52的数字,另一个线程负责打印A到Z的字母,确保输出顺序为12A34B...5152Z。 ... [详细]
  • 探讨了在有序数列中实现多种查询和修改操作的高效数据结构设计,主要使用线段树与平衡树(Treap)结合的方法。 ... [详细]
  • 创建项目:Visual Studio Online 入门指南
    本文介绍如何使用微软的 Visual Studio Online(VSO)创建和管理开发项目。作为一款基于云计算的开发平台,VSO 提供了丰富的工具和服务,简化了项目的配置和部署流程。 ... [详细]
  • 本文详细介绍了如何在CentOS 7操作系统上安装和配置Grafana,包括必要的依赖项安装、插件管理以及服务启动等步骤。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
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社区 版权所有