Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

48

主题
1#
发表于 2013-9-8 10:39:30 | 查看: 3595| 回复: 2
本帖最后由 lory 于 2013-9-8 10:40 编辑

DB:10.2.0.5 windows 2008 64 bit
创建一个有unique key的表
create table t4 (x int constraint x_1u unique);
session 1:

insert into t4 values (4);

session 2:
insert into t4 values (4);

此时观察到所得情况是:
  1. ADDR        KADDR        SID        TYPE        ID1        ID2        LMODE        REQUEST        CTIME        BLOCK
  2. 000007FF08BB5518        000007FF08BB5540        138        TM        61333        0        3        0        6        0
  3. 000007FF08084088        000007FF080840C0        138        TX        196611        1082        6        0        6        0
  4. 000007FF09109FF0        000007FF0910A010        138        TX        65568        981        0        4        6        0
  5. 000007FF0807B8E8        000007FF0807B920        140        TX        65568        981        6        0        12        1
  6. 000007FF08BB53F8        000007FF08BB5420        140        TM        61333        0        3        0        12        0
复制代码
被block的session为何会有两个TX锁呢,其中一个是在等待另一个session的TX锁,另外一个是干嘛的呢
2#
发表于 2013-9-8 22:22:02
对于  唯一constraint or unique index 你插入2个相等的 key值的话, 如果前者没有commit的话,DML也要遵循读一致性,即认为 前面的一个和我此次要插入相等的KEY还没有完成, 可以有2种情况:

1、 对方成功commit ,那么显然  后者的插入要失败,否则违反约束; 但是后者不可能定期去查这个块来确认对方commit了吗, 需要依赖于TX 队列锁的 post机制, 如果对方 commit/rollback都会释放TX并告知我

2、 如果对方rollback,那么也会post后者,则后者可以插入

这有什么问题吗?

回复 只看该作者 道具 举报

3#
发表于 2013-9-9 10:08:08
Maclean Liu(刘相兵 发表于 2013-9-8 22:22
对于  唯一constraint or unique index 你插入2个相等的 key值的话, 如果前者没有commit的话,DML也要遵循 ...

谢谢,这样就明白许多了

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2025-1-4 07:28 , Processed in 0.045630 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569