ora_rowscn

创建表时可以指定ROWDEPENDENCIES或是NOROWDEPENDENCIES,此子句用来决定是不是使用 行级依赖跟踪(row-level dependency tracking)。打开此功能则每一行数据都会记录一个scn,此scn大于或是等于最后一个修改此行数据的事物提交时的scn,是否使用此功能是在创建表的时候确定的,不能通过alter table来打开或关闭此功能。

若指定ROWDEPENDENCIES,则每行数据会增加6字节。默认不使用此功能。

虚拟列ora_rowscn用来取相关的scn,如果此功能打开,则取每一行数据中记录的scn,如果不打开则取数据块头部的scn。

norowdependencies

1.创建表

  1. drop table t_scn;
    create table t_scn
    (
      c1 number,
      c2 varchar2(4000)
    ) pctfree 80;


2.插入数据

  1. insert into t_scn(c1, c2)
    select rownum c1, 'spaceholder, spaceholder, spaceholder, spaceholder, spaceholder, spaceholder, spaceholder, spaceholder, spaceholder' c2
      from dual connect by rownum<40;
    commit;

3.查看当前t_scn中ora_rowscn

  1. select ora_rowscn,
           dbms_rowid.rowid_to_absolute_fno(rowid, 'FOX', 'T_SCN') fno,
           dbms_rowid.rowid_block_number(rowid) blockno,
           c1,
           c2
      from t_scn
     order by c1;




4.dump数据库(checkpoint让数据库写盘,不然dump出的scn不对)

  1. alter system checkpoint;
    alter system dump datafile 6 block 6782;

dump出的数据块中的scn转成10进制跟上一步数据库中查出的数据一到处


5.修改数据

  1. update t_scn set c2='hiya' where c1=7;

6.查看当前t_scn中ora_rowscn( 数据修改过后如果不提交,数据块的scn不会被修改

  1. select ora_rowscn,
           dbms_rowid.rowid_to_absolute_fno(rowid, 'FOX', 'T_SCN') fno,
           dbms_rowid.rowid_block_number(rowid) blockno,
           c1,
           c2
      from t_scn
     order by c1;



7.dump数据库

  1. alter system checkpoint;
    alter system dump datafile 6 block 6782;




8.提交

  1. commit;

9.查看当前t_scn中ora_rowscn( 提交后数据块的scn已被修改, norowdependencies不会为每一行数据记录scn,现在看到虽然只修改了一条记录,查询结果中同一个块中的数据scn都变了,这是因为此处的scn是取自数据块头部

  1. select ora_rowscn,
           dbms_rowid.rowid_to_absolute_fno(rowid, 'FOX', 'T_SCN') fno,
           dbms_rowid.rowid_block_number(rowid) blockno,
           c1,
           c2
      from t_scn
     order by c1;




10.dump数据库

  1. alter system checkpoint;
    alter system dump datafile 6 block 6782;




rowdependencies

1.创建表

  1. drop table t_scn1;
    create table t_scn1
    (
      c1 number,
      c2 varchar2(4000)
    rowdependencies pctfree 80;


2.插入数据

  1. insert into t_scn1(c1, c2)
    select rownum c1, 'spaceholder, spaceholder, spaceholder, spaceholder, spaceholder, spaceholder, spaceholder, spaceholder, spaceholder' c2
      from dual connect by rownum<40;
    commit;


3.查看当前t_scn中ora_rowscn

  1. select ora_rowscn,
           dbms_rowid.rowid_to_absolute_fno(rowid, 'FOX', 'T_SCN1') fno,
           dbms_rowid.rowid_block_number(rowid) blockno,
           c1,
           c2
      from t_scn1
     order by c1;




4.修改数据

  1. update t_scn1 set c2='hiya' where c1=7;
    commit;


3.查看当前t_scn中ora_rowscn( 只有被修改的那一行数据的scn变了,同数据块中其它数据的scn没变,说明每条数据单独记录了scn

  1. select ora_rowscn,
           dbms_rowid.rowid_to_absolute_fno(rowid, 'FOX', 'T_SCN1') fno,
           dbms_rowid.rowid_block_number(rowid) blockno,
           c1,
           c2
      from t_scn1
     order by c1;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值