oracle NOMOUNT 下如何查询DBID

问题归档 2019-07-02
35
0 0
摘要:oracle 在NOMOUNT 状态下如何查询DBID

问题描述

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工具来查看

「喜欢文章,快来给作者赞赏墨值吧」

评论

0
0
Oracle
订阅
欢迎订阅Oracle频道,订阅之后可以获取最新资讯和更新通知。
墨值排行
今日本周综合
近期活动
全部
相关课程
全部