邪恶八进制信息安全团队技术讨论组's Archiver

pub!1c 2006-2-16 17:52

[转载]Oracle HowTo:如何获得数据库的DBID

<P>信息来源:邪恶八进制信息安全团队</P>
<P>在进行数据库恢复的过程中,很多时候我们需要知道Oracle数据库的DBID,通常有以下几种方法可以获得数据库的DBID.</P>
<P>1.查询v$database获得</P>
<P>由于DBID在控制文件和数据文件中都存在记录,所以如果能够mount数据库就可以查询v$database视图获得.</P>
<P>
<TABLE>
<TBODY>
<TR>
<TD width=500 bgColor=#999999><PRE>SQL> alter database mount;</PRE><PRE>Database altered.</PRE><PRE>SQL> select dbid from v$database;</PRE><PRE> DBID<BR>----------<BR>3152029224</PRE><PRE>SQL> </PRE></TD></TR></TBODY></TABLE></P>
<P>2.在nomount状态时</P>
<P>如果数据库配置了<A href="http://www.eygle.com/faq/Oracle9i.New.Feature.Spfile.04.htm"><FONT color=#0000cc>自动控制文件备份</FONT></A>(Oracle9i),并且名称是缺省的,那么我们可以从自动备份文件获得DBID.</P>
<P>
<TABLE>
<TBODY>
<TR>
<TD width=500 bgColor=#999999><PRE>[oracle@jumper dbs]$ cd $ORACLE_HOME/dbs<BR>[oracle@jumper dbs]$ ll c-*<BR>-rw-r----- 1 oracle dba 3375104 Dec 21 11:13 c-3152029224-20051221-00<BR>-rw-r----- 1 oracle dba 3358720 Jan 21 14:03 c-3152029224-20060121-00<BR>-rw-r----- 1 oracle dba 3358720 Jan 21 14:08 c-3152029224-20060121-01</PRE></TD></TR></TBODY></TABLE></P>
<P>这里的3152029224就是DBID.</P>
<DIV id=a000689more>
<DIV id=more>
<P>3.从自动备份中恢复</P>
<P>需要或缺DBID进行恢复通常是因为丢失了所有的控制文件.在恢复时会遇到错误.</P>
<TABLE>
<TBODY>
<TR>
<TD width=500 bgColor=#999999><PRE>[oracle@jumper dbs]$ rman target /</PRE><PRE>Recovery Manager: Release 9.2.0.4.0 - Production</PRE><PRE>Copyright (c) 1995, 2002, Oracle Corporation. All rights reserved.</PRE><PRE>connected to target database: conner (not mounted)</PRE><PRE>RMAN> restore controlfile from autobackup;</PRE><PRE>Starting restore at 05-FEB-06</PRE><PRE>using target database controlfile instead of recovery catalog<BR>allocated channel: ORA_DISK_1<BR>channel ORA_DISK_1: sid=11 devtype=DISK<BR>RMAN-00571: ===========================================================<BR>RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============<BR>RMAN-00571: ===========================================================<BR>RMAN-03002: failure of restore command at 02/05/2006 20:47:25<BR>RMAN-06495: <STRONG>must explicitly specify DBID with SET DBID command</STRONG></PRE></TD></TR></TBODY></TABLE>
<P>如果存在自动备份,我们通常可以直接恢复控制文件,mount数据库之后就好办了:</P>
<TABLE>
<TBODY>
<TR>
<TD width=500 bgColor=#999999><PRE>RMAN> restore controlfile from '/opt/oracle/product/9.2.0/dbs/c-3152029224-20051221-00';</PRE><PRE>Starting restore at 05-FEB-06</PRE><PRE>using channel ORA_DISK_1<BR>channel ORA_DISK_1: restoring controlfile<BR>channel ORA_DISK_1: restore complete<BR>replicating controlfile<BR>input filename=/opt/oracle/oradata/conner/control01.ctl<BR>output filename=/opt/oracle/oradata/conner/control02.ctl<BR>output filename=/opt/oracle/oradata/conner/control03.ctl<BR>Finished restore at 05-FEB-06<BR></PRE></TD></TR></TBODY></TABLE>
<P>4.直接从幸存的文件中读取</P>
<P>由于DBID存在于数据文件及控制文件中,所以我们可以通过PL/SQL程序直接从文件中读取:</P>
<TABLE>
<TBODY>
<TR>
<TD width=500 bgColor=#999999><PRE>SQL> select eygle.get_dbid('/opt/oracle/oradata/conner','user02.dbf') from dual;</PRE><PRE>EYGLE.GET_DBID('/OPT/ORACLE/OR<BR>------------------------------<BR>3152029224</PRE><PRE>SQL> select dbid from v$database;</PRE><PRE>DBID<BR>----------<BR>3152029224<BR></PRE></TD></TR></TBODY></TABLE>
<P>这种方法仅为测试兴趣所致,不被推荐.</P>
<P><STRONG>相关文章参考:</STRONG></P>
<P><A href="http://www.eygle.com/archives/2005/03/eoaoracle9iaeoo.html"><EM><FONT color=#0000cc>使用Oracle9i的自动控制文件备份功能</FONT></EM></A></P>
<P><A href="http://www.eygle.com/archives/2005/03/eoarmanaeoeoaee.html"><EM><FONT color=#0000cc>使用RMAN的备份及恢复一例-丢失所有控制文件</FONT></EM></A></P></DIV></DIV>

页: [1]
© 1999-2008 EvilOctal Security Team