----2009/04/13群聊天记录整理
2009-04-13 13:53:59
跟新A表的时候 需要将部分跟新的数据跟新到B表。
A 设置一个触发器 它执行的时候更新B表
但是如果跟新A表的人不提交 那么B这个时候就被Row-X (SX)锁锁住 了!造成其他跟新B表的人不能跟新 处于等待
怎么样避免这个问题 我不能要求跟新A表的人跟新 就提交数据!同时我不能让更新B表数据的人处于等待状态
2009-04-13 14:02:58
再设计一个表,记录下哪个命令开始执行,和开始时间,当其他命令需要用b表时先检查b表是否锁住,超过一定时间就解锁。
-
清风 (115702552)2009-04-13 14:08:36
TX的本义是Transaction(事务),当一个事务第一次执行数据更改(Insert、Update、Delete)或使用SELECT… FOR UPDATE语句进行查询时,它即获得一个TX(事务)锁,直至该事务结束(执行COMMIT或ROLLBACK操作)时,该锁才被释放。所以,一个TX锁,可以对应多个被该事务锁定的数据行。
在Oracle的每行数据上,都有一个标志位来表示该行数据是否被锁定。Oracle不象其它一些DBMS(数据库管理系统)那样,建立一个链表来维护每一行被加锁的数据,这样就大大减小了行级锁的维护开销,也在很大程度上避免了其它数据库系统使用行级封锁时经常发生的锁数量不够的情况。数据行上的锁标志一旦被置位,就表明该行数据被加X锁,Oracle在数据行上没有S锁。 -
trimmer: LUCKY EG
-
(L)Scarlett (959723649)2009-04-13 14:13:54
ORACLE主要有三大类的锁,分别是
O DML锁
O DDL锁
O 内部锁或LATCH
他们涉及的对象不同
O DML和DDL涉及可见的SCHEMA对象
O LATCH涉及不可见的内部对象,如LIBRARY CACHE -
(L)Scarlett (959723649)2009-04-13 14:19:27
LUCKY EG(313282323)
你说的是对的
警告: 此记录被您的用户锁定!首先检查您是否有此记录显示在别的窗口。如果没有,请点击此处 如果想清除此锁且提交您的请求 -
笨笨 (503172601)2009-04-13 16:08:34
我感觉最好不要用触发器
-
笨笨 (503172601)
2009-04-13 16:25:14
我感觉这个问题,可以这样解决,
你更新成功,使用户操作失败,并且给用户的报错误信息,
用乐观锁可以做到