我对ORACLE数据锁的一点体会

 我来答
天罗网17
2022-10-08 · TA获得超过6200个赞
知道小有建树答主
回答量:306
采纳率:100%
帮助的人:73.8万
展开全部

   我对文章中意向锁的理解 就是 对表的记录进行操作之前 先对表定义(包括表结构 约束等)加了共享锁 这是为了避免对表的DDL操作

  比如 当你往TAB 插入一条记录时 该表的一个字段COL 是允许为空的 插入这条记录的该字段的值是空的 此时 若不对该表定义加共享锁 则另外一SESSION对TAB COL 加非空约束 那该表结构修改就与插入的记录发生冲突了 所以 当执行DML操作是 必定对操作的表加DDL共享锁

  这是我理解的意向锁

   文章中提及 记录行是无共享锁 我对此观点表示不同 当插入/修改子表时 对应的父表的主键记录应该被加共享锁 因为此时要保证父键的存在 经测试 当插入/修改/删除子表时 父表确实被加了SS锁 此时可以对父表的主键做插入动作 但不允许做修改/删除 这符合逻辑 因为插入操作并不影响主外键的关系 但删除/修改则可能

   SHARE VS ROW SHARE有什么区别?

  我猜想 ROW SHARE是(级别= )对表加表定义共享锁 SHARE(级别= )是对表定义及表 所有 的记录加共享锁 但这样就有问题 SELECT FOR UPDATE产生TM= 对查询出来的记录产生TX= 的锁 那这样应该与 表 所有 的记录加共享锁 相冲突了?但实际并不是 实际上 当对表加SHARE锁时 还是可以对该表执行 SELECT FOR UPDATE 但却不可以执行DML操作!

  现我只能这样理解 虽然产生了TX= 的事务锁 但实际上 还并没有真正修改记录 和真正的INSERT UPDATE DELETE 操作还是有区别的 也就是 SELECT FOR UPDATE这个锁有点特别 对加了共享锁的记录 还可以SELECT FOR UPDATE 但若想执行DML语句 则不可以 因为该表的 所有 记录都加了共享锁

   若照第 点的理解 那SRX就是对表加共享锁 对表的所有记录加排它锁 这是我的猜测 不知道在什么地方会使用上这种锁

  总结 查看了ORACLE的文档 其并不解释如何定义的各级别的锁 为什么会这样定义 理由 用途何在?现在我想使用各类型锁 来对ORACLE锁的各级别定义说明

   无

   NULL 可以某些情况下 如分布式数据库的查询会产生此锁

   SS 表结构共享锁

   SX 表结构共享锁+ *** 作的记录的排它锁

   S 表结构共享锁+所有记录共享锁

   SRX 表结构共享锁+所有记录排它锁

   X 表结构排它锁+所有记录排它锁

lishixinzhi/Article/program/Oracle/201311/18652

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式