暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DBID的获取 与 控制文件中有什么?

原创 eygle 2010-06-29
610
我以前写过一个文章,如何获得DBID,这个问题今天仍然有人问,其实不管控制文件的名称里是否包含了DBID,但是,只要有了控制文件,就可以从其中获得DBID,可以直接用二进制工具打开,读取固定的位,也可以恢复出了控制文件,通过其Mount数据库,再来查询V$视图。

如果能够转储控制文件,可以看到其头部是有这样一个DBID的:
*** SESSION ID:(147.24) 2010-06-29 12:11:40.899
DUMP OF CONTROL FILES, Seq # 13094 = 0x3326
 V10 STYLE FILE HEADER:
    Compatibility Vsn = 169870080=0xa200300
    Db ID=1535818776=0x5b8abc18, Db Name='EYGLE'
    Activation ID=0=0x0
    Control Seq=13094=0x3326, File size=430=0x1ae
    File Number=0, Blksiz=16384, File Type=1 CONTROL
简单的用BBED打开控制文件,同样可以清晰的看到这个DBID:
BBED> dump
 File: D:\\oracle\\oradata\\EYGLE\\CONTROLFILE\\O1_MF_5WQNTR1V_.CTL (2)
 Block: 3                Offsets:    0 to  511           Dba:0x00800003
------------------------------------------------------------------------
 15c20000 01000000 00000000 00000104 02b30000 00000000 0003200a 18bc8a5b
 4559474c 45000000 27330000 ae010000 00400000 00000100 00000000 00000000
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
 661eea5b 5871b82a fb823500 00000000 d65e172b 00000000 00000000 00000000
这里的18bc8a5b按照字节序调整一下,就是5b8abc18,正好就是DB ID。

而紧跟DBID之后的8 位正好就是DB Name:
SQL> select dump('EYGLE',16) from dual;

DUMP('EYGLE',16)
----------------------------
Typ=96 Len=5: 45,59,47,4c,45
多了解一下数据库的内部结构,在遇到问题时的处理方法就会有很多。

转储控制文件内容,可以使用以下命令:
alter session set events 'immediate trace name CONTROLF level 8';

参考文档:
Oracle HowTo:如何获得数据库的DBID



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

评论