« 《深入浅出Oracle》技术交流会PPT下载 | Blog首页 | DBA语录之:规范的重要 »
Oracle HowTo:使用DBMS_UTILITY转换Block地址
链接:https://www.eygle.com/archives/2006/09/how_to_use_dbms_utility.html
很多时候,我们可以从Oracle的Trace文件中获得Block的DBA(Data Block Address),有时候需要对这个地址进行转换才能得到相应的Block地址。
有的trace文件中已经包含了地址转换,例如:
Start dump data blocks tsn: 4 file#: 4 minblk 465 maxblk 465 buffer tsn: 4 rdba: 0x010001d1 (4/465) |
而有时候trace文件里只包含一个RDBA,比如上周我们遇到的一个案例:
oer 8102.2 - obj# 111465, rdba: 0x08811ba3 kdk key 8102.2: ncol: 2, len: 15 key: (15): 07 78 6a 08 1f 01 14 15 06 06 00 00 06 00 73 mask: (4096): |
这里的Rdba我们怎样才能转换为文件号和数据块号呢?
通过手工转换,可以参考如下文章:
http://www.eygle.com/archives/2004/08/how_to_convert_rdba.html
Oracle同时提供一个系统包 dbms_utility 可以用于对RDBA进行转换。
注意,对于上面的 rdba: 0x08811ba3,首先要做一个16进制到10进制的转换,转换方法参考:
http://www.eygle.com/archives/2004/06/oracle_howto_convert.html
下面我们使用dbms_utility 来进行转换:
SQL> variable file# number PL/SQL procedure successfully completed. SQL> execute :block#:=dbms_utility.data_block_address_block(to_number('8811ba3','xxxxxxx')); PL/SQL procedure successfully completed. SQL> print file# FILE# SQL> print block# BLOCK# |
这样就可以通过dba_extents获得相关对象信息。
当然这里oer 8102.2 的信息已经告诉我们,出问题的是一个索引:
$ oerr ora 8102 08102, 00000, "index key not found, obj# %s, dba %s (%s)" // *Cause: Internal error: possible inconsistency in index // *Action: Send trace file to your customer support representative, along // with information on reproducing the error |
-The End-
历史上的今天...
>> 2018-09-04文章:
>> 2017-09-04文章:
>> 2009-09-04文章:
>> 2008-09-04文章:
>> 2007-09-04文章:
>> 2005-09-04文章:
By eygle on 2006-09-04 15:10 | Comments (0) | HowTo | 891 |