【Oracle】DBMS_ROWID定位数据行物理存储位置

2014-11-24 17:30:35 · 作者: · 浏览: 0

dbms_rowid.rowid_relative_fno:定位该数据行所在的数据文件


dbms_rowid.rowid_block_number:定位该数据行在数据文件的第多少个块


dbms_rowid.rowid_row_number:定位该数据行在数据块的第多少行


下面举例进行查看:


SCOTT@ORCL>desc emp


Name Null Type


----------------------------------------- -------- ----------------------------


EMPNO NOT NULL NUMBER(4)


ENAME VARCHAR2(10)


JOB VARCHAR2(9)


MGR NUMBER(4)


HIREDATE DATE


SAL NUMBER(7,2)


COMM NUMBER(7,2)


DEPTNO NUMBER(2)



SCOTT@ORCL>col location for a20


SCOTT@ORCL>select empno,rowid,dbms_rowid.rowid_relative_fno(rowid) || '_' ||dbms_rowid.rowid_block_number(rowid) || '_' || dbms_rowid.rowid_row_number(rowid) location


2 from emp;



EMPNO ROWID LOCATION


---------- ------------------ --------------------


7369 AAAMfMAAEAAAAAgAAA 4_32_0


7499 AAAMfMAAEAAAAAgAAB 4_32_1


7521 AAAMfMAAEAAAAAgAAC 4_32_2


7566 AAAMfMAAEAAAAAgAAD 4_32_3


7654 AAAMfMAAEAAAAAgAAE 4_32_4


7698 AAAMfMAAEAAAAAgAAF 4_32_5


7782 AAAMfMAAEAAAAAgAAG 4_32_6


7788 AAAMfMAAEAAAAAgAAH 4_32_7


7839 AAAMfMAAEAAAAAgAAI 4_32_8


7844 AAAMfMAAEAAAAAgAAJ 4_32_9


7876 AAAMfMAAEAAAAAgAAK 4_32_10



EMPNO ROWID LOCATION


---------- ------------------ --------------------


7900 AAAMfMAAEAAAAAgAAL 4_32_11


7902 AAAMfMAAEAAAAAgAAM 4_32_12


7934 AAAMfMAAEAAAAAgAAN 4_32_13



14 rows selected.


拿第一行数据进行说明该行的ROWID伪列的值为 AAAMfMAAEAAAAAgAAA,可以通过ROWID包通过这个ROWID伪列转换出来的值为4_32_0,代表该行在数据文件4的第32个数据块的第0行。