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