2011年7月16日土曜日

[基础知识] rowid 与 urowid

1. rowid

数据库库中一行的实际物理地址

可以改变 rowid 的操作

 分区表中更新一行分区键, 使这一行必须移动到另一分区
 flashbackup table
 move以及分区操作(合并, 分解)
 alter table shink space

1-2. 查询 rowid 的数据库包
select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from t;

1-3. 查询 rowid 的自建函数
select get_rowid('AAAMiyAABAAAOqiAAA') from dual;
--
create or replace function get_rowid (l_rowid in varchar2)
return varchar2
is
    ls_my_rowid varchar2(200);
    rowid_type number;
    object_number number;
    relative_fno number;
    block_number number;
    row_number number;
begin
    dbms_rowid.rowid_info(l_rowid,rowid_type,object_number,relative_fno, block_number, row_number);
    ls_my_rowid := 'Object# is      :'||to_char(object_number)||chr(10)||
        'Relative_fno is :'||to_char(relative_fno)||chr(10)||
        'Block number is :'||to_char(block_number)||chr(10)||
        'Row number is   :'||to_char(row_number);
return ls_my_rowid;
end;
/
--

1-4. rowid 的格式
下图中的 Data Object Number 等于 dba_objects 视图的 dba_object_id 列
此列在 truncate, alter table move 等操作后会发生改变, 而 object_id 列始终不变

 


2. urowid
# 行主键的一种表示(IOT表,或通过异构数据库网关访问的没有固定rowid的表),取决于所指向的对象

0 件のコメント:

コメントを投稿