RMAN恢复案例——丢失spfile的恢复

本文介绍了一种在Oracle数据库中丢失SPFILE后的恢复方法。前提条件是已经配置了数据库控制文件的自动备份,并且已有可靠的备份。通过RMAN命令进行SPFILE的自动备份和恢复,确保数据库能够正常启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1. 丢失spfile的恢复


大前提:已经配置了数据库控制文件的自动备份,并且已经有可靠的备份:
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP on;
 
新的 RMAN 配置参数:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
已成功存储新的 RMAN 配置参数
正在启动全部恢复目录的 resync
完成全部 resync
 
RMAN>
 
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:/RMANTEST/%F';
 
新的 RMAN 配置参数:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:/RMANTEST/%F';
已成功存储新的 RMAN 配置参数
正在启动全部恢复目录的 resync
完成全部 resync
 
RMAN>
 
RMAN> show all;
 
RMAN 配置参数为:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:/RMANTEST/%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO 'D:/ORACLE92/DATABASE/SNCFTEST1.ORA'; # default
 
RMAN>
 
RMAN> run{
2> backup database
3> tag 'full_db_20041007'
4> format 'd:/rmantest/full_dbtest_yyyymmdd%_u%.bak'
5> include current controlfile;
6> backup archivelog all
7> tag 'arch_bak'
8> format 'd:/rmantest/arch_yyyymmdd%_u%.bak'
9> delete input;}
 
启动 backup 于 07-10月-04
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=13 devtype=DISK
通道 ORA_DISK_1: 正在启动 full 数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
输入数据文件 fno=00001 name=D:/ORACLE92/TEST1/SYSTEM01.DBF
输入数据文件 fno=00002 name=D:/ORACLE92/TEST1/UNDOTBS01.DBF
输入数据文件 fno=00006 name=D:/ORACLE92/TEST1/RMAN01.DBF
输入数据文件 fno=00003 name=D:/ORACLE92/TEST1/INDX01.DBF
输入数据文件 fno=00005 name=D:/ORACLE92/TEST1/USERS01.DBF
输入数据文件 fno=00004 name=D:/ORACLE92/TEST1/TOOLS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 07-10月-04
通道 ORA_DISK_1: 已完成段 1 于 07-10月-04
段 handle=D:/RMANTEST/FULL_DBTEST_YYYYMMDD%_U%.BAK comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:01:06
完成 backup 于 07-10月-04
 
启动 backup 于 07-10月-04
当前日志已存档
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在启动存档日志备份集
通道 ORA_DISK_1: 正在指定备份集中的存档日志
输入存档日志线程 =1 序列 =15 记录 ID=20 时间戳=538928248
通道 ORA_DISK_1: 正在启动段 1 于 07-10月-04
通道 ORA_DISK_1: 已完成段 1 于 07-10月-04
段 handle=D:/RMANTEST/ARCH_YYYYMMDD%_U%.BAK comment=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
通道 ORA_DISK_1: 正在删除存档日志
存档日志文件名 =D:/ORACLE92/ADMIN/TEST1/ARCH/ARC00015.001 记录 ID=20 时间戳 =538928248
完成 backup 于 07-10月-04
 
启动 Control File and SPFILE Autobackup 于 07-10月-04
段 handle=D:/RMANTEST/C-910599446-20041007-00 comment=NONE
完成 Control File and SPFILE Autobackup 于 07-10月-04
 
RMAN>
 
 
 
 
1.1.1.    将当前spfile挪到其他位置来模拟spfile丢失


RMAN> host;
 
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
 
C:/>move D:/oracle92/database/SPFILETEST1.ORA D:/oracle92/database/bak/SPFILETEST1.ORA
 
C:/>dir D:/oracle92/database/SPFILETEST1.ORA
 驱动器 D 中的卷没有标签。
 卷的序列号是 644D-03D9
 
 D:/oracle92/database 的目录
 
找不到文件
 
C:/>dir D:/oracle92/database/bak/SPFILETEST1.ORA
 驱动器 D 中的卷没有标签。
 卷的序列号是 644D-03D9
 
 D:/oracle92/database/bak 的目录
 
2004-10-04  14:06             2,560 SPFILETEST1.ORA
               1 个文件          2,560 字节
               0 个目录 10,708,807,680 可用字节
 
C:/>exit
主机命令完成
 
RMAN>
 
1.1.2.    设置ORACLE_SID


C:/>set ORACLE_SID=TEST1
 
C:/>ECHO ORACLE_SID
ORACLE_SID
 
C:/>
 
1.1.3.    登陆RMAN


C:/>rman
 
恢复管理器: 版本9.2.0.1.0 - Production
 
Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.
 
RMAN> connect target lunar/lunar@test1
 
已连接到目标数据库 (未启动)
 
RMAN> connect catalog rman/rman@rman
 
连接到恢复目录数据库
 
RMAN>
 
1.1.4.    在RMAN中设置DBID


使RMAN知道需要查找哪一个数据库的spfile
(必须在数据关闭的情况下设置DBID)
RMAN> set DBID=910599446
 
正在执行命令: SET DBID
 
RMAN>
 
1.1.5.    将数据库启动到nomount状态


RMAN> startup nomount;
 
启动失败: ORA-01078: failure in processing system parameters
LRM-00109: N^7(4r?*2NJ}ND<~ 'D:/ORACLE92/DATABASE/INITTEST1.ORA'
 
正在尝试在没有参数文件的情况下启动 Oracle 例程...
Oracle 例程已启动
 
系统全局区域总计      97589952 字节
 
Fixed Size                      453312 字节
Variable Size                 46137344 字节
Database Buffers              50331648 字节
Redo Buffers                    667648 字节
 
RMAN>
 
1.1.6.    从自动备份中还原参数文件


RMAN> show all;
 
RMAN 配置参数为:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'D:/RMANTEST/%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
 
RMAN> restore spfile from autobackup;
 
启动 restore 于 07-10月-04
 
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=9 devtype=DISK
通道 ORA_DISK_1: 寻找以下日期的自动备份: 20041007
通道 ORA_DISK_1: 已找到的自动备份: D:/RMANTEST/c-910599446-20041007-00
通道 ORA_DISK_1: 从自动备份复原 SPFILE 已完成
完成 restore 于 07-10月-04
 
RMAN> host;
 
 
恢复管理器完成。
 
C:/>dir D:/oracle92/database/SPFILETEST1.ORA
 驱动器 D 中的卷没有标签。
 卷的序列号是 644D-03D9
 
 D:/oracle92/database 的目录
 
2004-10-07  14:31             2,560 SPFILETEST1.ORA
               1 个文件          2,560 字节
               0 个目录 10,528,374,784 可用字节
 
C:/> exit
 
恢复管理器: 版本9.2.0.1.0 - Production
 
Copyright (c) 1995, 2002, Oracle Corporation.  All rights reserved.
 
连接到目标数据库: TEST1(未安装)
连接到恢复目录数据库
 
RMAN>
 
1.1.7.    用Shutdown immediate关闭数据库


RMAN> shutdown immediate;
 
Oracle 例程已关闭
 
RMAN>
 
1.1.8.    重新启动数据库


RMAN> set DBID=910599446
 
正在执行命令: SET DBID
 
RMAN> startup
 
已连接到目标数据库 (未启动)
Oracle 例程已启动
数据库已加载
数据库已打开
 
系统全局区域总计     101784276 字节
 
Fixed Size                      453332 字节
Variable Size                 75497472 字节
Database Buffers              25165824 字节
Redo Buffers                    667648 字节
 
RMAN>
更多 0
<think>首先,用户的问题是关于Oracle RMAN的:"我想从RMAN备份集中恢复SPFILE 请问Oracle RMAN 恢复 SPFILE 从备份集"。我需要基于系统级指令来回答。 系统级指令包括: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考引用: - 引用[1]: 关于RMAN备份集的操作,如list, crosscheck, delete。 - 引用[2]: 快闪恢复区存储备份数据。 - 引用[3]: RMAN镜像复制,但用户问题是从备份集恢复SPFILE。 用户的问题是从备份集中恢复SPFILESPFILE是Oracle数据库的服务器参数文件。 我需要构建一个结构清晰的回答: 1. 介绍问题:解释什么是SPFILE和为什么需要从备份集恢复。 2. 步骤:逐步说明如何从RMAN备份集中恢复SPFILE。 3. 注意事项:可能的风险或最佳实践。 4. 生成相关问题:基于主题生成2-3个相关问题。 在回答中,我需要自然地添加引用标识。引用是基于提供的引用内容: - [^1] 对应引用[1],关于备份集命令。 - [^2] 对应引用[2],关于快闪恢复区。 - [^3] 对应引用[3],关于镜像复制。 用户的问题是从备份集恢复SPFILE,所以引用[1]和[2]可能更相关。引用[3]提到镜像复制,但用户指定了备份集。 关键步骤: - 确认有RMAN备份集包含SPFILE备份。 - 使用RMAN命令恢复SPFILE。 - 可能需要启动实例在nomount状态。 标准RMAN恢复SPFILE过程: 1. 如果数据库实例没有启动,启动到nomount状态。 2. 使用RMAN连接到目标数据库。 3. 恢复SPFILE从备份集。 命令示例: - `restore spfile from autobackup;` 或指定备份集。 由于是从备份集恢复,我需要指定备份集。 在回答中,使用中文。 生成相关问题: 1. 如何验证RMAN备份集是否包含SPFILE? 2. 恢复SPFILE后如何应用到数据库? 3. RMAN恢复SPFILE的常见错误及解决方法? 确保回答真实可靠:基于Oracle RMAN知识。 结构: - 开头:解释SPFILE恢复需求。 - 步骤:分步指南。 - 结束:注意事项和问题。</think>### Oracle RMAN 从备份集恢复 SPFILE SPFILE(服务器参数文件)是 Oracle 数据库的关键配置文件,存储数据库实例的初始化参数。如果 SPFILE 丢失或损坏,您需要从 RMAN 备份集恢复它。RMAN恢复管理器)是 Oracle 的备份和恢复工具,支持从备份集直接恢复文件。备份集是 RMAN 的默认备份格式,它将多个文件打包成一个或多个备份片[^2]。以下我将逐步指导您完成恢复过程。整个过程假设您已拥有有效的 RMAN 备份集,并且备份集包含 SPFILE 的备份(可通过 `list backup of spfile;` 命令验证[^1])。 #### 恢复 SPFILE 的步骤 恢复 SPFILE 需要在数据库实例未加载状态(nomount)下操作,因为 SPFILE 用于启动实例。以下是详细步骤: 1. **启动实例到 nomount 状态(如果可能)**: - 如果数据库实例已关闭,使用 SQL*Plus 以最小方式启动: ```sql STARTUP NOMOUNT; ``` - 如果实例无法启动(例如 SPFILE 完全丢失),您需要先创建一个临时的 PFILE(参数文件)来启动实例。编辑一个文本文件(如 `init_temp.ora`),包含基本参数(如 `db_name`),然后: ```sql STARTUP NOMOUNT PFILE='/path/to/init_temp.ora'; ``` - 这一步确保 RMAN 可以连接到目标数据库[^1]。 2. **连接到 RMAN 并验证备份集**: - 打开命令行或终端,连接到 RMAN: ```bash rman target / ``` - 在 RMAN 提示符下,列出可用的 SPFILE 备份: ```sql RMAN> list backup of spfile; ``` - 输出将显示备份集信息,如备份集键(Backup Set Key)和备份片位置。确保备份集状态为 `AVAILABLE`(可用)。如果状态为 `EXPIRED`,使用 `crosscheck backupset;` 命令验证备份[^1]。 3. **从备份集恢复 SPFILE**: - 在 RMAN 中,使用 `restore` 命令指定备份集恢复 SPFILE。通用命令格式为: ```sql RMAN> restore spfile from backupset <backup_set_key>; ``` - 示例(假设备份集键为 123): ```sql RMAN> restore spfile from backupset 123; ``` - 如果备份集包含自动备份(如使用 `configure controlfile autobackup on;`),可以简化: ```sql RMAN> restore spfile from autobackup; ``` - 这将自动查找最新的 SPFILE 备份[^2]。恢复成功后,SPFILE 默认还原到 `$ORACLE_HOME/dbs` 目录(Linux/Unix)或 `%ORACLE_HOME%\database`(Windows),文件名为 `spfile<db_name>.ora`。 4. **验证和应用恢复SPFILE**: - 恢复完成后,关闭实例并重新启动以使用新 SPFILE: ```sql RMAN> shutdown immediate; RMAN> startup; ``` - 检查 SPFILE 是否生效: ```sql SQL> show parameter spfile; ``` - 输出应显示 SPFILE 路径。如果参数值正确,恢复成功。 #### 注意事项 - **备份集可用性**:确保备份集存储在快闪恢复区或指定位置。快闪恢复区是 RMAN 备份的默认存储区,包含数据文件、控制文件和 SPFILE 备份[^2]。如果备份集丢失恢复将失败。 - **权限和环境**:操作需以 Oracle 用户身份运行,并设置正确的 `ORACLE_SID` 和 `ORACLE_HOME`。 - **风险**:如果备份集损坏,恢复可能出错。建议定期测试恢复过程。镜像复制(如操作系统级复制)不是备份集的标准方法,RMAN 备份集更可靠[^3]。 - **性能**:恢复 SPFILE 通常快速(秒级),但依赖备份集大小和 I/O 性能。 通过以上步骤,您可以从 RMAN 备份集安全恢复 SPFILE。如果您遇到错误(如 "RMAN-06004" 表示备份集未找到),请检查备份日志或重新验证备份集[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值