知识大全 说说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的区别

Oracle查询rownum和rowid的区别  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在

知识大全 Oracle数据库中的索引详解

Oracle数据库中的索引详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一ROWID的概念

知识大全 关于扩展(extended)的rowid的一些内容

     rowid的介绍  先对rowid有个感官认识    SQL>selectROWIDfromBruce_testwhererownum<;    ROWID    AAABnlA

知识大全 oracle 数据库数据迁移解决方案

  去年年底做了不少系统的数据迁移大部分系统由于平台和版本的原因做的是逻辑迁移少部分做的是物理迁移有一些心得体会与大家分享  首先说说迁移流程在迁移之前写好方案特别是实施的方案步骤一定要写清楚然后进行

知识大全 不让链化现象影响数据库性能

  正常情况下往表中新建记录时数据库系统会将数据写入到块并会像这行记录提供一个ROWID值这个值记录了这条记录在硬盘上存储的位置在更新某条记录的时候也是如此数据库系统会根据ROWID的值将需要更新的记

知识大全 喜欢发说说,一天可以发接近10条说说。有些人都不喜欢我发那么多说说。我这是属于什么心理

喜欢发说说,一天可以发接近10条说说。有些人都不喜欢我发那么多说说。我这是属于什么心理?首先希望你不要生气,这属于一种自恋、炫耀的心理家人都不喜欢我怎么发表说说这么巧!我跟家里的人,真的没什么话好讲的

知识大全 为什么别人发个说说那么多人赞,我发说说一个评论都没有

为什么别人发个说说那么多人赞,我发说说一个评论都没有??个人觉得,每个人都有每个人的生活,每个圈子,不必介怀,也不必羨慕别人,做你自己,简单的以自我为中心就好。为什么一个男的发个说说那么多人评论,那么

知识大全 在微信上,别人发了一个带图片的说说,我怎么才能转他的说说

在微信上,别人发了一个带图片的说说,我怎么才能转他的说说1、应该在右上角三个点。2、触碰一下,有转发的选择项。3、然后选择你要转发的微信号,就转发了。在微信上怎么发不带图片的说说1、嘿嘿,这个我知道。

知识大全 写这样的说说,形容最近不顺利的,不顺心,还有心累的,人累的,想一个人静一静,怎么编说说

写这样的说说,形容最近不顺利的,不顺心,还有心累的,人累的,想一个人静一静,怎么编说说!宝宝不开心了我想念静静了顺心顺利快来救救我我心累坏了形容自己在家不被理解,跟在公司也不顺利的说说,用诗句形容时运

知识大全 如果一个女生从来不给你的说说点赞,但是她的说说我评论后,她也有回复。这说明什么

如果一个女生从来不给你的说说点赞,但是她的说说我评论后,她也有回复。这说明什么?这个并不能说明什么,如果一定要说,只能说明她是当你作为一个普通朋友的存在。和女生分手后她发的说说我评论她也照样回复,这说