oracle中如何获得数据库的DBID信息

 更新时间:2013年09月25日 12:32:36   作者:  
在进行数据库恢复的过程中,很多时候我们需要知道Oracle数据库的DBID,通常有以下几种方法可以获得数据库的DBID

1.查询v$database获得

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

复制代码 代码如下:

SQL> alter database mount;
Database altered.
SQL> select dbid from v$database;
      DBID
----------
3152029224

2.在nomount状态时

如果数据库配置了自动控制文件备份(Oracle9i),并且名称是缺省的,那么我们可以从自动备份文件获得DBID.

复制代码 代码如下:

[oracle@jumper dbs]$ cd $ORACLE_HOME/dbs
[oracle@jumper dbs]$ ll c-*
-rw-r----- 1 oracle dba 3375104 Dec 21 11:13 c-3152029224-20051221-00
-rw-r----- 1 oracle dba 3358720 Jan 21 14:03 c-3152029224-20060121-00
-rw-r----- 1 oracle dba 3358720 Jan 21 14:08 c-3152029224-20060121-01

这里的3152029224就是DBID。在10g中,使用Flash Recovery Area,则没有这个命名规则。

3.从自动备份中恢复

需要或缺DBID进行恢复通常是因为丢失了所有的控制文件.在恢复时会遇到错误.

复制代码 代码如下:

[oracle@jumper dbs]$ rman target  /

Recovery Manager: Release 9.2.0.4.0 - Production

Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.

connected to target database: conner (not mounted)

RMAN> restore controlfile from autobackup;

Starting restore at 05-FEB-06

using target database controlfile instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=11 devtype=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 02/05/2006 20:47:25
RMAN-06495: must explicitly specify DBID with SET DBID command

如果存在自动备份,我们通常可以直接恢复控制文件,mount数据库之后就好办了:

复制代码 代码如下:

RMAN> restore controlfile from '/opt/oracle/product/9.2.0/dbs/c-3152029224-20051221-00';

Starting restore at 05-FEB-06

using channel ORA_DISK_1
channel ORA_DISK_1: restoring controlfile
channel ORA_DISK_1: restore complete
replicating controlfile
input filename=/opt/oracle/oradata/conner/control01.ctl
output filename=/opt/oracle/oradata/conner/control02.ctl
output filename=/opt/oracle/oradata/conner/control03.ctl
Finished restore at 05-FEB-06

4.直接从幸存的文件中读取

由于DBID存在于数据文件及控制文件中,所以我们可以通过PL/SQL程序直接从文件中读取:

复制代码 代码如下:

SQL> select eygle.get_dbid('/opt/oracle/oradata/conner','user02.dbf') from dual;

EYGLE.GET_DBID('/OPT/ORACLE/OR
------------------------------
3152029224
SQL> select dbid from v$database;
DBID
----------
3152029224

其实更简单的,用BBED就好了。

这种方法仅为测试兴趣所致,不被推荐.

相关文章

  • Oracle数据库升级或数据迁移方法研究

    Oracle数据库升级或数据迁移方法研究

    本文详细论述了oracle数据库升级的升级前的准备、升级过程和升级后的测试与调整工作,并对各种升级方法在多种操作系统平台上作了测试。
    2016-07-07
  • oracle表被锁定的完美解决方法

    oracle表被锁定的完美解决方法

    ora-00031:session marked for kill处理oracle中杀不掉的锁一些ORACLE中的进程被杀掉后,状态被置为”killed”,但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。现在小编给大家分享另外一种oracle表被锁定的解决方法,需要的的朋友参考下吧
    2017-07-07
  • oracle 层次化查询(行政区划三级级联)

    oracle 层次化查询(行政区划三级级联)

    现在将上面的行政区划按代码分为三个级别:省(后四位为0)/市(后两位为0)/县,同时分别标出他们的级别,这样的话,便于后期根据不同的级别查询。
    2009-07-07
  • oracle中decode函数的使用方法

    oracle中decode函数的使用方法

    这篇文章主要介绍了oracle中decode函数的使用方法,需要的朋友可以参考下
    2014-03-03
  • Oracle 触发器实现主键自增效果

    Oracle 触发器实现主键自增效果

    这篇文章主要介绍了Oracle 触发器实现主键自增,说白了就是数据确认(after)与安全性检查(before),此外触发器不针对select操作,本文给大家介绍的非常详细,需要的朋友参考下吧
    2021-12-12
  • 详解ORACLE SEQUENCE用法

    详解ORACLE SEQUENCE用法

    Oracle中的sequence用法在oracle中sequence就是所谓的序列号,本文详细的介绍了ORACLE SEQUENCE用法,具有一定的参考价值,有兴趣的可以了解下。
    2016-12-12
  • oracle 触发器 学习笔记

    oracle 触发器 学习笔记

    触发器 是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。
    2009-05-05
  • oracle group by语句实例测试

    oracle group by语句实例测试

    本文将详细介绍oracle group by语句,以实例进行测试,需要的朋友可以参考下
    2012-11-11
  • Oracle数据库中对null值的排序及mull与空字符串的区别

    Oracle数据库中对null值的排序及mull与空字符串的区别

    这篇文章主要介绍了Oracle数据库中对Null值的排序及Null与空字符串的区别,讲解了在order by排序中如何定义null值项的位置及其与字符串' '的不同,需要的朋友可以参考下
    2016-03-03
  • Oracle删除字段中的空格、回车及指定字符的实例代码

    Oracle删除字段中的空格、回车及指定字符的实例代码

    本文给大家分享Oracle删除字段中的空格、回车及指定字符的实例代码,非常不错,具有参考借鉴价值,需要的的朋友参考下
    2017-03-03

最新评论