Oracle 锁表问题查询处理

article/2025/8/29 11:49:13

数据库操作语句的分类

DDL:数据库模式定义语言,关键字:create
DML:数据操纵语言,关键字:Insert、delete、update
DCL:数据库控制语言 ,关键字:grant、remove
DQL:数据库查询语言,关键字:select

oracle表在什么情况下会被锁住

DML锁又可以分为,行锁、表锁、死锁

行锁:当事务执行数据库插入、更新、删除操作时,该事务自动获得操作表中操作行的排它锁。

表级锁:当事务获得行锁后,此事务也将自动获得该行的表锁(共享锁),以防止其它事务进行DDL语句影响记录行的更新。事务也可以在进行过程中获得共享锁或排它锁,只有当事务显示使用LOCK TABLE语句显示的定义一个排它锁时,事务才会获得表上的排它锁,也可使用LOCK TABLE显示的定义一个表级的共享锁(LOCK TABLE具体用法请参考相关文档)。

死锁:当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就出现死锁。
如事务1在表A行记录#3中有一排它锁,并等待事务2在表A中记录#4中排它锁的释放,而事务2在表A记录行#4中有一排它锁,并等待事务1在表A中记录#3中排它锁的释放,事务1与事务2彼此等待,因此就造成了死锁。死锁一般是因拙劣的事务设计而产生。
死锁只能使用SQL下:alter system kill session “sid,serial#”;或者使用相关操作系统kill进程的命令,如UNIX下kill -9 sid,或者使用其它工具杀掉死锁进程。

DDL锁又可以分为:排它DDL锁、共享DDL锁、分析锁

排它DDL锁:创建、修改、删除一个数据库对象的DDL语句获得操作对象的 排它锁。如使用alter table语句时,为了维护数据的完成性、一致性、合法性,该事务获得一排它DDL锁。

共享DDL锁:需在数据库对象之间建立相互依赖关系的DDL语句通常需共享获得DDL锁。
如创建一个包,该包中的过程与函数引用了不同的数据库表,当编译此包时,该事务就获得了引用表的共享DDL锁。

分析锁:ORACLE使用共享池存储分析与优化过的SQL语句及PL/SQL程序,使运行相同语句的应用速度更快。一个在共享池中缓存的对象获得它所引用数据库对象的分析锁。分析锁是一种独特的DDL锁类型,ORACLE使用它追踪共享池对象及它所引用数据库对象之间的依赖关系。当一个事务修改或删除了共享池持有分析锁的数据库对象时,ORACLE使共享池中的对象作废,下次在引用这条SQL/PLSQL语句时,ORACLE重新分析编译此语句。

Oracle锁表查询和解锁

背景描述

程序执行过程中卡住不动,查找了日志发现卡在某个位置,本地测试没发现问题后,猜测是数据库发送了锁表情况。

第一步:通过管理员权限用户查询被锁表信息

select 
sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode 
from v$locked_object lo,dba_objects ao,v$session sess 
where ao.object_id=lo.object_id and lo.session_id=sess.sid;
FACE	24	788  	AIFACE_DEALFLAG	WIN-TU6BO56S2TL\Administrator	WORKGROUP\WIN-TU6BO56S2TL	sqlnavigator.exe	2020/3/29 16:36:19	3	                	00007FF78B2D3E20	00007FF78C224450	00007FF7886769B8	00007FF76ED43D50	3
FACE	45	55498	AIFACE_DEALFLAG	LOCAL SERVICE                	WIN-TU6BO56S2TL          	JDBC Thin Client	2020/4/1 13:39:38 	0	00007FF78C4D5138	00007FF78B2E8330	00007FF7901EEDC8	00007FF787BB4FD0	00              	3

在这里插入图片描述

第二步:通过拥有管理员权限的用户解除数据库中被锁住的表(SID,SERIAL)

通过第一步查出来的信息找到被锁的表之后执行如下语句解锁该表:

alter system kill session 'sid,seial#';

注意:sid和seial#就是第一步中查询出来的进程号和序列号。
eg:解除第一步中表的锁

alter system kill session '24,788';
alter system kill session '45,55498';

锁的模式

v$locked_object中的LOCKED_MODE字段表示锁的模式,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级锁有:Select,有时会在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

还有一条比较实用的sql:

--查某session 正在执行的sql语句,从而可以快速定位到哪些操作或者代码导致事务一直进行没有结束等.
SELECT /*+ ORDERED */ sql_textFROM v$sqltext aWHERE (a.hash_value, a.address) IN(SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value),DECODE(sql_hash_value, 0, prev_sql_addr, sql_address)FROM v$session bWHERE b.sid = '67')  /* 此处67 为SID*/ORDER BY piece ASC;

天下英雄出我辈,一入江湖岁月催
我是爱生活的「无间行者」,努力把实践过的解决方案分享给大家
一个赞、一个评论、一个关注,真的好开心,努力没有白费。



http://chatgpt.dhexx.cn/article/9nCVai4M.shtml

相关文章

oracle中锁表是什么,oracle锁表查询和解锁方法是什么,oracle锁表和解锁

oracle锁表查询和解锁方法是什么甲骨文锁表的查询和解锁方法是什么,oracle锁表查询和解锁方法:首先使用PL/SQL Developer连接和操作Oracle数据库;然后使用select语句进行更新来锁定表;最后,用[alter system kill sessi…

Oracle锁表查询和解锁方法

我们这里一般用的PL/SQL,总是无意间把表锁住,所以我今天就整理了一下简单的解锁和查询锁表的方法; 一、首先PL/SQL要以管理员的账号(system/admin等)登录,管理员的账号和密码根据个人设置而来,连接为一般选…

internal/modules/cjs/loader.js:638异常问题解决

在使用webpack安装插件,运行项目internal/modules/cjs/loader.js:638抛出异常信息,具体原因不知。 解决: 1、删除node_module文件,删除package-lock.json文件 2、重新npm install 3、重新运行,没有再报异常

运行node时报错:events.js:167 throw er; // Unhandled 'error' event

今天npm run dev 启动项目时报错: 报这个错通常是因为ip地址不正确,或者端口被占用。 到webpack.config.js文件中发现是因为ip地址不对: 解决办法:改成 host: 127.0.0.1,如果是端口被占用换个试试。 再运行npm run de…

vue中vue.runtime.esm.js?2b0e:619 [Vue warn]: data functions should return an object:报错原因

错误如图所示: 修改方法:在ContentBar.vue文件中的data写上return返回值。 必须写return的原因: 在简单的vue实例中看到的Vue实例中data属性是如下方式展示的: 在使用组件化的项目中使用的是如下形式: vue的文件data…

关于vue.js前端接收到数据却始终报_this is not defined at eval 的错误

之前做了一个关于作业管理的平台,利用ajax和后台异步通信,利用console.info()方法可以输出接受到的数据,但是一旦在成功的响应方法里面将数据赋值给前端定义的变量。就会转到failResponse的方法里面。代码如图: 数据已经获得成功如…

Node.js之rollbackFailedOptional错误处理

Paste_Image.png 这个错误可以简单的理解为 就是网不好 ,改用淘宝的npm镜像就好 1.修改~/.npmrc文件(没有就自行新建一个),写入 registry https://registry.npm.taobao.org2.同样的方法,将disturl 这个配置同样指向: https://npm.taobao.o…

遇见js报错应该如何解决

看控制台信息!!! 我遇见过很多才开始学写代码的人,当然我自己以前也是那样的,面对代码报错我不知道应该如何做,不知道如何解决。随着学习时间的增加,我发现所有的语言都会有报错信息&#xff0…

Vue引入JQuery报错caught ReferenceError: jQuery is not defined

报错信息: caught ReferenceError: jQuery is not defined 原因分析:不详,本人前端处于幼儿园水平 错误截图: 解决办法: 在vue.config.js 中添加红色方框中的两段代码 const { defineConfig } require(vue/cli-service) con…

vue开发中遇到Forced reflow while executing JavaScript took

在vue的开发过程中,遇到了如图所示的警告提示,我页面中包含有一个毫秒倒计时,swiper插件等,还有有一个答题卡组件,组件是通过来控制显示的,但是这里每次在页面点击改变isAnswerCardOpen的值是,就…

解决vue创建新项目与版本查看,报错“internal/modules/cjs/loader.js:1032 throw err;

查看vue版本或者是新建vue项目都会这个错误,重新安装vue-cli也会报错 解决方案: 先查看自己vue安装的位置 执行代码: where vue获取到vue文件的位置进行删除 1.删除残留vue文件,命名语句: del /s /q C:\Users\17655\AppData\R…

vue常见报错原因及解决

1. 关键词 Uncaught Error: [vuex] mutations should be function but "mutations.actions" in module "user" is {}. 原因:写错行 解决:写到methods函数里面 2. import 导入错误 关键词:TypeError: Object(...) is not …

js中常见的错误

js运行报错,首现我们要先学会查看在哪里查看错误 打开页面点击鼠标右键审查元素(检查),打开控制台,然后根据上面的提示,读取 相关信息,然后读取自己哪里错了,最后寻找相应代码进行…

JS中一些经常遇到的错误

无法给动态创建的元素绑定事件,通过事件委托解决 瀑布流效果 <style type"text/css"></style> <script> let df document.createDocumentFragment() for (let i 1; i < 43; i) { let oDiv docume…

[Vue]解决npm run dev报错internal/modules/cjs/loader.js:968 throw err;

问题 解决 有2中方法&#xff0c;建议先尝试第一种&#xff0c;不行再第二种 重新安装依赖环境 删除项目的node_modules文件夹&#xff0c;重新执行 # 安装依赖环境 npm install# 运行 npm run dev降低webpack的版本 查看package.json中webpack的相关版本 # 卸载当前版本…

vue出现caution:request is not finished yet导致页面卡死问题解决思路

1、问题描述 开发环境正常运行&#xff0c;部署上线后点击某一按钮请求接口时页面出现卡死。在Network>Timing发现异常提示&#xff1a; caution:request is not finished yet 2、问题分析 &#xff08;1&#xff09;通过Postman模拟请求接口&#xff0c;接口正常。 &am…

关于Vue项目中js报错callback() is not a function

关于Vue项目中js报错callback() is not a function 原函数&#xff1a; 解决后&#xff1a; 即在参数中加入了rule&#xff0c;虽然rule都没有使用&#xff0c;但确实是解决了callback() is not a function

Vue中报错:Error in v-on handler: “ReferenceError: state is not defined“

目录 背景 解决报错思路 反思 背景 在编写组件化时&#xff0c;Vue提示报错&#xff1a;Error in v-on handler: "ReferenceError: state is not defined" 解决报错思路 1.console控制台在index.js组件的第27行代码&#xff0c;还能输出语句&#xff1a;“mutati…

【解决】控制台报错Uncaught TypeError: Object(...) is not a function at eval (vue-router.esm-bundler.js

打开http://localhost:8080/&#xff0c;控制台报错 Uncaught TypeError: Object(...) is not a functionat eval (vue-router.esm-bundler.js?f2fc:2127:1)at Object../node_modules/vue-router/dist/vue-router.esm-bundler.js (app.js:2218:1)at __webpack_require__ (ap…

成功解决使用node时,启动js文件抛出错误 events.js:377 throw er; // Unhandled ‘error‘ event ^Error: listen EA

问题描述: 我在写服务端时&#xff1a; const http require(http); const url require(url)const app http.createServer(); app.on(request,(req,res)>{//获取请求方式const method req.method.toLocaleLowerCase(); //返回的时大写的GET/POST 最好转换为小写的/…