非归档模式下Oracle数据库如何做备份和恢复

来源:Reactjs教程作者:石川澪头衔:网络博主
导读:本期聚焦于石川澪创作的《非归档模式下Oracle数据库如何做备份和恢复》,敬请观看详情。Oracle数据库运行在非归档模式时,一旦发生故障,恢复手段会受到很大限制,这也是不少DBA容易踩坑的地方。非归档模式下最可靠的备份方式是冷备份,也就是在数据库干净关闭后拷贝数据文件、控制文件、参数文件和日志文件。恢复时只需将这些文件还原回原目录,再启动数据库即可。本文详细讲解非归档模式的特点、冷备份的完整操作步骤、利用BEGIN BACKUP方式做不完全备份的风险、以及没有备份只有联机日志时如何尝试恢复,同时给出判断数据库归档状态的方法和开启归档模式的建议,帮助你把数据安全掌握在自己手里。

Oracle数据库的归档模式(ARCHIVELOG)与非归档模式(NOARCHIVELOG)是备份恢复策略的基础分水岭。非归档模式下,联机重做日志在切换后会被直接覆盖,不产生归档日志文件,这意味着数据库只能保证恢复到最近一次备份的时间点,备份之后的任何数据变更都无法通过日志重放找回来。很多测试环境、小型应用为了性能和运维简单会采用非归档模式,但一旦出现误删数据文件、磁盘损坏等问题,如果没有正确做过备份,数据丢失的风险极高。本文围绕非归档模式下如何做备份、如何恢复展开,给出完整的操作步骤和风险提示。

非归档模式下Oracle数据库如何做备份和恢复

一、非归档模式的特点与归档状态确认

非归档模式的核心特征是:LGWR进程写入联机重做日志,日志写满后切换到下一组,循环覆写,旧日志内容直接丢失。因此非归档模式只能进行介质恢复到备份时间点,无法做基于时间的_point-in-time_恢复到任意时刻。换句话讲,非归档模式下数据库的一致性只能保证到冷备份那一刻。

在做任何操作之前,先确认数据库当前的归档状态。使用SQL*Plus连接数据库后执行:

-- 以sysdba身份登录
sqlplus / as sysdba

-- 查看归档模式
SQL> archive log list;
数据库日志模式             非存档模式
自动存档             禁用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     25
当前日志序列           27

-- 或者通过v$database视图查询
SQL> select log_mode from v$database;

LOG_MODE
------------
NOARCHIVELOG

输出中显示NOARCHIVELOG即表示处于非归档模式。另外还应记录一些关键信息,包括数据文件位置、控制文件位置和字符集,这些信息在恢复时会用到:

-- 查看数据文件位置
SQL> select name, status from v$datafile;

-- 查看控制文件位置
SQL> select name from v$controlfile;

-- 查看参数文件位置(spfile或pfile)
SQL> show parameter spfile;
SQL> show parameter pfile;

建议把这些查询结果保存到操作系统的文本文件中,作为备份清单。恢复时如果记不清文件路径,这份清单能省去大量排查时间。

二、冷备份:非归档模式下最可靠的备份方式

冷备份(Cold Backup)也叫一致性备份,指的是数据库以shutdown normal、shutdown immediate或shutdown transactional方式干净关闭后,在实例离线状态下对所有物理文件进行的拷贝。非归档模式下只能做一致性备份,这是由数据库一致性原理决定的:干净关闭后,所有脏块已经写入数据文件,SCN一致,恢复时直接启动即可,不需要应用任何日志。

完整的冷备份操作步骤如下:

-- 1. 干净关闭数据库
SQL> shutdown immediate;
数据库已经关闭。
数据库已经卸载。
ORACLE 例程已经关闭。

-- 2. 在操作系统层面确认实例已停止
-- Windows下查看服务,Linux下执行ps -ef | grep ora_

-- 3. 拷贝以下文件到备份目录(以Linux为例)
-- cp /u01/app/oracle/oradata/orcl/*.dbf  /backup/orcl/
-- cp /u01/app/oracle/oradata/orcl/*.ctl  /backup/orcl/
-- cp /u01/app/oracle/oradata/orcl/*.log  /backup/orcl/
-- spfile如果存在,一并备份
-- cp /u01/app/oracle/product/19c/dbs/spfileorcl.ora /backup/orcl/
-- 同时备份参数文件和密码文件
-- cp $ORACLE_HOME/dbs/orapworcl /backup/orcl/

-- 4. 备份完成后重新启动数据库
SQL> startup;

需要备份的文件清单包括:所有数据文件(.dbf)、所有控制文件(.ctl)、所有联机重做日志文件(.log)、初始化参数文件(spfile或pfile)、密码文件(orapw开头)。特别提醒一点,临时表空间的数据文件可以不备份,恢复后临时文件会自动重建或需要手工添加。

冷备份的优点是概念简单、恢复速度快、风险最低;缺点是备份期间数据库完全不可用,因此只适合可以接受停机窗口的场景,比如夜间批处理完成后的测试库或小规模业务库。备份介质建议同时保留两份,一份本地一份异地,防止备份盘与数据库盘同时损坏。

三、冷备份的恢复操作

非归档模式下恢复非常直接:把备份文件原样拷贝回原来的目录路径(或修改参数文件指向新路径),然后startup即可。因为备份是一致性状态,恢复不需要recover命令,也不需要应用日志。

标准恢复流程演示:

-- 1. 如果实例还在运行,先关闭
SQL> shutdown abort;
SQL> startup mount;
SQL> shutdown immediate;

-- 2. 操作系统层面把备份文件拷贝回原路径
-- cp /backup/orcl/*.dbf /u01/app/oracle/oradata/orcl/
-- cp /backup/orcl/*.ctl /u01/app/oracle/oradata/orcl/
-- cp /backup/orcl/*.log /u01/app/oracle/oradata/orcl/

-- 3. 直接启动数据库
SQL> startup;
ORACLE 例程已经启动。
数据库装载完毕。
数据库已经打开。

如果恢复时文件必须放到新目录,比如原磁盘损坏换成了新盘,则可以先把控制文件放好,启动到mount状态后用alter database rename file逐个修改数据文件和日志文件路径:

SQL> startup mount;
SQL> alter database rename file '/u01/app/oracle/oradata/orcl/system01.dbf'
  2  to '/u02/oradata/orcl/system01.dbf';
-- 对每个数据文件和日志文件重复上述操作
SQL> alter database open;

这里有一个常见的坑:rename file必须使用绝对路径,而且目标文件必须真实存在于操作系统上,路径写错会直接报错。另一个坑是如果参数文件也丢了,需要手工重建pfile,指定control_files参数指向实际的控制文件位置,再用startup pfile='/路径/init.ora' mount的方式启动。

四、非归档模式下的特殊情况:没有备份怎么办

生产中最让人紧张的场景是:数据库处于非归档模式,从来没做过冷备份,数据文件损坏或被误删。此时能用的手段非常有限,但并非完全没救。

如果只是部分非关键数据文件损坏,且这些表空间可以整体丢弃,可以尝试脱机删除该数据文件后强行打开数据库:

SQL> startup mount;
SQL> alter database datafile '/u01/app/oracle/oradata/orcl/test01.dbf' offline drop;
SQL> alter database open;
-- 之后可以删除对应的表空间重建
SQL> drop tablespace test including contents;

注意offline drop并不是真的恢复数据,而是把该数据文件标记丢弃,里面的数据会全部丢失,system和sysaux表空间的数据文件绝不允许这样做,否则数据库无法打开。如果损坏的恰好是system文件,且连一份冷备份都没有,那么能借助的只剩Oracle支持的工具或者按块提取数据的第三方工具,成功率无法保证。这也是为什么强烈建议:非归档模式至少要有周期性的冷备份计划,最好每天一次,且停机窗口内完成。

另一个值得了解的技巧是非归档模式下的BEGIN BACKUP方式:alter tablespace ... begin backup后拷贝数据文件再end backup。这种方式在非归档模式下虽然语法允许,但拷贝出来的文件是模糊备份(fuzzy backup),缺少足够的日志支撑,恢复时大概率无法open,只能作为应急手段而不应作为常规策略。非归档环境的正道始终是干净关闭后的冷备份。

五、建议:尽早切换到归档模式

如果业务对数据有任何恢复到当前时间点的要求,非归档模式都是不够用的。切换到归档模式的操作并不复杂,只需要一次重启:

-- 1. 设置归档路径
SQL> alter system set log_archive_dest_1='location=/archive' scope=spfile;

-- 2. 干净关闭并启动到mount
SQL> shutdown immediate;
SQL> startup mount;

-- 3. 打开归档模式
SQL> alter database archivelog;
SQL> alter database open;

-- 4. 确认
SQL> archive log list;
数据库日志模式             存档模式

开启归档后,就可以使用RMAN做在线热备份,配合归档日志实现不完全恢复和基于时间的恢复,误操作防护能力会有质的提升。如果暂时无法切换,也请务必执行严格的冷备份制度:固定时间、干净关闭、备份全部物理文件、异地存放,并定期做恢复演练。备份的价值只有在成功恢复的那一刻才能体现,没验证过的备份等同于没有备份。

Oracle备份恢复非归档模式Cold Backup修改时间:2026-09-11 06:46:37

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/0911/54525.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。