Windows下Oracle表死锁处理过程

Windows下Oracle表死锁处理过程

1.问题现象

Oracle 12c数据库安装在Windows下,在一个大数据量表批量更新操作时,异常中断。表锁死,查询访问长时间无反应。

2.处理过程

(1)锁表对象
select object_name as 对象名称, s.sid, s.serial#, p.spid as 系统进程号from v$locked_object i, dba_objects o, v$session s, v$process pwhere i.object_id = o.object_idand i.session_id = s.sidand s.paddr = p.addr;

查询锁表的对象,找到表名,关注对应的sid ,serial# ,spid 。

(2)在Oracle中杀进程

在数据库所属用户登录,杀会话进程。

alter system kill session 'sid,s.serial#';

例如:sid ,serial# 分别是16,6046

alter system kill session '16,6046';

提示成功,但是再次查询锁对象,依然存在。
增加参数,立刻执行生效

alter system kill session '16,6046' immediate;

提示:

ORA-00031: session marked for kill

(3)在Windows中杀进程

Windows 中没有kill命令,杀指定进程。在Windows中任务管理器,Oracle就是一个进程。
Oracle提供一个命令orakill :

用法: orakill sid thread

sid:是数据库实例名
thread:是锁对象的spid

查询数据库实例名:

select t.INSTANCE_NAME from v$instance t;

假设 实例名:orcl ,spid :10404

进入cmd命令行,执行:

orakill orcl 10404

结束锁死进程。
在Oracle中,查询不到对应的锁死表对象。

(4)清除数据

再查询锁死表,还是没有反映,应该是解锁了,可以查询迅速反馈结果了,但是与预期不同。

最终用truncate table 清除所有记录,重新导入数据,表终于可以查询返回结果了 。

3. Oracle锁的分类

加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

Oracle的锁机制是一种轻量级的锁定机制,不是通过构建锁列表来进行数据的锁定管理,而是直接将锁作为数据块的属性,存储在数据块首部。

在 Oracle 数据库中,它并不是对某个表加上锁或者某几行加上锁, 锁是以数据块的一个属性存在的。 也就是说, 每个数据块本身就存储着自己数据块中数据的信息,这个地方叫 ITL( Interested Transaction List), 凡是在这个数据块上有活动的事务,它的信息就会记录在这里面供后续的操作查询,一保证事务的一致性。

(1)按用户和系统分类
  • 自动锁( Automatic Locks)
    当进行一项数据库操作时,缺省情况下,系统自动为此数据库操作获得所有有必要的锁。
    自动锁分为三种:

    • DML 锁
    • DDL 锁
    • systemlocks。
  • 手动数据锁( Manual Data Locks)
    某些情况下,需要用户锁定数据库操作要用到的数据,才能使数据库操作执行得更好,显式锁是用户为数据库对象设定的,执行命令锁表:

lock table table_name;

(2)按锁级别分类

可分为:排他锁(exclusive lock,即X锁)和共享锁(share lock,即S锁)

  • 排他锁(exclusive lock,即X锁)
    事务设置排它锁后,该事务单独获得此资源,另一事务不能在此事务提交之前获得相同对象的共享锁或排它锁。

  • 共享锁(share lock,即S锁)
    共享锁使一个事务对特定数据库资源进行共享访问——另一事务也可对此资源进行访问或获得相同共享锁。
    共享锁为事务提供高并发性。

(3)按操作分类

DML锁
DML 锁用于控制并发事务中的数据操纵,保证数据的一致性和完整性。
DML锁主要用于保护并发情况下的数据完整性。
DML 语句能够自动地获得所需的表级锁(TM)与行级(事务)锁(TX)。

它又分为:
( 1) TM 锁(表级锁)
( 2) TX 锁( 事务锁或行级锁)

当 Oracle 执行 DML 语句时,系统自动在所要操作的表上申请 TM 类型的锁。当 TM 锁获得后,系统再自动申请 TX 类型的锁,并将实际锁定的数据行的锁标志位进行置位。
这样在事务加锁前检查 TX锁相容性时就不用再逐行检查锁标志,而只需检查 TM 锁模式的相容性即可,大大提高了系统的效率。

在数据行上只有 X 锁(排他锁)。
在 Oracle 数据库中,当一个事务首次发起一个 DML 语句时就获得一个 TX 锁,该锁保持到事务被提交或回滚。当两个或多个会话在表的同一条记录上执行 DML 语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后, TX 锁被释放,其他会话才可以加锁。

当 Oracle 数据库发生 TX 锁等待时,如果不及时处理常常会引起 Oracle 数据库挂起,或导致死锁的发生,产生ORA-600 的错误。这些现象都会对实际应用产生极大的危害,如长时间未响应,大量事务失败等。

(4)锁等级
  • 行锁:0、6两类锁
  • 表锁:0、1、2、3、4、5、6七类锁
    • 0(none)
    • 1(null)
    • 2(RS)
    • 3(RX)
    • 4(S)
    • 5(SRX)
    • 6(X)

R是ROW行,S是SHARE共享,X是eXclusive排他,独占锁的意思。

0:null 空
一般的SELECT,在表和行上都是0级锁

1:null 空
1级锁有:Select有时会在v$locked_object出现。

2:Row-S 行共享(RS):共享表锁,sub share
2级锁有:Lock Row Share,create index online

表锁的情况下:
locked_mode 2不影响后一个locked_mode 2、3、4、5的会话,如果后一个会话locked_mode为6,则后一个会话操作会提示ora-00054错误。
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

行锁的情况下:
locked_mode 2对应行锁0级锁,不影响其他会话。

3:Row-X 行独占(RX):用于行的修改,sub exclusive
3级锁有:Insert, Update, Delete, Select for update,Lock Row Exclusive

表锁的情况下:
locked_mode 3不影响后一个locked_mode 3的会话,但如果后一个会话locked_mode为4,5,6,则后一个会话操作会提示ora-00054错误。
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

行锁的情况下:
locked_mode 3的表锁对应行锁6级锁,两个会话对同一行则影响。

4:Share 共享锁(S):阻止其他DML操作,share
4级锁有:Create Index, Lock Share

5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive
5级锁有:Lock Share Row Exclusive
具体来讲有主外键约束时update/delete … ; 可能会产生4,5的锁。

6:exclusive 独占(X):独立访问使用,exclusive
6级锁有:Drop table, Drop Index, Alter table,Truncate table, Lock Exclusive。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解释一下Python中的命名空间和作用域

解释一下Python中的命名空间和作用域 在Python中,命名空间和作用域是两个非常重要的概念,它们对于理解变量的可见性和生命周期至关重要。下面我将详细解释这两个概念。 一、命名空间 命名空间是一个字典,它用于存储变量名(键&a…

[蓝桥杯 2023 省 A]幸运数有奖问答

[蓝桥杯 2023 省 A] 填空问题 题目描述 A. 幸运数 小蓝认为如果一个数含有偶数个数位,并且前面一半的数位之和等于后面一半的数位之和,则这个数是他的幸运数字。例如 2314 2314 2314 是一个幸运数字,因为它有 4 4 4 个数位,并…

JAVA8新特性

JAVA8新特性 1、函数式编程 主要关注对数据进行了什么操作 1.1 优点 代码简洁 容易理解 易于“并发编程” 2、lamada表达式 (参数列表)->{代码}未使用 new Thread(new Runnable() {Overridepublic void run() {System.out.println(123123123);}}).start(); 使用…

CSS常见样式

字体相关的样式 <style>div{/* 斜体 */font-style: italic;/* 加粗 100-900*/font-weight: 900;/* 字体大小 */font-size: 20px;/* 声明字体格式 */font-family: "微软雅黑";}</style> div内部文字垂直居中 只需要将行高设为其height的大小即可。 div{…

B2985A是德科技B2985A静电计

181/2461/8938产品概述&#xff1a; B2985A 静电计/高阻表具有 0.01 fA&#xff08;0.01 x 10-15 A&#xff09;的分辨率&#xff0c;可帮助您信心十足地测量小电流和最高可达 10 PΩ&#xff08;10 x 1015 Ω&#xff09;的大电阻。 它拥有 4.3 英寸 LCD 彩色液晶屏并配有图形…

WebGL异步绘制多点

异步绘制线段 1.先画一个点 2.一秒钟后&#xff0c;在左下角画一个点 3.两秒钟后&#xff0c;我再画一条线段 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"…

redis的简单操作

redis中string的操作 安装 下载可视化软件&#xff1a;https://gitee.com/qishibo/AnotherRedisDesktopManager/releases。 Mac安装redis&#xff1a; brew install redisWindows安装redis: 安装包下载地址&#xff1a;https://github.com/tporadowski/redis/releases 1.…

C++:类和对象(上)

1.类的引入 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数&#xff0c;同时C引入class关键字来也能实现这一作用&#xff0c;C更喜欢用class class/struct Stack {int * _array;size_t _capacity;size_t _size…

3.5、文本显示(Text/Span)

创建文本 Text 可通过以下两种方式来创建: string 字符串 效果图 Text(我是一段文本)引用 Resource 资源 资源引用类型可以通过 $r 创建 Resource 类型对象,文件位置为 /resources/base/element/string.json。 引用的资源位于:src/main/resources/base/element/string…

海外仓订单管理存在哪些问题?利用位像素海外仓系统能提升订单管理效率吗?

随着跨境电商业务的蓬勃发展&#xff0c;海外仓的订单量日益攀升&#xff0c;在海外仓的运作中&#xff0c;订单管理是一项看似简单实则复杂繁琐的任务。 然而&#xff0c;大批量订单的涌入&#xff0c;让其管理背后隐藏的问题也随机出现。让我们一起来看看有哪些问题吧&#…

一二三应用开发平台使用手册——系统管理-组织机构-使用说明

概述 平台文档是平台的重要组成部分&#xff0c;这块容易被忽视或不被重视。即使一个平台或系统架构优秀、设计合理、代码优雅&#xff0c;但文档缺失&#xff0c;对于平台的使用方而言&#xff0c;熟悉成本高、难度大。不可避免存在疑问&#xff0c;需要动手尝试验证或翻看源…

使数组连续的最少操作数

使数组连续的最少操作数 给你一个整数数组 nums 。每一次操作中&#xff0c;你可以将 nums 中 任意 一个元素替换成 任意 整数。 如果 nums 满足以下条件&#xff0c;那么它是 连续的 &#xff1a; nums 中所有元素都是 互不相同 的。 nums 中 最大 元素与 最小 元素的差等于…

(表征学习论文阅读)A Simple Framework for Contrastive Learning of Visual Representations

Chen T, Kornblith S, Norouzi M, et al. A simple framework for contrastive learning of visual representations[C]//International conference on machine learning. PMLR, 2020: 1597-1607. 1. 前言 本文作者为了了解对比学习是如何学习到有效的表征&#xff0c;对本文所…

LeetCode题练习与总结:螺旋矩阵Ⅱ--59

一、题目描述 给你一个正整数 n &#xff0c;生成一个包含 1 到 n^2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]]示例 2&#xff1a; 输入&#xff1…

conda在【已有环境】上新建虚拟环境

在做Python工程时&#xff0c;经常遇到的一个问题就是&#xff1a;为了复现某个项目需要特地新建一个虚拟环境。但是&#xff0c;我们两个Project需要的环境几乎相同&#xff0c;只是有少数模块的版本互斥&#xff0c;这个时候都从0装一遍虚拟环境&#xff0c;就比较耽误时间。…

VMware启动显示“打开虚拟机时出错: 获取该虚拟机的所有权失败”

提示框&#xff08;忘截图了&#xff09;里提示目录C:\Users\mosep\Documents\Virtual Machines\VM-Win10 x64\中的某个文件&#xff08;在我这里好像是VM-Win10 x64.vmx&#xff0c;VM-Win10 x64是我给虚拟机取的名字&#xff09;在被使用中。 找到这个目录&#xff0c;删除.…

【面试题】如何在亿级别用户中检查用户名是否存在?

前言 不知道大家有没有留意过&#xff0c;在使用一些app或者网站注册的时候&#xff0c;提示你用户名已经被占用了&#xff0c;比如我们熟知的《英雄联盟》有些人不知道取啥名字&#xff0c;干脆就叫“不知道取啥名”。 但是有这样困惑的可不止他一个&#xff0c;于是就出现了“…

如何从应用商店Microsoft Store免费下载安装HEVC视频扩展插件

在电脑上打开一张HEIC类型的图片提示缺少HEVC解码器&#xff0c;无法打开查看&#xff0c;现象如下&#xff1a; 这种情况一般会提示我们需要下载安装HEVC解码器&#xff0c;点击“立即下载并安装”会跳转到应用商店&#xff0c;但是我们发现需要付费7元才能下载安装 免费安装…

6. Z 字形变换(Java)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时&#xff0c;排列如…

mac | Windows 本地部署 Seata2.0.0,Nacos 作为配置中心、注册中心,MySQL 存储信息

1、本人环境介绍 系统 macOS sonama 14.1.1 MySQL 8.2.0 &#xff08;官方默认是5.7版本&#xff09; Seata 2.0.0 Nacos 2.2.3 2、下载&数据库初始化 默认你已经有 Nacos、MySQL&#xff0c;如果没有 Nacos 请参考我的文章 &#xff1a; Docker 部署 Nacos&#xff08;单机…