知识大全 说说Oracle的rowid
Posted 字符
篇首语:古人已用三冬足,年少今开万卷余。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 说说Oracle的rowid相关的知识,希望对你有一定的参考价值。
说说Oracle的rowid 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在Oracle中rowid唯一标识每条记录所在的位置 它作为一个伪列在查询中出现
select rowid id
from test_table
where rownum<= ;
ROWID ID
AAAVcbAAPAAAAALAAA
AAAVcbAAPAAAAALAAB
AAAVcbAAPAAAAALAAC
AAAVcbAAPAAAAALAAD
AAAVcbAAPAAAAALAAE
AAAVcbAAPAAAAALAAF
AAAVcbAAPAAAAALAAG
AAAVcbAAPAAAAALAAH
AAAVcbAAPAAAAALAAI
AAAVcbAAPAAAAALAAJ
rowid是由 个字符组成分 个部分 分别是
个字符的对象编号 个字符的文件号 个字符的块编号 个字符的行编号
每一个字符的取值范围以及对应的数值是
| A| | | a| | | | |
| B| | | b| | | | |
| C| | | c| | | | |
| D| | | d| | | | |
| E| | | e| | | | |
| F| | | f| | | | |
| G| | | g| | | | |
| H| | | h| | | | |
| I| | | i| | | | |
| J| | | j| | | | |
| K| | | k| | | +| |
| L| | | l| | | /| |
| M| | | m| | | | |
| N| | | n| | | | |
| O| | | o| | | | |
| P| | | p| | | | |
| Q| | | q| | | | |
| R| | | r| | | | |
| S| | | s| | | | |
| T| | | t| | | | |
| U| | | u| | | | |
| V| | | v| | | | |
| W| | | w| | | | |
| X| | | x| | | | |
| Y| | | y| | | | |
| Z| | | z| | | | |
可以看到rowid是一个 进制的表示方式 利用上述对应表即可计算出
对象编号 AAAVcb =
文件号 AAP =
块号 AAAAAL =
行号 AAA~AAJ = ~
进制的转换完全可以交给机器去做 Oracle也是这么认为的 于是提供了一个叫做dbms_rowid的包 它包含了一系列的方法 我们借助这个包就可完成上述的工作了
select rowid
substr(rowid ) || : || dbms_rowid rowid_object(rowid) 数据对象编号/object_id
substr(rowid ) || : || dbms_rowid rowid_relative_fno(rowid) 文件编号/file_id
substr(rowid )|| : || dbms_rowid rowid_block_number(rowid) 块编号/block_id
substr(rowid )|| : || dbms_rowid ROWID_ROW_NUMBER(rowid) 行编号/row_num
from test_table
where rownum<= ;
ROWID 数据对象编号/object_id 文件编号/file_id 块编号/block_id 行编号/row_num
AAAVcbAAPAAAAALAAA AAAVcb : AAP : AAAAAL : AAA :
AAAVcbAAPAAAAALAAB AAAVcb : AAP : AAAAAL : AAB :
AAAVcbAAPAAAAALAAC AAAVcb : AAP : AAAAAL : AAC :
AAAVcbAAPAAAAALAAD AAAVcb : AAP : AAAAAL : AAD :
AAAVcbAAPAAAAALAAE AAAVcb : AAP : AAAAAL : AAE :
AAAVcbAAPAAAAALAAF AAAVcb : AAP : AAAAAL : AAF :
AAAVcbAAPAAAAALAAG AAAVcb : AAP : AAAAAL : AAG :
AAAVcbAAPAAAAALAAH AAAVcb : AAP : AAAAAL : AAH :
AAAVcbAAPAAAAALAAI AAAVcb : AAP : AAAAAL : AAI :
AAAVcbAAPAAAAALAAJ AAAVcb : AAP : AAAAAL : AAJ :
这个结果对不对呢?我们可以这样验证 注意 以下查询需要DBA权限
首先是object_id
select
owner object_name object_id
from dba_objects
where object_name= TEST_TABLE ;
OWNER OBJECT_NAME OBJECT_ID
TEST TEST_TABLE
然后是文件编号和块编号
select
owner segment_name segment_type extent_id
file_id block_id blocks bytes
from dba_extents
where segment_name= TEST_TABLE ;
OWNER SEGMENT_NAME SEGMENT_TYPE EXTENT_ID FILE_ID BLOCK_ID BLOCKS BYTES
TEST TEST_TABLE TABLE
TEST TEST_TABLE TABLE
编号为 的块落在了编号为 的exntent上 只能说是验证了一半 接下来我们将数据块dump出来看看 不过做之前先为这一行打上 标记 看以下过程
test$logdw@logdw SQL> select rowid t * from test_table t where rownum<= ;
ROWID ID DATA
AAAVcbAAPAAAAALAAA Q
AAAVcbAAPAAAAALAAB Q
AAAVcbAAPAAAAALAAC Q
AAAVcbAAPAAAAALAAD Q
AAAVcbAAPAAAAALAAE Q
rows selected
test$logdw@logdw SQL> update test_table set data=lpad( killkill ) where id= ;
row updated
test$logdw@logdw SQL> select rowid t * from test_table t where rownum<= ;
ROWID ID DATA
AAAVcbAAPAAAAALAAA killkill
AAAVcbAAPAAAAALAAB Q
AAAVcbAAPAAAAALAAC Q
AAAVcbAAPAAAAALAAD Q
AAAVcbAAPAAAAALAAE Q
rows selected
test$logdw@logdw SQL> mit;
做好了 标记 可以dump数据块了
sys$logdw@logdw SQL> select get_trace_name() from dual ;
GET_TRACE_NAME()
/u /app/oracle/diag/rdbms/logdw/logdw/trace/logdw_ora_ trc
sys$logdw@logdw SQL> alter system dump datafile block ;
System altered
打开trc文件 摘录如下
Start dump data blocks tsn: file#: minblk maxblk
Dump of memory from x A F A to x A F A
A F F C B [ kil]
A F F C B C C C E C [lkill ]
block_row_dump:
tab row @ x ac
tl: fb: H FL lb: x cc:
col : [ ] c
col : [ ]
b c
c b c c
cha138/Article/program/Oracle/201311/17417
相关参考
Oracle查询rownum和rowid的区别 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在
Oracle数据库中的索引详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一ROWID的概念
知识大全 关于扩展(extended)的rowid的一些内容
rowid的介绍 先对rowid有个感官认识 SQL>selectROWIDfromBruce_testwhererownum<; ROWID AAABnlA
去年年底做了不少系统的数据迁移大部分系统由于平台和版本的原因做的是逻辑迁移少部分做的是物理迁移有一些心得体会与大家分享 首先说说迁移流程在迁移之前写好方案特别是实施的方案步骤一定要写清楚然后进行
正常情况下往表中新建记录时数据库系统会将数据写入到块并会像这行记录提供一个ROWID值这个值记录了这条记录在硬盘上存储的位置在更新某条记录的时候也是如此数据库系统会根据ROWID的值将需要更新的记
知识大全 喜欢发说说,一天可以发接近10条说说。有些人都不喜欢我发那么多说说。我这是属于什么心理
喜欢发说说,一天可以发接近10条说说。有些人都不喜欢我发那么多说说。我这是属于什么心理?首先希望你不要生气,这属于一种自恋、炫耀的心理家人都不喜欢我怎么发表说说这么巧!我跟家里的人,真的没什么话好讲的
知识大全 为什么别人发个说说那么多人赞,我发说说一个评论都没有
为什么别人发个说说那么多人赞,我发说说一个评论都没有??个人觉得,每个人都有每个人的生活,每个圈子,不必介怀,也不必羨慕别人,做你自己,简单的以自我为中心就好。为什么一个男的发个说说那么多人评论,那么
知识大全 在微信上,别人发了一个带图片的说说,我怎么才能转他的说说
在微信上,别人发了一个带图片的说说,我怎么才能转他的说说1、应该在右上角三个点。2、触碰一下,有转发的选择项。3、然后选择你要转发的微信号,就转发了。在微信上怎么发不带图片的说说1、嘿嘿,这个我知道。
知识大全 写这样的说说,形容最近不顺利的,不顺心,还有心累的,人累的,想一个人静一静,怎么编说说
写这样的说说,形容最近不顺利的,不顺心,还有心累的,人累的,想一个人静一静,怎么编说说!宝宝不开心了我想念静静了顺心顺利快来救救我我心累坏了形容自己在家不被理解,跟在公司也不顺利的说说,用诗句形容时运
知识大全 如果一个女生从来不给你的说说点赞,但是她的说说我评论后,她也有回复。这说明什么
如果一个女生从来不给你的说说点赞,但是她的说说我评论后,她也有回复。这说明什么?这个并不能说明什么,如果一定要说,只能说明她是当你作为一个普通朋友的存在。和女生分手后她发的说说我评论她也照样回复,这说