Oracle的ROWID簡介

來源:互聯網
上載者:User

ROWID 是一個類似於rownum的偽列,用於定位元據庫中一條記錄的一個相對唯一地址值。通常情況下,該值在該行資料插入到資料庫表時即

被確定且唯一。而對於聚簇表,由於聚簇特性,不同表上的記錄由於儲存在相同的簇上,因此會擁有相同的ROWID。資料庫的大多數操作都是通

過ROWID來完成的,而且使用ROWID來進行單記錄定位速度是最快的。下面將給出ROWID的相關描述。

一、ROWID的特性組成及用途

1、特性

相對唯一性(聚簇表上不唯一)

一旦確定,不可隨意更改

使用10個位元組儲存(擴充rowid),顯示為18位的字串

特殊情況下,ROWID會發生變化(如下列情形)

表的匯入匯出操作

alter table tab_name move

alter table tab_name shrink space

flashback table tab_name

拆分分區表

分區表上更新一個值後記錄被移入到新分區

合并兩個分區

2、組成(擴充ROWID)

資料庫物件的對象編號

資料庫物件所在檔案的檔案編號

資料庫物件上塊的編號

塊上的行編號(起始值為0)

3、用途

快速定位單行記錄

展示行在表上如何儲存

表上的一行的唯一識別碼

用作資料類型 column_name rowid

4、限制rowid,擴充rowid

限制rowid用於早期Oracle版本(Oracle 8 以前),rowid由file#+block#+row#組成,佔用6個bytes的空間

擴充rowid,由data_object_id#+rfile#+block#+row#組成,佔用10個bytes的空間

二、ROWID的格式

SQL> select rowid,t.* from dept t where t.deptno=10;

ROWID                  DEPTNO DNAME          LOC

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

AAAO0fAAFAAAAlmAAA         10 ACCOUNTING     NEW YORK        /*

AAAO0f            -     AAF              -    AAAAlm         -    AAA

對象號(6個字元)         檔案號(3個字元)       塊號(6個字元)       行號(3個字元)   */

三、查看ROWID資訊及相關示範

1、查看堆表上rowid及擷取rowid資訊

SQL> select rowid,dept.* from dept ;      -->查看錶dept中所有記錄的rowid

ROWID                  DEPTNO DNAME          LOC

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

AAAO0fAAFAAAAlmAAA         10 ACCOUNTING     NEW YORK

AAAO0fAAFAAAAlmAAB         20 RESEARCH       DALLAS

AAAO0fAAFAAAAlmAAC         30 SALES          CHICAGO

AAAO0fAAFAAAAlmAAD         40 OPERATIONS     BOSTON

SQL> select object_name,object_id from dba_objects where object_name='DEPT' and owner='SCOTT';-->查看對象id

OBJECT_NAME           OBJECT_ID

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

DEPT                      60703

SQL> select dbms_rowid.rowid_object(rowid) object_id,  -->使用dbms_rowid包獲得rowid的十進位資訊

2  dbms_rowid.rowid_relative_fno(rowid) file_id,

3  dbms_rowid.rowid_block_number(rowid) block_id,

4  dbms_rowid.rowid_row_number(rowid) num

5  from dept;

OBJECT_ID    FILE_ID   BLOCK_ID        NUM           -->此處可以看到對應的對象號,檔案號,塊號以及行號

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

60703          5       2406          0

60703          5       2406          1  

60703          5       2406          2

60703          5       2406          3

SQL> col file_name format a50

SQL> select file_id,file_name from dba_data_files where file_id=5;  -->通過檔案id獲得對象所在資料檔案的位置

FILE_ID FILE_NAME

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

5 /u02/database/CNMMBO/oradata/CNMMBO_system_tbl.dbf

SQL> select rowid,              -->這個查詢按照rowid的定義格式進行分離rowid

2  substr(rowid,1,6) "object",

3  substr(rowid,7,3) "file",

4  substr(rowid,10,6) "block",

5  substr(rowid,16,3) "row"

6  from dept;

ROWID              object             file      block              row

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

AAAO0fAAFAAAAlmAAA AAAO0f             AAF       AAAAlm             AAA

AAAO0fAAFAAAAlmAAB AAAO0f             AAF       AAAAlm             AAB

AAAO0fAAFAAAAlmAAC AAAO0f             AAF       AAAAlm             AAC

AAAO0fAAFAAAAlmAAD AAAO0f             AAF       AAAAlm             AAD

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.