dbms_rowid 在实际中的使用

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/ctypyb2002/article/details/86647531

os: centos 7.4
db: oracle 12.1.0.2

dbms_rowid 的 package

在这里插入图片描述

测试表准备

SQL> create table tmp_t0(c0 varchar2(100),c1 varchar2(100));

Table created.

SQL> insert into tmp_t0 select '1','11' from dual;

1 row created.

SQL> insert into tmp_t0 select '2','22' from dual;

1 row created.

SQL> set lines 500;
set pages 500;

SQL> col row_id format a30;
col c0 format a10;
col c1 format a10;
col objid format 9999999;
col rel_fno format 9999999;
col blockno format 9999999;
col rownumb format 9999999;

SQL> SELECT rowid as row_id,a.c0,a.c1,
  dbms_rowid.rowid_object(rowid) objid,
  dbms_rowid.rowid_relative_fno(rowid) rel_fno,
  dbms_rowid.rowid_block_number(rowid) blockno,
  dbms_rowid.rowid_row_number(rowid) rownumb 
 FROM tmp_t0 a;
  
ROW_ID			       C0	  C1		OBJID  REL_FNO	BLOCKNO  ROWNUMB
------------------------------ ---------- ---------- -------- -------- -------- --------
AAAWd8AABAAAYD5AAA	       1	  11		92028	     1	  98553        0
AAAWd8AABAAAYD5AAB	       2	  22		92028	     1	  98553        1
  

查找 object

SQL> col owner format a10;
col object_name format a30;
col object_id format 9999999999;
col data_object_id format 9999999999;

SQL> select do.owner,do.object_name,do.object_id,do.data_object_id 
from dba_objects do
where 1=1
  and do.object_name='TMP_T0'
;

OWNER	   OBJECT_NAME			    OBJECT_ID DATA_OBJECT_ID
---------- ------------------------------ ----------- --------------
SYS	   TMP_T0				92028	       92028


查找 relative_fno

SQL> col file_name format a50;
col file_id format 99999;

SQL> select file_name,file_id
  from dba_data_files
 where 1=1
   and file_id=1
   ;
   
FILE_NAME					   FILE_ID
-------------------------------------------------- -------
+DG_DATA/ORCL0/DATAFILE/system.281.998416799		 1

查找 block_number

select * 
  from dba_extents de
 where 1=1
   and de.segment_name='TMP_T0'
   and file_id=1
   and 98553 between de.block_id
                 and de.block_id + de.blocks - 1
   ;
   

查找 rownumb

在 block 的行号,这个看 ROWID 最后三位

其实 ROWID 的组成都包含了这些信息,有空分析下 ROWID 的组成.

参考:
https://docs.oracle.com/database/121/ARPLS/d_rowid.htm#ARPLS053

猜你喜欢

转载自blog.csdn.net/ctypyb2002/article/details/86647531