我想知道,oracle中的ROWID是否增量生成? 如果我嘗試下面的查詢如何在內部生成oracle rowid?
select min(ROWID) from table
我總是會得到第一插入行的ROWID表或我可能最終得到任何隨機行也的ROWID? 這將是非常有益的,如果有人可以請扔光
我想知道,oracle中的ROWID是否增量生成? 如果我嘗試下面的查詢如何在內部生成oracle rowid?
select min(ROWID) from table
我總是會得到第一插入行的ROWID表或我可能最終得到任何隨機行也的ROWID? 這將是非常有益的,如果有人可以請扔光
min(ROWID)
將始終返回您表的第一行。
對於數據庫中的每一行,ROWID僞列返回該行的 地址。 Oracle數據庫ROWID值包含必要的信息 來定位行:
- 的對象的數據對象數
- 在其中行駐留在
- 的行的位置上的數據文件的數據塊數據塊(第一行是0)
- 的數據文件,其中所述行駐留(第一文件爲1)。文件編號是相對於表空間的。
通常,一個rowid值唯一地標識數據庫中的一行。 然而,在不同的表中的行的是一起存儲在同一 集羣中可以具有相同的rowid。
前往官方網站Here瞭解更多詳情。
「最小」rowid將可能不是始終提供表中的第一個插入的行。從the documentation引用:
將rowid分配給某個行塊後,rowid可以在特殊情況下更改。例如,如果啓用了行移動,那麼由於分區鍵更新,閃回表操作,收縮表操作等,rowid可能會更改。如果行移動被禁用,那麼如果使用Oracle數據庫實用程序導出和導入該行,rowid可能會更改。
「依此類推」表示有很多原因會導致rowid改變。這可以很容易地與一個小例子證明:
create table tmp_test (a number);
insert into tmp_test values (1);
select rowid, a from tmp_test;
ROWID A
------------------ ----------
AABo3AAFvAAAda6AAA 1
alter table tmp_test move;
select rowid, a from tmp_test;
ROWID A
------------------ ----------
AABo3BAFvAAAdbjAAA 1
你會發現,一個alter table
操作之後的唯一ROWID發生了變化。
如果rowid可以改變和甲骨文沒有明確保證「最低」的rowid永遠是第一個插排,你應該有這樣的跟蹤,如果需要的另一種方式。時間戳或遞增序列是正常的。
它必須找到第一個插入的行不參考任何數據非常不尋常的要求。如果這是你使用的是爲什麼你需要做的這一點,我會再看看考慮。