作者: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 内存等重要参数的信息。





