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

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

0

积分

0

好友

18

主题
1#
发表于 2013-2-28 15:50:27 | 查看: 5647| 回复: 7
你好:
我当前在看Oracle DSI 302的第15章节,关于CR块生成的部分。里面有一些地方不是很理解,请给予指点。
第15-8页中,列出了数据块的一些判断条件。
对于这个逻辑比较的说明如下:
CR_SCN >= Snap_SCN
and (Env_UBA = 0    or
CR_XID = 0    or
(CR_XID!=xid and !CR_SFL)
or CR_XID=xid and
Env_UBA<CR_UBA)?

这一部分我不是很理解,主要是三个or 条件,这3种情况主要对应什么场合?

2#
发表于 2013-2-28 15:52:19
目前忙, 该问题延迟到夜间回答

回复 只看该作者 道具 举报

3#
发表于 2013-2-28 20:27:49
首先定义 名词:

CR_SCN:        SCN for the block in the buffer
Snap_SCN:                SCN used to construct a snapshot                         of a block (this is the consistency                                 point reference)

CR_SFL:         snapshot flag
Env_UBA:                 UBA of the current transaction
CR_UBA:         UBA associated with the transaction indicated by                 CR_XID



CR_XID:         ID of the transaction that constructed this CR                         version of the block

回复 只看该作者 道具 举报

4#
发表于 2013-2-28 20:38:31
CR_SCN >= Snap_SCN
and (Env_UBA = 0    or CR_XID = 0    or (CR_XID!=xid and !CR_SFL)  or CR_XID=xid and  Env_UBA<CR_UBA)?

回复 只看该作者 道具 举报

5#
发表于 2013-2-28 20:41:23
若 CR_XID = 0 ,则从该cr块构造开始,这个版本块没有变化或者应用undo ,因此不会有变化丢失

回复 只看该作者 道具 举报

6#
发表于 2013-2-28 20:44:35
若 CR_XID 不等于当前事务 且 CR_SFL=0, 这个块里缺失的不是本事务的变化,且其他事务的变化均可见,即此场景中只有一个事务的变化被回滚。

回复 只看该作者 道具 举报

7#
发表于 2013-2-28 20:46:23
若 CR_XID = Current XID and ENV_UBA < CR_UBA

虽然本事务在该块中不可见,但是 该块版本 对应指定snapshot后的时间,因此这些变化可以不可见。

回复 只看该作者 道具 举报

8#
发表于 2013-3-4 14:25:07
Maclean Liu(刘相兵 发表于 2013-2-28 20:46
若 CR_XID = Current XID and ENV_UBA < CR_UBA

虽然本事务在该块中不可见,但是 该块版本 对应指定snaps ...

谢谢您的指点。对于cr块的产生。我有一个问题想咨询一下:
在单用户环境先,我执行了一个update 操作,发现系统也产生了cr块。请问这个是基于什么原因啊?为什么不在另一个用户查询的时候生成cr块?
例:
SQL> create table t1(a1 int);

表已创建。

SQL> insert into t1 values(1);

已创建 1 行。

SQL> select
  2    o.object_name,b.dbarfil,b.dbablk,b.tch
  3    ,decode(state,0,'free',1,'xcur',2,'scur',3,'cr', 4,'read',5,'mrec'
  4    ,6,'irec',7,'write',8,'pi') state
  5    , blsiz  blocks
  6  from x$bh b , dba_objects o
  7  where b.obj = o.data_object_id
  8    and o.object_name = 'T1' and state!=0
  9  ;

OBJECT_NAM    DBARFIL     DBABLK        TCH STATE     BLOCKS
---------- ---------- ---------- ---------- ----- ----------
T1                  1      92762          1 xcur        8192
T1                  1      92761          2 xcur        8192
SQL> commit;

提交完成。
SQL> update t1 set a1=2;

已更新 1 行。

SQL> select
  2    o.object_name,b.dbarfil,b.dbablk,b.tch
  3    ,decode(state,0,'free',1,'xcur',2,'scur',3,'cr', 4,'read',5,'mrec'
  4    ,6,'irec',7,'write',8,'pi') state
  5    , blsiz  blocks
  6  from x$bh b , dba_objects o
  7  where b.obj = o.data_object_id
  8    and o.object_name = 'T1' and state!=0
  9  ;

OBJECT_NAM    DBARFIL     DBABLK        TCH STATE     BLOCKS
---------- ---------- ---------- ---------- ----- ----------
T1                  1      92762          1 xcur        8192
T1                  1      92762          2 cr          8192
T1                  1      92761          3 xcur        8192

在上述的过程中,在执行了update 之后,本地Session 进行查询,发现了系统产生了一个cr块。这个是基于什么考虑?

回复 只看该作者 道具 举报

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

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

GMT+8, 2024-12-27 15:53 , Processed in 0.048912 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

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