zoukankan      html  css  js  c++  java
  • Oracle HowTo:如何获得数据库的DBID

    转载--http://www.eygle.com/archives/2006/02/oracle_howto_get_oracle_dbid.html
    在进行数据库恢复的过程中,很多时候我们需要知道Oracle数据库的DBID,通常有以下几种方法可以获得数据库的DBID.

    1.查询v$database获得

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

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

    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.

    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
     

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

  • 相关阅读:
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 41 缺失的第一个正数
    Java实现 LeetCode 41 缺失的第一个正数
    Java实现 LeetCode 41 缺失的第一个正数
  • 原文地址:https://www.cnblogs.com/kevinsun/p/1210521.html
Copyright © 2011-2022 走看看