0

oracle NOMOUNT 下如何查询DBID

问题归档 2019-07-02
471

问题描述

oracle 在NOMOUNT 状态下如何查询DBID

专家解答

如果你有旧的控制文件备份,可以先恢复出来,启动到mount,然后alter session set events 'immediate trace name controlf level 3';从trace里面也能找到dbid。


先安个bbed,然后查看1号文件(system表空间的数据文件)的1号块的@28字节偏移量处:

举个例子:

SQL> select dbid from v$database;

      DBID

----------

4281133257


SQL> select name from v$datafile where file#=1;

NAME

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

/u01/app/oracle/oradata/YX/datafile/o1_mf_system_fx29crln_.dbf


这是我这个数据库的dbid和1号文件的绝对路径:

打开bbed:



BBED> set filename '/u01/app/oracle/oradata/YX/datafile/o1_mf_system_fx29crln_.dbf' 

        FILENAME        /u01/app/oracle/oradata/YX/datafile/o1_mf_system_fx29crln_.dbf


BBED> set block 1

        BLOCK#          1


BBED> map /v

 File: /u01/app/oracle/oradata/YX/datafile/o1_mf_system_fx29crln_.dbf (0)

 Block: 1                                     Dba:0x00000000

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

 Data File Header


 struct kcvfh, 1248 bytes                   @0       

    struct kcvfhbfh, 20 bytes               @0       

    struct kcvfhhdr, 76 bytes               @20  

...


BBED> p kcvfhhdr

struct kcvfhhdr, 76 bytes                   @20      

   ub4 kccfhswv                             @20       0x00000000

   ub4 kccfhcvn                             @24       0x0c200000

   ub4 kccfhdbi                             @28       0xff2ce8c9

   text kccfhdbn[0]                         @32      Y

   text kccfhdbn[1]                         @33      X


ub4 kccfhdbi对应的哪个就是dbid,随便找个计算器什么的,转化成10进制就行:


SQL> select to_number('ff2ce8c9','xxxxxxxxxxxx') from dual;


TO_NUMBER('FF2CE8C9','XXXXXXXXXXXX')

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

                          4281133257



直接查是不行的,dbid有记录在控制文件,可以借助bbed工具来查看

「喜欢文章,快来给作者赞赏墨值吧」
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论