暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

RMAN备份恢复典型案例——异机恢复未知DBID

原创 Digital Observer 2025-02-12
105

作者:Digital Observer(施嘉伟)
Oracle ACE Pro: Database
PostgreSQL ACE Partner
11年数据库行业经验,现主要从事数据库服务工作
拥有Oracle OCM、DB2 10.1 Fundamentals、MySQL 8.0 OCP、WebLogic 12c OCA、KCP、PCTP、PCSD、PGCM、OCI、PolarDB技术专家、达梦师资认证、数据安全咨询高级等认证
ITPUB认证专家、PolarDB开源社区技术顾问、HaloDB技术顾问、TiDB社区技术布道师、青学会MOP技术社区专家顾问、国内某高校企业实践指导教师
公众号/墨天轮:Digital Observer;CSDN/PGfans:施嘉伟;ITPUB:sjw1933

1. 案例背景

生产主机意外损坏且不可修复,这时候异机存在有效的备份片,我们可以利用备份片恢复生产数据库继续对外提供服务,但是我们这时候可能无法即时获取DBID。那么如何获取DBID就很关键了。

2. 操作细节

进入rman:
export ORACLE_SID=orcl
rman target /
无参数文件启动

RMAN> startup nomount
startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/product/11.2.0/db_1/dbs/initlocaldb.ora'
starting Oracle instance without parameter file for retrieval of spfile

复制

设置DBID,这时候我们发现不知道DBID。下面给出两种方法作参考:
方法一:通过bbed查看:

bbed parfile=parfile.bbd
BBED> print kcvfhhdr 
struct kcvfhhdr, 76 bytes                   @20      
   ub4 kccfhswv                             @20       0x00000000
   ub4 kccfhcvn                             @24       0x0b200400
   ub4 kccfhdbi                             @28       0x2b563c1d
   text kccfhdbn[0]                         @32      L
   text kccfhdbn[1]                         @33      O
   text kccfhdbn[2]                         @34      C
   text kccfhdbn[3]                         @35      A
   text kccfhdbn[4]                         @36      L
   text kccfhdbn[5]                         @37      D
   text kccfhdbn[6]                         @38      B
   text kccfhdbn[7]                         @39       
   ub4 kccfhcsq                             @40       0x000002ae
   ub4 kccfhfsz                             @44       0x00015e00
   s_blkz kccfhbsz                          @48       0x00
   ub2 kccfhfno                             @52       0x0001
   ub2 kccfhtyp                             @54       0x0003
   ub4 kccfhacid                            @56       0x00000000
   ub4 kccfhcks                             @60       0x00000000

复制

方法二:dump控制文件:

SQL> alter session set events 'immediate trace name controlf level 3’;
SQL> select * from v$diag_info;
vi xxx.trc
DUMP OF CONTROL FILES, Seq # 2150 = 0x866
V10 STYLE FILE HEADER:
        Compatibility Vsn = 186647552=0xb200400
        Db ID=727071773=0x2b563c1d, Db Name='LOCALDB'
        Activation ID=0=0x0
        Control Seq=2150=0x866, File size=614=0x266
        File Number=0, Blksiz=16384, File Type=1 CONTROL

复制

找个可以用的数据库,执行:

select to_number('2b563c1d','xxxxxxxxxxxxx') from dual;
727071773

复制

设置DBID,开始恢复spfile,命令如下:
RMAN> set dbid=727071773
RMAN> restore spfile from autobackup;

RMAN> restore spfile from ‘/u01/app/flashback/LOCALDB/backupset/2020_06_22/o1_mf_ncsnf_TAG20200622T225319_hh1kh3yp_.bkp’;
注意 如果没有pfile备份、rman备份集的情况下,想恢复spfile,可以手动编辑一个,或在alert中找启动部分,有db_name controlfile 内存等重要参数的信息。
hhh6.jpg

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论