ITPub博客

首页 > 数据库 > Oracle > ora_rowscn

ora_rowscn

原创 Oracle 作者:dasong2410 时间:2016-03-10 22:54:09 0 删除 编辑
创建表时可以指定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;




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7417681/viewspace-2055290/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-05-12

  • 博文量
    66
  • 访问量
    317274