ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 由Rdba发现 block地址(使用dbms_utility)

由Rdba发现 block地址(使用dbms_utility)

原创 Linux操作系统 作者:lovehewenyu 时间:2012-12-12 18:20:19 0 删除 编辑

由 Rdba 发现 block 地址 ( 使用 dbms_utility)

 

本文转载( eygle )

http://www.eygle.com/archives/2006/09/how_to_use_dbms_utility.html

 

一、问题

Start dump data blocks tsn: 9 file#: 6 minblk 20 maxblk 20

buffer tsn: 9 rdba: 0x0 1800014 (6/20)

scn: 0x0000.001e917f seq: 0x01 flg: 0x00 tail: 0x917f0601

frmt: 0x02 chkval: 0x0000 type: 0x06=trans data

我们的 trc 文件包含 rdba, 如何把 rdba 转换成文件号和数据块号呢?

 

二、答案

Oracle 提供了一个系统包 dbms_utility 可以进行转换

 

doudou@TEST> variable file# number

doudou@TEST> variable block# number

doudou@TEST> execute :file#:=dbms_utility.data_block_address_file(to_number('1800014','xxxxxxxxx'));

 

PL/SQL procedure successfully completed.

 

doudou@TEST> execute :block#:=dbms_utility.data_block_address_block(to_number('1800014','xxxxxxxxx'));

 

PL/SQL procedure successfully completed.

 

doudou@TEST> print file#

 

     FILE#

----------

         6

 

doudou@TEST> print block#

 

    BLOCK#

----------

        20

 

由 rdba: 0x0 1800014 我们已经找到了 file 6   block 20 。( 1800014 为 16 进制部分记录了 file 位置和 block 位置)

 

总结: trc 文件中有很多我们不知道的奥秘,可以让我们发现更多的内在问题。期待了解更多!

三、附表:

                其实我们上面使用 dbms_utility 存在一个 16 进制到 10 机制的转换(下面简单介绍一下函数转换的使用)

 

1、   使用 to_number 函数 ( 16 进制转换到 10 进制)

doudou@TEST> select to_number('1800014','x') from dual;

select to_number('1800014','x') from dual

                 *

ERROR at line 1:

ORA-01722: invalid number

【这里的 X 限制了显示的位数,不足的时候会报错,这里我们可以给很多个 X 避免报错】

 

doudou@TEST> select to_number('1800014','xxxxxxxxxxxxx') from dual;

 

TO_NUMBER('1800014','XXXXXXXXXXXXX')

------------------------------------

                            25165844

 

2、   使用 to_char 函数 ( 10 进制转换 16 进制)

doudou@TEST> select to_char(25165844,'xxxxxxxxxxxx') from dual;

 

TO_CHAR(25165844,'XXXXXXXX

--------------------------

      1800014

 

3 、使用 bin_to_num 函数 ( 2 进制转换 10 进制)

doudou@TEST> select bin_to_num(0,0,0,1) from dual;

 

BIN_TO_NUM(0,0,0,1)

-------------------

                  1

doudou@TEST> select bin_to_num(0,0,1,0) from dual;

 

BIN_TO_NUM(0,0,1,0)

-------------------

                  2

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26442936/viewspace-750992/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
10年金融行业老鸟。Oracle,Mysql,PostgreSQL,EMC 存储,NBU备份。微信/电话 18211103995

注册时间:2012-02-03

  • 博文量
    307
  • 访问量
    1528521