创建表时可以指定ROWDEPENDENCIES或是NOROWDEPENDENCIES,此子句用来决定是不是使用 行级依赖跟踪(row-level dependency tracking)。打开此功能则每一行数据都会记录一个scn,此scn大于或是等于最后一个修改此行数据的事物提交时的scn,是否使用此功能是在创建表的时候确定的,不能通过alter table来打开或关闭此功能。
若指定ROWDEPENDENCIES,则每行数据会增加6字节。默认不使用此功能。
虚拟列ora_rowscn用来取相关的scn,如果此功能打开,则取每一行数据中记录的scn,如果不打开则取数据块头部的scn。
2.插入数据
3.查看当前t_scn中ora_rowscn
4.dump数据库(checkpoint让数据库写盘,不然dump出的scn不对)
dump出的数据块中的scn转成10进制跟上一步数据库中查出的数据一到处
5.修改数据
6.查看当前t_scn中ora_rowscn( 数据修改过后如果不提交,数据块的scn不会被修改)
7.dump数据库
8.提交
9.查看当前t_scn中ora_rowscn( 提交后数据块的scn已被修改, norowdependencies不会为每一行数据记录scn,现在看到虽然只修改了一条记录,查询结果中同一个块中的数据scn都变了,这是因为此处的scn是取自数据块头部)
10.dump数据库
2.插入数据
3.查看当前t_scn中ora_rowscn
4.修改数据
3.查看当前t_scn中ora_rowscn( 只有被修改的那一行数据的scn变了,同数据块中其它数据的scn没变,说明每条数据单独记录了scn)
若指定ROWDEPENDENCIES,则每行数据会增加6字节。默认不使用此功能。
虚拟列ora_rowscn用来取相关的scn,如果此功能打开,则取每一行数据中记录的scn,如果不打开则取数据块头部的scn。
norowdependencies
1.创建表- drop table t_scn;
create table t_scn
(
c1 number,
c2 varchar2(4000)
) pctfree 80;
2.插入数据
- 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
- 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;
![](http://blog.itpub.net/attachment/201603/10/7417681_1457620864lLDn.jpg)
4.dump数据库(checkpoint让数据库写盘,不然dump出的scn不对)
- alter system checkpoint;
alter system dump datafile 6 block 6782;
![](http://blog.itpub.net/attachment/201603/10/7417681_1457620892XODq.jpg)
5.修改数据
- update t_scn set c2='hiya' where c1=7;
6.查看当前t_scn中ora_rowscn( 数据修改过后如果不提交,数据块的scn不会被修改)
- 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;
![](http://blog.itpub.net/attachment/201603/10/7417681_1457620909wzWa.jpg)
7.dump数据库
- alter system checkpoint;
alter system dump datafile 6 block 6782;
![](http://blog.itpub.net/attachment/201603/10/7417681_1457620931W2w3.jpg)
8.提交
- commit;
9.查看当前t_scn中ora_rowscn( 提交后数据块的scn已被修改, norowdependencies不会为每一行数据记录scn,现在看到虽然只修改了一条记录,查询结果中同一个块中的数据scn都变了,这是因为此处的scn是取自数据块头部)
- 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;
![](http://blog.itpub.net/attachment/201603/10/7417681_14576209478R9z.jpg)
10.dump数据库
- alter system checkpoint;
alter system dump datafile 6 block 6782;
![](http://blog.itpub.net/attachment/201603/10/7417681_1457620964vpvV.jpg)
rowdependencies
1.创建表- drop table t_scn1;
create table t_scn1
(
c1 number,
c2 varchar2(4000)
) rowdependencies pctfree 80;
2.插入数据
- 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
- 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;
![](http://blog.itpub.net/attachment/201603/10/7417681_1457620842h1hq.jpg)
4.修改数据
- update t_scn1 set c2='hiya' where c1=7;
commit;
3.查看当前t_scn中ora_rowscn( 只有被修改的那一行数据的scn变了,同数据块中其它数据的scn没变,说明每条数据单独记录了scn)
- 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;
![](http://blog.itpub.net/attachment/201603/10/7417681_1457620819V8Vm.jpg)