教学文章
Technology Exchange
热门课程
400电话

免费咨询热线
400-090-9964

教学文章

Oracle数据库的唯一标识符

时间:2017-08-09 来源:

  DBID是DataBase IDentifier的缩写,意思就是数据库的唯一标识符。

  这个DBID在数据文件头和控制文件都是存在的,可以用于标示数据文件的归属。

  对于不同数据库来说,DBID应当不同,而db_name则可能是相同的。

  但是DBID是可变的,在进行数据库Clone等操作时,DBID可以被重置。

  dbid是一个根据db_name \ db create time等hash出来的值

  NOMOUNT/MOUNT/OPEN及未打开数据库等状态时,查询或获取数据库DBID的方法汇总:五大种类合计10种方法

  一、数据库MOUNT/OPEN时,从v$database查询获得

  1.由于DBID在控制文件和数据文件中都存在记录,所以如果能够mount数据库就可以查询v$database视图获得.

  BYS@ bys3>select dbid,open_mode from v$database;

  DBID OPEN_MODE

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

  3358363031 READ WRITE

  SYS@ bys3>select dbid,open_mode from v$database;

  DBID OPEN_MODE

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

  3358363031 MOUNTED

  二、使用RMAN的自动备份或日志来获取:

  2.从自动备份控制文件集的名字查询DBID,详见:http://blog.csdn.net/q947817003/article/details/16370735

  3.从RMAN备份时产生的日志文件查询DBID,与上一步在同一篇博客。详见:http://blog.csdn.net/q947817003/article/details/16370735

  三、通过oracle event来dump数据文件头、日志文件头、控制文件头信息来获取DBID

  下面三种方法都要求数据库在MOUNT或OPEN状态,且只能DUMP自己数据库的文件。

  4.通过oracle event来dump数据文件头来获取DBID,详见:http://blog.csdn.net/q947817003/article/details/16369041

  5.通过oracle event来dump控制文件头来获取DBID,详见:http://blog.csdn.net/q947817003/article/details/16370273

  6.通过oracle event来dump REDO日志文件头来获取DBID,详见:http://blog.csdn.net/q947817003/article/details/16370539

  四、通过alter system dump logfile命令来DUMP REDO及归档日志

  这种方法数据库可以在NOMOUNT/MOUNT/OPEN阶段,只用指定文件名,就可以DUMP自己数据库或其它数据库的文件(传到当前库)。

  个人见解:

  在需要DBID才能进行数据恢复时,alter system dump logfile 'filename';明显适应更多更复杂的场景,因为REDO日志或归档日志总会剩一个两个的,凭此就可以找到DBID了,哈哈。

  7.通过alter system dump logfile命令来DUMP REDO日志文件头来获取DBID,详见:http://blog.csdn.net/q947817003/article/details/16370203

  8.通过alter system dump logfile命令来DUMP 归档日志文件头来获取DBID,方法了上一步完全一样。详见:http://blog.csdn.net/q947817003/article/details/16370203

  五.用BBED--详见:http://blog.csdn.net/q947817003/article/details/16996475 这里只贴一小部分:

  BBED> map

  File: /u01/oradata/bys3/system01.dbf (1)

  Block: 1 Dba:0x00400001

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

  Data File Header

  struct kcvfh, 860 bytes @0

  ub4 tailchk @8188

  BBED> print kcvfhhdr

  struct kcvfhhdr, 76 bytes @20

  ub4 kccfhswv @20 0x00000000

  ub4 kccfhcvn @24 0x0b200000

  ub4 kccfhdbi @28 0xc82c8d97

  text kccfhdbn[0] @32 B

  text kccfhdbn[1] @33 Y

  text kccfhdbn[2] @34 S

  text kccfhdbn[3] @35 3

  text kccfhdbn[4] @36

  text kccfhdbn[5] @37

  DBID是对应的:ub4 kccfhdbi @28 0xc82c8d97 kccfhdbi--这个名字最后三位也能联想下DBID

  可以计算出DBID:16进制c82c8d97,转换为10进制数字:

  BYS@ bys3>select name,dbid from v$database;

  NAME DBID

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

  BYS3 3358363031

  BYS@ bys3>select to_number('c82c8d97','xxxxxxxxxxxxx') from dual;

  TO_NUMBER('C82C8D97','XXXXXXXXXXXXX')

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

  3358363031

  DB_NAME从上面text kccfhdbn几个字节可以看出--不需要计算了:--也可以看出,DB_NAME不能超过8个字符的原因了

  (以上内容摘于网络,如有侵权,请告之,将第一时间删除)

版权所有@北京神脑资讯技术有限公司(CUUG,中国UNIX用户协会) Copyright ALL Rights Reserved 京ICP备11008061号-1

CUUG旗下网站:www.cuug.com.cn www.cuug.com oracle.cuug.com bbs.cuug.com www.cuug.net

电话:010-59426307 010-59426319 邮政编码:100089

地址:北京市海淀区北清路164号28-38号院