- 最后登录
- 2016-6-27
- 在线时间
- 134 小时
- 威望
- 351
- 金钱
- 2586
- 注册时间
- 2012-3-16
- 阅读权限
- 60
- 帖子
- 188
- 精华
- 6
- 积分
- 351
- UID
- 309
|
1#
发表于 2012-4-28 10:39:58
|
查看: 7730 |
回复: 3
考虑以下情况:
节点1修改数据块A,然后节点2也修改数据块A,两个节点都没有提交:
此时current数据块在节点2,pi数据块在节点1
这时候节点1读取数据块A,那么数据块是从节点2读取还是从节点1读取呢?
以下是我的测试,有些地方很诡异的:
--节点1
create table test(id number);
insert into test values(1);
insert into test values(2);
commit;
update test set id=id+1 where id=1;
select inst_id,dirty,status from gv$bh where file#=1 and block#=89305 and status<>'free';
INST_ID DIRTY STATUS
1 Y xcur
1 N cr
--节点2
update test set id=id+1 where id=2;
INST_ID DIRTY STATUS
1 Y pi
1 N cr
1 N cr
1 N cr
2 Y xcur
2 N cr
2 N cr
--节点1
select * from test;
INST_ID DIRTY STATUS
1 Y pi
1 N cr
1 N cr
2 Y scur
2 N cr
2 N cr
这里有点诡异,为什么节点1的cr块减少一个了?这里的block是从节点1读取还是从节点2读取的?
--继续在节点1查询
select * from test;
INST_ID DIRTY STATUS
1 Y pi
1 Y xcur
1 N cr
1 N cr
1 N cr
1 N cr
2 Y pi
2 N cr
2 N cr
此时current block传到了节点1,为什么?
--在节点2查询
INST_ID DIRTY STATUS
1 Y pi
1 N cr
1 N cr
1 N cr
1 N cr
1 N cr
2 Y pi
2 Y xcur
2 N cr
2 N cr
此时current block又回到了节点2,为什么? |
|