oracle中insert会锁表吗

oracle中insert会锁表;当oracle执行insert等DML语句时,会在所操作的表上申请一个锁,两个insert语句同时试图向一个表进行操作时,就会造成会话被堵塞,等待其他会话提交或回滚,因而造成死锁。

oracle中insert会锁表吗

本教程操作环境:Windows10系统、Oracle 11g版、Dell G3电脑。

oracle中insert会锁表吗

oracle中insert会锁表

当ORACLE执行insert等DML语句时,会首先自动在所要操作的表上申请一个TM锁,当TM锁获得后,再自动申请TX类型的锁。当两个或多个会话在表的同一条记录上执行DML语言时,第一个会话在记录上加锁,其它的会话处于等待状态,一直到第一个会话提交后TX锁释放,其它的会话才可以加锁。

考虑是因为两个insert语句同时试图向一个表中插入PK或unique值相同的数据,而造成其中会话被阻塞,等待其它会话提交或回滚,因而造成死锁。

这种情况,只要其中任何一个session提交,另外一个就会报出ORA-00001:违反唯一性约束条件,死锁终止;或者其中一个session回滚,另外一个即可正常执行。

在oracle中,锁表的原因是当一个程序执行了对一个表的insert,并且还未commite时,另一个程序也对同一个表进行insert,则此时就会发生资源正忙的异常,也就是锁表。

主要的锁表原因有:

(1) A程序执行了对 tableA 的 insert ,并还未 commite时,B程序也对tableA 进行insert 则此时会发生资源正忙的异常 就是锁表

(2)锁表常发生于并发而不是并行(并行时,一个线程操作数据库时,另一个线程是不能操作数据库的,cpu 和i/o 分配原则)

减少锁表的概率方法:

(1)减少insert 、update 、delete 语句执行 到 commite 之间的时间。具体点批量执行改为单个执行、优化sql自身的非执行速度

(2)如果异常对事物进行回滚

锁表原因可能是修改了行数据,忘了提交,也会造成锁表。

扩展知识:

锁表建议先查原因再做决定。

1锁表查询的代码有以下的形式:

select count(*) from v$locked_object;select * from v$locked_object;

登录后复制

2.查看哪个表被锁

select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

登录后复制

3查看是哪个session引起的

select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;

登录后复制

推荐教程:《Oracle视频教程》

以上就是oracle中insert会锁表吗的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2069187.html

(0)
上一篇 2025年2月24日 07:22:35
下一篇 2025年2月24日 07:23:03

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 《Champions Tactics Reforged》Steam页面上线 发售日待定

    育碧策略rpg新作《champions tactics reforged》已登陆steam!支持简繁体中文,发售日期尚未公布,感兴趣的玩家可前往steam商店页面查看详情:点击此处 游戏概述: 《Champions Tactics™ Ref…

    2025年3月28日 游戏
    100
  • LNMP能支持哪些应用

    LNMP,即Linux、Nginx、MySQL和PHP的组合,是构建动态网站和服务器的常用架构。它能够支持多种类型的应用,包括: 流行的博客平台: 例如WordPress,充分利用PHP和MySQL数据库。各种PHP应用: 涵盖内容管理系统…

    2025年3月28日
    100
  • oracle数据库怎么导入 oracle数据库怎么导出

    Oracle数据库迁移主要依靠expdp和impdp工具。1. expdp用于导出数据,其语法简洁但选项丰富,需注意目录权限和文件大小,避免导出失败;2. impdp用于导入数据,需确保目标数据库空间充足、字符集一致且无同名对象,可使用re…

    2025年3月28日
    100
  • 怎么远程连接oracle数据库

    远程连接Oracle需配置监听器、服务名及网络。1. 客户端请求经监听器转发至数据库实例;2. 实例验证身份后建立会话;3. 使用SQL*Plus连接需指定用户名/密码、主机名、端口号及服务名,确保客户端能访问服务器且配置一致。连接失败时,…

    2025年3月28日
    100
  • oracle怎么连接远程数据库 oracle数据库怎么远程连接

    连接远程Oracle数据库,主要方法是使用SQL*Plus工具,连接字符串格式为:1. connect username/password@//host_address:port/service_name;或更便捷地,2. 通过配置tnsn…

    2025年3月28日
    100
  • 大事务导致的回滚段膨胀问题解决方案

    大事务导致的回滚段膨胀:一场数据库性能的噩梦,以及如何逃离 很多开发者都经历过这种痛苦:数据库性能突然下降,查询变慢,甚至直接宕机。罪魁祸首,往往是那些庞大无比的事务,它们撑爆了回滚段,让数据库喘不过气来。这篇文章,咱们就来深入探讨这个问题…

    2025年3月28日
    100
  • Java 函数调用与编译器指令是如何映射的?

    Java 函数调用与编译器指令的映射 Java 是一种编译型语言,这意味着在运行 Java 程序之前,它会被编译成字节码。字节码是一种平台无关的指令集,可以在任何支持 Java 虚拟机的 (JVM) 平台上运行。 函数调用 当 Java 程…

    2025年3月14日
    200
  • java怎么安装安装

    如何安装 Java?下载并安装 Java 开发工具包 (JDK);根据操作系统和功能要求选择合适的 JDK 版本;安装完成后,设置环境变量以设置 Java 的安装位置;使用命令 java -version 验证安装是否成功。 如何安装 Ja…

    2025年3月14日
    200
  • java源码怎么安装

    Java 源码安装分为以下步骤:安装 Java 开发工具包 (JDK);配置系统环境变量指向 JDK 安装目录;使用 javac 编译器编译 Java 源码;使用 java 命令运行编译后的 Java 程序。 Java 源码安装指南 安装 …

    2025年3月14日
    200
  • 怎么安装java 11

    Java 11 安装步骤:下载安装程序;运行安装程序;设置 JAVA_HOME 环境变量;添加 Java 到 PATH 环境变量;验证安装。 如何安装 Java 11 简介 Java 11 是 Java 平台的一个主版本,于 2018 年 …

    2025年3月14日
    200

发表回复

登录后才能评论