Oracle数据库物理备份与恢复实战教程
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">1. RMAN基础概念</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">1.1 什么是RMAN</a></li><li><a href="#_lab2_0_1">1.2 RMAN的主要作用</a></li><li><a href="#_lab2_0_2">1.3 RMAN体系架构</a></li></ul><li><a href="#_label1">2. RMAN备份原理</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_3">2.1 RMAN组成</a></li><li><a href="#_lab2_1_4">2.2 控制文件管理</a></li><li><a href="#_lab2_1_5">2.3 快照控制文件</a></li></ul><li><a href="#_label2">3. 恢复目录配置</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_6">3.1 创建恢复目录</a></li><li><a href="#_lab2_2_7">3.2 注册目标数据库</a></li></ul><li><a href="#_label3">4. RMAN常用命令</a></li><ul class="second_class_ul"><li><a href="#_lab2_3_8">4.1 配置命令</a></li><li><a href="#_lab2_3_9">4.2 备份命令</a></li><li><a href="#_lab2_3_10">4.3 恢复命令</a></li></ul><li><a href="#_label4">5. 实战案例</a></li><ul class="second_class_ul"><li><a href="#_lab2_4_11">5.1 归档模式丢失所有文件恢复</a></li><li><a href="#_lab2_4_12">5.2 单个数据文件丢失恢复</a></li><li><a href="#_lab2_4_13">5.3 表空间恢复</a></li><li><a href="#_lab2_4_14">5.4 坏块修复</a></li></ul><li><a href="#_label5">6. 高级功能</a></li><ul class="second_class_ul"><li><a href="#_lab2_5_15">6.1 增量备份</a></li><li><a href="#_lab2_5_16">6.2 基于时间点恢复</a></li><li><a href="#_lab2_5_17">6.3 跨平台迁移</a></li></ul><li><a href="#_label6">7. 监控与维护</a></li><ul class="second_class_ul"><li><a href="#_lab2_6_18">7.1 备份状态检查</a></li><li><a href="#_lab2_6_19">7.2 维护操作</a></li></ul><li><a href="#_label7">8. 最佳实践建议</a></li><ul class="second_class_ul"></ul><li><a href="#_label8">总结</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>1. RMAN基础概念</h2><p class="maodian"><a name="_lab2_0_0"></a></p><h3>1.1 什么是RMAN</h3>
<p>RMAN(Recovery Manager)是Oracle 8i以后DBA的重要工具,位于<code>$ORACLE_HOME/bin</code>目录下,主要用于备份、还原和恢复操作。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202511/2025112684835148.jpg" /></p>
<p><strong>RMAN组成:</strong></p>
<ul><li>可执行文件:rman</li><li>库文件:recover.bsq</li></ul>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>1.2 RMAN的主要作用</h3>
<ul><li>自动化备份和恢复</li><li>备份归档日志</li><li>增量备份支持</li><li>检测损坏数据块并跳过</li><li>并行备份恢复</li><li>在线备份不影响业务</li></ul>
<p class="maodian"><a name="_lab2_0_2"></a></p><h3>1.3 RMAN体系架构</h3>
<p><strong>核心组件:</strong></p>
<ul><li><strong>RMAN工具</strong>:客户端应用程序</li><li><strong>服务进程</strong>:与数据库和I/O设备通信</li><li><strong>通道</strong>:服务进程与I/O设备的读写途径</li><li><strong>目标数据库</strong>:要备份的数据库</li><li><strong>恢复目录</strong>:存储备份元数据(可选)</li><li><strong>媒体管理层</strong>:第三方磁带管理工具</li></ul>
<p class="maodian"><a name="_label1"></a></p><h2>2. RMAN备份原理</h2>
<p class="maodian"><a name="_lab2_1_3"></a></p><h3>2.1 RMAN组成</h3>
<ul><li><strong>rman.exe</strong>:启动文件</li><li><strong>recover.bsq</strong>:库文件,包含PL/SQL调用代码</li></ul>
<p class="maodian"><a name="_lab2_1_4"></a></p><h3>2.2 控制文件管理</h3>
<div class="jb51code"><pre class="brush:sql;">-- 查看控制文件保留时间
SHOW PARAMETER control_file_record_keep_time;
-- 修改保留时间
ALTER SYSTEM SET control_file_record_keep_time=14 SCOPE=BOTH;</pre></div>
<p class="maodian"><a name="_lab2_1_5"></a></p><h3>2.3 快照控制文件</h3>
<p>RMAN通过快照控制文件解决备份期间控制文件一致性问题。</p>
<p class="maodian"><a name="_label2"></a></p><h2>3. 恢复目录配置</h2>
<p class="maodian"><a name="_lab2_2_6"></a></p><h3>3.1 创建恢复目录</h3>
<div class="jb51code"><pre class="brush:sql;">-- 创建表空间
CREATE TABLESPACE rmantbs DATAFILE '/backup/rmantbs01.dbf' SIZE 100M AUTOEXTEND OFF;
-- 创建RMAN用户
CREATE USER rman IDENTIFIED BY rman DEFAULT TABLESPACE rmantbs;
ALTER USER rman QUOTA UNLIMITED ON rmantbs;
GRANT connect,resource,recovery_catalog_owner TO rman;
-- 创建恢复目录
RMAN> CREATE CATALOG TABLESPACE rmantbs;</pre></div>
<p class="maodian"><a name="_lab2_2_7"></a></p><h3>3.2 注册目标数据库</h3>
<div class="jb51code"><pre class="brush:sql;">rman target / catalog rman/rman@rman
RMAN> REGISTER DATABASE;</pre></div>
<p class="maodian"><a name="_label3"></a></p><h2>4. RMAN常用命令</h2>
<p class="maodian"><a name="_lab2_3_8"></a></p><h3>4.1 配置命令</h3>
<div class="jb51code"><pre class="brush:bash;">-- 查看所有配置
RMAN> SHOW ALL;
-- 配置保留策略
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
-- 配置控制文件自动备份
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;</pre></div>
<p class="maodian"><a name="_lab2_3_9"></a></p><h3>4.2 备份命令</h3>
<div class="jb51code"><pre class="brush:bash;">-- 全库备份
RMAN> BACKUP DATABASE;
-- 备份指定表空间
RMAN> BACKUP TABLESPACE users;
-- 备份归档日志
RMAN> BACKUP ARCHIVELOG ALL;
-- 压缩备份
RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE;</pre></div>
<p class="maodian"><a name="_lab2_3_10"></a></p><h3>4.3 恢复命令</h3>
<div class="jb51code"><pre class="brush:bash;">-- 恢复数据库
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
-- 恢复数据文件
RMAN> RESTORE DATAFILE 5;
RMAN> RECOVER DATAFILE 5;</pre></div>
<p class="maodian"><a name="_label4"></a></p><h2>5. 实战案例</h2>
<p class="maodian"><a name="_lab2_4_11"></a></p><h3>5.1 归档模式丢失所有文件恢复</h3>
<p><strong>场景</strong>:服务器意外断电导致所有数据库文件丢失</p>
<p><strong>恢复步骤:</strong></p>
<ul><li>恢复SPFILE文件</li><li>恢复控制文件</li><li>恢复数据文件</li><li>应用归档日志恢复</li></ul>
<div class="jb51code"><pre class="brush:sql;">-- 恢复SPFILE
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE SPFILE FROM AUTOBACKUP;
-- 恢复控制文件
RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;
-- 恢复数据文件
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;
-- 打开数据库
SQL> ALTER DATABASE OPEN RESETLOGS;</pre></div>
<p class="maodian"><a name="_lab2_4_12"></a></p><h3>5.2 单个数据文件丢失恢复</h3>
<div class="jb51code"><pre class="brush:sql;">-- 在线恢复
SQL> ALTER DATABASE DATAFILE '/path/file.dbf' OFFLINE;
RMAN> RESTORE DATAFILE 5;
RMAN> RECOVER DATAFILE 5;
SQL> ALTER DATABASE DATAFILE '/path/file.dbf' ONLINE;</pre></div>
<p class="maodian"><a name="_lab2_4_13"></a></p><h3>5.3 表空间恢复</h3>
<div class="jb51code"><pre class="brush:xhtml;">RMAN&gt; RESTORE TABLESPACE users;
RMAN&gt; RECOVER TABLESPACE users;
</pre></div>
<p class="maodian"><a name="_lab2_4_14"></a></p><h3>5.4 坏块修复</h3>
<div class="jb51code"><pre class="brush:sql;">-- 检查坏块
SQL> SELECT * FROM v$database_block_corruption;
-- 修复坏块
RMAN> BLOCKRECOVER DATAFILE 17 BLOCK 130;</pre></div>
<p class="maodian"><a name="_label5"></a></p><h2>6. 高级功能</h2>
<p class="maodian"><a name="_lab2_5_15"></a></p><h3>6.1 增量备份</h3>
<div class="jb51code"><pre class="brush:sql;">-- 0级备份
RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;
-- 1级增量备份
RMAN> BACKUP INCREMENTAL LEVEL 1 DATABASE;</pre></div>
<p class="maodian"><a name="_lab2_5_16"></a></p><h3>6.2 基于时间点恢复</h3>
<div class="jb51code"><pre class="brush:sql;">RUN {
SET UNTIL TIME "TO_DATE('2023-01-01 12:00:00','YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
}</pre></div>
<p class="maodian"><a name="_lab2_5_17"></a></p><h3>6.3 跨平台迁移</h3>
<p>通过RMAN实现单机到RAC集群的迁移:</p>
<ul><li>备份源数据库</li><li>准备目标环境</li><li>恢复控制文件和数据文件</li><li>调整集群参数</li><li>验证数据完整性</li></ul>
<p class="maodian"><a name="_label6"></a></p><h2>7. 监控与维护</h2>
<p class="maodian"><a name="_lab2_6_18"></a></p><h3>7.1 备份状态检查</h3>
<div class="jb51code"><pre class="brush:sql;">-- 检查7天内备份情况
SELECT /*+ RULE */ r.session_recid,
TO_CHAR(r.start_time, 'yyyy-mm-dd HH24:MI:SS') start_time,
r.status,
r.input_type,
r.input_bytes_display input_size
FROM v$rman_backup_job_details r
WHERE start_time > SYSDATE - 7
ORDER BY start_time;</pre></div>
<p class="maodian"><a name="_lab2_6_19"></a></p><h3>7.2 维护操作</h3>
<div class="jb51code"><pre class="brush:sql;">-- 交叉验证备份
RMAN> CROSSCHECK BACKUP;
-- 删除过期备份
RMAN> DELETE EXPIRED BACKUP;
-- 删除废弃备份
RMAN> DELETE OBSOLETE;</pre></div>
<p class="maodian"><a name="_label7"></a></p><h2>8. 最佳实践建议</h2>
<ul><li><strong>定期验证备份</strong>:使用<code>VALIDATE</code>命令检查备份完整性</li><li><strong>监控备份作业</strong>:建立备份监控机制</li><li><strong>测试恢复流程</strong>:定期进行恢复演练</li><li><strong>合理配置保留策略</strong>:根据业务需求设置</li><li><strong>启用控制文件自动备份</strong>:确保元数据安全</li><li><strong>使用压缩功能</strong>:在性能和空间之间权衡</li></ul>
<p class="maodian"><a name="_label8"></a></p><h2>总结</h2>
<p>Oracle RMAN提供了强大而灵活的备份恢复解决方案。通过合理配置和规范操作,可以确保数据库在各种故障场景下的快速恢复。关键是要建立完善的备份策略,并定期验证备份的有效性,确保在真正需要时能够成功恢复数据。</p>
頁:
[1]