查看: 26544|回复: 21

[备份恢复] oracle在恢复中常用到DBID,DBID的作用是什么,它和db_name是不是一一对应关系?

[复制链接]
论坛徽章:
6
数据库板块每日发贴之星
日期:2008-03-15 01:04:56ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:45数据库板块每日发贴之星
日期:2009-03-28 01:01:05ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:11
跳转到指定楼层
1#
发表于 2008-2-15 10:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
oracle在恢复中常用到DBID,DBID的作用是什么,它和db_name是不是一一对应关系?
DBID是不是用来标识db_name的序列号? 请各位高手解释一下!


1 当丢失了控制文件时,进行自动恢复数据时用到DBID.

RMAN> restore controlfile from autobackup;
启动 restore 于 15-2月 -08
使用通道 ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 02/15/2008 00:43:38
RMAN-06495: must explicitly specify DBID with SET DBID command



2 进行rman恢复时,有时也用到DBID.

3 oracle自动控制文件也用DBID做文件名

4 DBID存在于数据文件及控制文件中







下面转一下eygle的《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
----------
3152029224SQL>  
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 - ProductionCopyright (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-06using 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-06using 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
------------------------------
3152029224SQL> select dbid from v$database;DBID
----------
3152029224
这种方法仅为测试兴趣所致,不被推荐.


招聘 : 数据库管理员
论坛徽章:
122
马上加薪
日期:2014-02-19 11:55:14ITPUB官方微博粉丝徽章
日期:2011-06-28 19:45:36管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:拳击
日期:2011-03-29 13:11:152010广州亚运会纪念徽章:篮球
日期:2011-02-20 22:50:172011新春纪念徽章
日期:2011-02-18 11:42:492011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
2#
发表于 2008-2-15 10:09 | 只看该作者
你可以将它理解为db_name在数据库内部的表示

使用道具 举报

回复
论坛徽章:
6
数据库板块每日发贴之星
日期:2008-03-15 01:04:56ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:45数据库板块每日发贴之星
日期:2009-03-28 01:01:05ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:11
3#
 楼主| 发表于 2008-2-15 10:21 | 只看该作者

回复 #2 NinGoo 的帖子

谢谢,想不到那么快就得到了答案!

使用道具 举报

回复
论坛徽章:
117
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主7段
日期:2012-05-15 15:24:11ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32紫蛋头
日期:2013-03-04 17:00:07优秀写手
日期:2013-12-18 09:29:09
4#
发表于 2008-2-15 10:32 | 只看该作者
DBID是DataBase IDentifier的缩写,意思就是数据库的唯一标识符。

这个DBID在数据文件头和控制文件都是存在的,可以用于标示数据文件的归属。
对于不同数据库来说,DBID应当不同,而db_name则可能是相同的。

但是DBID是可变的,在进行数据库Clone等操作时,DBID可以被重置
看一下这个 中间部分:
http://www.eygle.com/archives/2007/08/stepbs_oracle_chp1_07.html

然后通过dbms_backup_restore包清空dbid等信息:
exec dbms_backup_restore.zerodbid(0);

看到这里再次使用到了dbms_backup_restore包,zeroDbid是包中的一个过程,用于清空数据文件头的部分信息,新的dbid在之后的控制文件创建时可以被计算,对于数据库克隆,这是必须的。
zeroDbid有一个输入参数,即文件号:
PROCEDURE zeroDbid(fno IN binary_integer);

当fno==0时,控制文件中包含的所有数据文件头都将被清零,zeroDbid主要用于清除数据文件头的3类信息:Database id信息、Checksum信息和Checksum符号位信息。
继续看这个脚本,清零完成之后,数据库重新启动,控制文件被重新创建,此时新的dbid被计算并最终写入所有数据文件:
。。。。。。。。。。。。。。。。。。。。。。。

使用道具 举报

回复
论坛徽章:
1
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
5#
发表于 2008-2-15 10:50 | 只看该作者
DBID在恢复的过程中是用来标示数据库的,和DB_NAME是对应关系

使用道具 举报

回复
论坛徽章:
6
数据库板块每日发贴之星
日期:2008-03-15 01:04:56ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:45数据库板块每日发贴之星
日期:2009-03-28 01:01:05ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042013年新春福章
日期:2013-02-25 14:51:24优秀写手
日期:2013-12-18 09:29:11
6#
 楼主| 发表于 2008-2-15 12:34 | 只看该作者

回复 #4 eygle 的帖子

很荣幸得到eygle的亲自解答啊,很详细了!


进一步加深DBID的理解!!

使用道具 举报

回复
论坛徽章:
25
授权会员
日期:2007-08-20 23:44:422011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-02-18 11:42:49管理团队成员
日期:2011-05-07 01:45:082012新春纪念徽章
日期:2012-01-04 11:49:54咸鸭蛋
日期:2012-02-06 17:15:202012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:362012新春纪念徽章
日期:2012-02-13 15:11:36
7#
发表于 2008-2-15 15:40 | 只看该作者
DBID可以理解为数据库的唯一标识。类似于一个表EMPLOYEE,EMPLOYEE_ID是唯一标识。但EMPLOYEE_NAME则可能是有重复的。

使用道具 举报

回复
论坛徽章:
44
青年奥林匹克运动会-自行车
日期:2014-09-12 22:37:432012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:09咸鸭蛋
日期:2012-01-08 14:47:322012新春纪念徽章
日期:2012-01-04 11:50:44ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15迷宫蛋
日期:2011-08-14 17:30:33双黄蛋
日期:2011-05-28 20:32:46紫蛋头
日期:2011-05-18 20:41:51现任管理团队成员
日期:2011-05-07 01:45:08
8#
发表于 2008-2-15 15:51 | 只看该作者
我记得,dbid是一个根据db_name \ db create time等hash出来的值吧?

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
25
生肖徽章2007版:龙
日期:2008-05-06 11:07:48咸鸭蛋
日期:2011-10-19 10:09:12ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
9#
发表于 2008-2-15 16:15 | 只看该作者
避免在同机的时候有数据库名相同的情况下,无法识别。同机的情况下唯一。

使用道具 举报

回复
论坛徽章:
42
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:022011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23
10#
发表于 2008-2-15 16:16 | 只看该作者
和身份证号与姓名的关系一样

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表