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

本文介绍了Oracle数据库丢失spfile的恢复方法,前提是已配置数据库控制文件自动备份且有可靠备份。具体步骤包括模拟spfile丢失、设置ORACLE_SID、登陆RMAN、设置DBID、启动到nomount状态、从备份还原参数文件、关闭并重新启动数据库。

摘要生成于 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>

<think>首先,用户的问题是关于Oracle RMAN的:"我想从RMAN备份集中恢复SPFILE 请问Oracle RMAN 恢复 SPFILE 从备份集"。我需要基于系统级指令来回答。 系统级指令包括: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考引用: - 引用[1]: 关于RMAN备份集的操作,如list, crosscheck, delete。 - 引用[2]: 快闪恢复区存储备份数据。 - 引用[3]: RMAN镜像复制,但用户问题是从备份集恢复SPFILE。 用户的问题是从备份集中恢复SPFILESPFILEOracle数据库的服务器参数文件。 我需要构建一个结构清晰的回答: 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]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值