公司动态

Oracle RMAN备份脚本、RMAN还原恢复测试、RMAN常用语句

📅 2026/8/25 6:01:38
Oracle RMAN备份脚本、RMAN还原恢复测试、RMAN常用语句
Oracle RMAN备份脚本、rman还原恢复测试、rman常用语句一、全量备份脚本前提已经准备好备份目录/backup可以是nfs挂载确保空间和权限没问题su - oracle mkdir /home/oracle/scripts ##全量备份脚本 dbname表示数据库名称自行修改即可#### cat /home/oracle/scripts/backup_full.sh EOF #!/bin/bash source /home/oracle/.bash_profile echo echo date : ***** dbname_fullbackup start ***** rman nocatalog target / eof run{ allocate channel c1 type disk ; allocate channel c2 type disk ; allocate channel c3 type disk ; allocate channel c4 type disk ; set limit channel c1 kbytes 52428800; set limit channel c2 kbytes 52428800; set limit channel c3 kbytes 52428800; set limit channel c4 kbytes 52428800; backup database format /backup/dbname_full_%T_%s_%p_%t; release channel c1; release channel c2; release channel c3; release channel c4; sql alter system archive log current; } run{ sql alter system archive log current; allocate channel c1 type disk format /backup/dbname_arch_%T_%s_%p_%t; set limit channel c1 kbytes 23194304; backup archivelog all delete input; release channel c1; backup current controlfile format /backup/dbname_control%U; backup spfile format /backup/dbname_spfile%U; } exit eof echo echo date : ***** dbname_fullbackup end ***** EOF chmod ux /home/oracle/scripts/*.sh二、增量归档日志备份脚本前提已经准备好备份目录/backup可以是nfs挂载确保空间和权限没问题su - oracle mkdir /home/oracle/scripts ##增量归档日志备份脚本 dbname表示数据库名称自行修改即可#### cat /home/oracle/scripts/backup_arch.shEOF #!/bin/bash source /home/oracle/.bash_profile echo echo date : ***** dbname_archbackup start ***** rman nocatalog target / eof run{ sql alter system archive log current; allocate channel c1 type disk format /backup/dbname_arch_%T_%s_%p_%t; set limit channel c1 kbytes 23194304; backup archivelog all delete input; release channel c1; backup current controlfile format /backup/dbname_control%U; backup spfile format /backup/dbname_spfile%U; } exit eof echo echo date : ***** dbname_archbackup end ***** EOF chmod ux /home/oracle/scripts/*.sh三、大文件表空间优化全量备份速度的方法备注通过切片的方式section size 51200M提高并行备份速度run{ allocate channel c1 type disk ; allocate channel c2 type disk ; allocate channel c3 type disk ; allocate channel c4 type disk ; backup database section size 51200M format /backup/dbname_full_%T_%s_%p_%t; release channel c1; release channel c2; release channel c3; release channel c4; sql alter system archive log current; }四、rman全量还原和恢复测试流程前期准备工作1、准备rman恢复测试服务器磁盘空间一定要满足cpu和内存可以低于生产环境 2、规划用于还原数据库的存储目录例如/oradata/orcl) 3、如果全量备份是保存至nfs上将nfs挂载至rman恢复测试服务器建议挂载目录与生产环境一致例如/backup)。如果是其它方式需要提前准备好用于rman还原的通道 4、安装待还原的Oracle数据库的对应版本的Oracle软件 5、配置.bash_profile环境变量根据生产环境内容修改一下即可 6、配置pfile文件根据生产环境生产进行适当修改即可主要是内存大小这些 7、创建必要的目录根据pfile文件的配置对应的目录提前创建完毕例如归档目录数据文件目录adump目录等 8、启动数据库到nomount状态建议关闭job,设置job_queue_processes09、还原控制文件查看生产环境最新的控制文件备份 ls -ltr /backup/*control* rman target / restore controlfile from /backup/xxxxxxxxxxx; 通过上述命令还原 sql alter database mount; 将数据库启动到mount状态10、还原数据库即还原数据文件如果还原数据库的存储目录与生产环境不一致需要在还原的时候提前set newname重命名数据文件名称 例如DATA磁盘还原环境为/oradata/orcl,可以通过如下方式在生产环境中执行一次性获得set newname重命名数据文件名称的命令。 select set newname for datafile ||file_id|| to ||replace(file_name,DATA,/oradata/orcl)||||; str from dba_data_files order by file_id; 示例 cat rman_restore.sh EOF rman target / eof run{ allocate channel c1 device type disk; allocate channel c2 device type disk; allocate channel c3 device type disk; allocate channel c4 device type disk; set newname for datafile 1 to /oradata/orcl/system01.dbf; set newname for datafile 2 to /oradata/orcl/sysaux01.dbf; set newname for datafile 3 to /oradata/orcl/undotbs01.dbf; set newname for datafile 4 to /oradata/orcl/users01.dbf; ....... restore database; switch datafile all; release channel c1; release channel c2; release channel c3; release channel c4; } exit eof EOF chmod ux rman_restore.sh 后台方式执行 nohup sh rman_restore.sh 11、恢复数据库不完全恢复查询数据库的归档日志备份清淡 list backup of archivelog all; 根据查询出来的选择一个redo序列号最为恢复数据库的结束位置进行数据库恢复如下 run { set until sequence 16666 thread 1; recover database; } 备注 1set until sequence 16666表示16665归档日志恢复出来且应用16666序列号日志不恢复 2对于RAC的恢复可能需要类似如下格式 run { set until sequence 16665 thread 1; set until sequence 55253 thread 2; recover database; } 备注也可以后台方式执行12、收尾工作1重建临时文件tempfile临时文件不会还原 SQL select name from v$tempfile; NAME -------------------------------------------------------------------------------- DATA/temp01.dbf alter tablespace temp add tempfile /oradata/orcl/temp01.dbf size 30g autoextend off; alter database tempfile DATA/temp01.dbf drop; select name from v$tempfile; NAME -------------------------------------------------------------------------------- /oradata/zhdd/temp01.dbf 2数据库块校验和验证可选 vi validate.sh rman target / eof run{ allocate channel c1 device type disk; allocate channel c2 device type disk; allocate channel c3 device type disk; allocate channel c4 device type disk; backup validate database; release channel c1; release channel c2; release channel c3; release channel c4; } exit eof五、常用RMAN语句crosscheck backup; 交叉核对校验所有备份集。RMAN 会检查控制文件或恢复目录中记录的备份信息并与磁盘或磁带上的实际物理文件进行比对。如果物理文件存在状态保持为 AVAILABLE如果物理文件丢失或被外部命令如 rm删除RMAN 会将其状态标记为 EXPIRED过期/无效。此命令本身不会删除任何文件 delete noprompt expired backup; 它不会删除实际的物理文件而是清理 RMAN 资料库控制文件或恢复目录中那些因为物理文件丢失而被标记为 EXPIRED 的元数据记录。noprompt 参数的作用是抑制交互确认提示使命令直接执行 CONFIGURE RETENTION POLICY TO REDUNDANCY 2; 告诉 RMAN 必须为每个数据文件保留至少 2 份可用的备份。当备份份数超过 2 份时最旧的备份将被 RMAN 判定为“过时Obsolete”可以被安全清理 report obsolete; 根据当前配置的保留策略如上面的 REDUNDANCY 2列出所有不再需要用于恢复的备份集、数据文件副本和归档日志。这是一个只读操作仅用于预览不会删除任何文件 delete noprompt obsolete; 根据当前的保留策略删除那些被判定为不再需要的备份物理文件同时更新控制文件或恢复目录中的记录。配合 noprompt 参数常用于自动化备份脚本中 delete archivelog all; RMAN 会尝试删除当前资料库中记录的所有归档日志物理文件并在删除前弹出交互提示要求用户手动输入 YES 或 NO 进行确认。 delete noprompt archivelog all; 与上一条命令功能相同但增加了 noprompt 参数跳过了交互确认步骤直接执行删除。 delete noprompt archivelog all completed before sysdate-3; 根据归档日志的完成时间completion_time进行过滤仅删除 3 天前的归档日志。需要注意的是如果当前环境配置了 Data Guard备库且备库尚未应用这些归档日志或者存在保留策略的限制该命令可能会受到限制而无法删除 delete noprompt FORCE archivelog all completed before sysdate-3; 在上一条命令的基础上增加了 FORCE 关键字。即使当前的归档删除策略Archivelog Deletion Policy或 Data Guard 环境限制了这些日志的删除例如备库尚未应用RMAN 也会强制忽略这些限制并执行删除操作使用 FORCE 参数需要非常谨慎。如果强制删除了尚未被备库应用Applied或尚未被备份的归档日志可能会导致数据库无法进行完整的时间点恢复Point-in-Time Recovery或者导致主备库同步断裂六、RMAN备份作业检查语句--通过查询v$rman_backup_job_details视图查询最近7天的rman备份作业执行情况 set linesize 200 pagesize 999 col input_bytes_display format a10 col output_bytes_display format a10 col time_taken_display format a10 select to_char(start_time,yyyymmdd hh24:mi:ss) time,trunc(elapsed_seconds/60) duration_min,input_type,status,input_bytes_display,output_bytes_display,time_taken_display from v$rman_backup_job_details where start_timetrunc(sysdate)-7 order by time;