informix/oracle rowid 问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了informix/oracle rowid 问题相关的知识,希望对你有一定的参考价值。
rowid是怎样的生成机制,比如,当一个表是新表,我插入数据时,rowid是连续的,如果我删除了几条记录,再插入数据,rowid是选择递增还是使用以前被删除记录的rowid?
我在插入记录时,怎么设置插入记录的rowid?
在未做分片的表中,数据库按照表在DBS中的物理地址作为ROWID,此地址在DBS中是固定并且唯一的,所以,未分片表,数据库系统默认为其生成一个隐藏字段叫rowid。
而对于分片表,由于不同的记录在不同的DBS中可能有相同的物理地址,所以数据库没有为分片表默认生成ROWID,如果想在这些表上使用ROWID,则需要执行下面的操作:
ALTER TABLE table_name ADD ROWIDS;
或在建表时使用 WITH ROWIDS表达式
ps:建议在建完ROWID之后,对ROWID做一下统计更新:
update statistics high for table table_name(rowid)
[Oracle] rowid详解
一. rowid
rowid实际上和rownum一样,都是oracle里的虚列,并不真正存在,但却具一个重要功能:
说明数据存在的数据文件\\块\\行,以便快速查找
二. 举例说明
-- 创建表test,插入20条数据
CREATE TABLE test as select ROWNUM AS rn FROM dual connect BY rownum <=20;
-- 通过dbms_rowid包查询各个rowid表示的文件\\块\\行
SELECT tb.ROWID ,ddf.file_name ,dbms_rowid.rowid_block_number(tb.rowid) block_number,
dbms_rowid.rowid_row_number(tb.rowid) row_number
FROM test tb,dba_data_files ddf
WHERE ddf.file_id=dbms_rowid.rowid_to_absolute_fno(tb.rowid,user,'TEST')
</pre><pre name="code" class="plain">
ROWID FILE_NAME
BLOCK_NUMBER ROW_NUMBER
------------------ -------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------ -
AAASRnAAEAAAALjAAA F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 0
AAASRnAAEAAAALjAAB F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 1
AAASRnAAEAAAALjAAC F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 2
AAASRnAAEAAAALjAAD F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 3
AAASRnAAEAAAALjAAE F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 4
AAASRnAAEAAAALjAAF F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 5
AAASRnAAEAAAALjAAG F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 6
AAASRnAAEAAAALjAAH F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 7
AAASRnAAEAAAALjAAI F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 8
AAASRnAAEAAAALjAAJ F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 9
AAASRnAAEAAAALjAAK F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 10
AAASRnAAEAAAALjAAL F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 11
AAASRnAAEAAAALjAAM F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 12
AAASRnAAEAAAALjAAN F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 13
AAASRnAAEAAAALjAAO F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 14
AAASRnAAEAAAALjAAP F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 15
AAASRnAAEAAAALjAAQ F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 16
AAASRnAAEAAAALjAAR F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 17
AAASRnAAEAAAALjAAS F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 18
AAASRnAAEAAAALjAAT F:\\APP\\ADMINISTRATOR\\ORADATA\\ORCL\\USERS01.DBF
739 19
三.结论
试验得出:oracle的rowid存储了每一行数据的准确位置,除非对数据做了行迁移操作,否则这rowid不会随便变化。
以上是关于informix/oracle rowid 问题的主要内容,如果未能解决你的问题,请参考以下文章
Oracle数据库中rowid啥作用????!!!!!谢谢!!!!