news 2026/10/2 6:13:07

Oracle数据库基础之9_RMAN备份恢复

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Oracle数据库基础之9_RMAN备份恢复

备份按系统的准备程度分
冷备份:shutdown停机拷贝文件,不支持724业务
热备份:open状态下进行,支持7
24业务

备份按数据类型备份分
逻辑备份:exp、expdp
物理备份:rman、用户管理的备份[alter tablespace XX begin backup+OS拷贝]

RMAN备份类型分
镜像复制备份:backup as copy,备份文件和实际文件大小一样 --实际工作中很少使用
备份集备份:backup as backset,备份文件远远小于实际文件大小,空块不会备份 --最主流的备份方式

RMAN(Recovery Manager)backupset方式的优点
1、归档模式下,可以在数据库open状态下进行备份,保证了7*24的业务
2、不使用的空块不会备份,减少了I/O消耗
3、备份期间会默认检查数据库是否损坏
4、可以进行增量备份
5、可以实现各种级别的备份,比如数据库、表空间、数据文件
6、能够恢复到故障点,或者离故障点最近的时间点,保证数据的最少丢失

配置rman默认的备份路径
RMAN> configure channel device type disk format ‘/home/oracle/bak/%U’;
如果没有配置,则默认存放在db_recovery_file_dest参数路径下,如果没有配置db_recovery_file_dest参数,则默认存放在$ORACLE_HOME/dbs目录

备份集复制
RMAN> CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;
–配置rman备份时生成两份备份文件
RMAN> backup copies 2 datafile 4 FORMAT ‘/home/oracle/bak1/%U’,‘/home/oracle/bak2/%U’;
–生成两份备份文件,一份存放于/home/oracle/bak1目录,一份存放于/home/oracle/bak2目录

Format字符串替代变量的意思
%U是最常用的,为每个备份片生成一个唯一名称
%F:具体格式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII表示DBID.YYYYMMDD表示年月日的时间戳,QQ表示00开头的十六进制数字序列(最大值为FF即256)

RMAN备份的保存策略
过期的备份文件oracle不会自动从磁盘上删除,仅仅是标记过期,过期的文件可以使用RMAN> delete obsolete直接从磁盘上删除。

基于时间的备份保留策略
说的简单些,就是你希望数据库最早能恢复到几天前,如果有增量备份,则备份文件的保留时间=retention period + level 0 backup interval
比如,每隔一个月即30天执行一次0级备份,每隔1天执行一次1级备份,如果设置备份保留策略为3天,不是说3天以前的所有备份文件都过期了,而是说我们可以恢复到3天前。
理解:每个月的1号执行0级备份,今天是3号,要恢复到三天前,那就是要恢复到上个月的30号,上个月的30号的数据是基于上个月1号的0级备份+上个月每天的1级备份,那么上个月1号的0级备份文件的保留天数就是3+30=33

备份集备份片
一般情况下,一个备份集由一个备份片组成,设置备份文件冗余度或出现备份片有大小限制时,才会有一个备份集对应多个备份片

备份片:用于存储RMAN备份集的物理文件格式。每个逻辑备份集包含一个或多个物理备份件。简单说,备份片,就是备份后生成的一个个物理文件,一个备份片里面可能包含一个或多个datafile。
备份集:是个逻辑概念,一个或多个数据文件、控制文件、服务器参数文件和归档重做日志文件的备份。每个备份集由一个或多个二进制文件组成。每个二进制文件称为备份片。备份片是以专有格式编写的,只能由RMAN创建或恢复。

默认情况下,备份集和备份片是一一对应的

RMAN>backupdatabaseformat'/home/oracle/1data%U';select*fromv$backup_setselect*fromv$backup_piece

设置备份集大小时,备份集和备份片是一对多的

RMAN>CONFIGURE MAXSETSIZE clear;RMAN>run2>{allocate channel c1 devicetypediskmaxpiecesize1000M;3>backupdatabaseformat'/home/oracle/2data%U';4>}select*fromv$backup_setselect*fromv$backup_piece

增量备份
默认是Differential差异增量备份:备份上级及同级以来所有变化的数据块
Cumulative累积增量备份:备份上级以来所有变化的数据块
就算没有0级备份,直接在执行1级或2级备份,会自动先进行0级备份。

RMAN>backupincrementallevel2databaseformat'/home/oracle/bak/%U';Startingbackupat24-MAY-18usingtargetdatabasecontrolfileinsteadofrecovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=32devicetype=DISKnoparentbackuporcopyofdatafile1foundnoparentbackuporcopyofdatafile2foundnoparentbackuporcopyofdatafile5foundnoparentbackuporcopyofdatafile3foundnoparentbackuporcopyofdatafile4found channel ORA_DISK_1:startingincrementallevel0datafilebackupsetchannel ORA_DISK_1: specifying datafile(s)inbackupsetinput datafilefilenumber=00001name=/u01/app/oracle/oradata/orcl/system01.dbf input datafilefilenumber=00002name=/u01/app/oracle/oradata/orcl/sysaux01.dbf input datafilefilenumber=00005name=/u01/app/oracle/oradata/orcl/example01.dbf input datafilefilenumber=00003name=/u01/app/oracle/oradata/orcl/undotbs01.dbf input datafilefilenumber=00004name=/u01/app/oracle/oradata/orcl/users01.dbf channel ORA_DISK_1:startingpiece1at24-MAY-18channel ORA_DISK_1: finished piece1at24-MAY-18piece handle=/home/oracle/bak/1at3lltr_1_1 tag=TAG20180524T024722comment=NONE channel ORA_DISK_1:backupsetcomplete,elapsedtime:00:01:24channel ORA_DISK_1:startingincrementallevel2datafilebackupsetchannel ORA_DISK_1: specifying datafile(s)inbackupsetinput datafilefilenumber=00006name=/u01/app/oracle/oradata/orcl/users02.dbf input datafilefilenumber=00007name=/u01/app/oracle/oradata/orcl/users03.dbf input datafilefilenumber=00008name=/u01/app/oracle/oradata/orcl/cataspace.dbf channel ORA_DISK_1:startingpiece1at24-MAY-18channel ORA_DISK_1: finished piece1at24-MAY-18piece handle=/home/oracle/bak/1bt3lm0g_1_1 tag=TAG20180524T024722comment=NONE channel ORA_DISK_1:backupsetcomplete,elapsedtime:00:00:03Finishedbackupat24-MAY-18StartingControlFileandSPFILE Autobackup at24-MAY-18piece handle=/home/oracle/bak/c-1498036209-20180524-00comment=NONE Finished ControlFileandSPFILE Autobackup at24-MAY-18

Rman备份控制文件
只要对1号数据文件即SYSTEM 表空间的数据文件做备份时,就算控制文件的自动备份没有打开,RMAN也会自动对控制文件做备份。
所以备份数据库时,也一定会自动备份控制文件,因为数据库包含1号数据文件。

Rman备份归档日志
如果多个归档路径时,rman备份时也只备份一份
delete all input --如果有多个归档路径,则删除所有路径下的归档日志
delete input --如果有多个归档路径,只删除一个路径下的归档日志

新的归档日志目录不同于默认的归档日志目录,如果Oracle 判定日志已存在,也不会恢复该归档日志文件。

RMAN>run{2>setarchivelog destinationto'/home/oracle';3>restorearchivelogfromsequence34until sequence34;4>} executing command:SETARCHIVELOG DESTINATIONStartingrestoreat15-MAY-18usingchannel ORA_DISK_1usingchannel ORA_DISK_2 archived logforthread1withsequence34isalreadyondiskasfile/u01/app/oracle/archivelog/1_34_970255476.dbfrestorenotdone;allfilesreadonly,offline,oralready restored Finishedrestoreat15-MAY-18

catalog backuppiece
RMAN> catalog backuppiece ‘’
如果重建控制文件,里面的备份信息都丢失了的话,就算没有使用catalog数据库,可以使用catalog命令把备份文件注册到控制文件中。

查看备份进度的SQL语句

SELECTSID,SERIAL#, opname,ROUND(SOFAR/TOTALWORK*100)||'%' "%_COMPLETE",TRUNC(elapsed_seconds/60)||':'||MOD(elapsed_seconds,60)elapsed,TRUNC(time_remaining/60)||':'||MOD(time_remaining,60)remaining,CONTEXT,target,SOFAR,TOTALWORKFROMV$SESSION_LONGOPSWHEREOPNAMELIKE'RMAN%'ANDOPNAMENOTLIKE'%aggregate%'ANDTOTALWORK!=0ANDSOFAR<>TOTALWORK;

restore和recover的区别
restore:还原,把数据文件从备份集中还原出来
restore默认从控制文件中最新的一个备份包中恢复,如果最新的不存在,就找第二新的,如果第二新的不存在,就找第三新的,依次类推,如果一个都没有就报错
restore有until time,则是使用until time范围内最新的备份包,比如3个备份包,分别是1:00,2:00,3:00,如果UNTIL TIME “TO_DATE(‘2:30:00’,‘hh24:mi:ss’)”,那就是使用2:30范围内的最新包,那就是2:00的那个备份包
recover:恢复,使用归档日志或在线日志恢复

rman的advisor工具
Rman>List failure;–显示异常的文件数量
Rman>Advise failure;–显示需要恢复的文件详细信息
Rman>Repair failure preview;–显示需要恢复操作的脚本,并把脚本存放到某个路径下,(当没有产生报告时敲一下Validate database,再重新来一遍List failure\ Advise failure)
Rman>Repair failure;–进行恢复操作
备份一个文件,再关机,再删除这个文件,再启动到mount,执行上面的顺序操作就可以恢复

VALIDATE 命令
VALIDATE 命令支持对单个备份集和数据块进行验证。在物理损坏中,数据库根本无法识别块。在逻辑损坏中,块的内容在逻辑上不一致。默认情况下,VALIDATE 命令只检查物理损坏。也可以指定CHECK LOGICAL 检查逻辑损坏。

VALIDATE 命令只检查块内损坏。块损坏可分为块间损坏和块内损坏。
在块内损坏中,块本身发生损坏,可以是物理损坏也可以是逻辑损坏。
在块间损坏中,块与块之间发生的损坏只能是逻辑损坏。

RMAN> VALIDATE DATABASE;–检查物理坏块,只做检查动作
RMAN> VALIDATE CHECK LOGICAL DATABASE;–检查逻辑坏块,只做检查动作
或
RMAN> BACKUP VALIDATE DATABASE;–检查物理坏块,只检查不备份
RMAN> BACKUP VALIDATE CHECK LOGICAL DATABASE;–检查逻辑坏块,只检查不备份

RMAN> BACKUP DATABASE;–没有VILIDATE,表示做备份的动作,备份的同时检查物理坏块,RMAN备份时默认检查物理坏块
RMAN> BACKUP CHECK LOGICAL DATABASE;–没有VILIDATE,表示做备份的动作,备份的同时检查逻辑坏块

CATALOG
当没有CATALOG恢复目录时,RMAN相关的备份信息,比如归档文件路径、备份集路径等均存储在目标数据库的控制文件中,不过考虑到控制文件并不能无限增长,而且控制文件也不仅仅是用来存储与备份相关的信息,因此RMAN也有一个专门的备份信息存储地,这就是CATALOG恢复目录了。当待备份的数据库注册到恢复目录之后,RMAN相关的信息除了保存在控制文件中外(控制文件实际上只保存一部分),更加详细的信息就都被存储在恢复目录中。建议将恢复目录存放在一个专有的数据库中。如果恢复目录和其他数据存储在一个数据库中,那么如果这个数据库损坏,你的恢复目录很有可能也会丢失。同样,如果选择使用恢复目录方式,也同样要对恢复目录做备份。恢复目录一般不需要用RMAN做备份,只要EXPDP即可。一旦CATALOG恢复目录数据库发生故障,通过IMPDP恢复即可。

Nocatalog就是用control file控制文件记录备份信息,如果使用nocatalog方式
备份文件的保留时间=retention period + level 0 backup interval

控制文件记录保留时间
control_file_record_keep_time=备份文件的保留时间+1
比如,每隔一个月即30天执行一次0级备份,每隔1天执行一次1级备份,如果设置备份保留策略为3天,就是说我们可以恢复到3天前。
控制文件中记录保留天数就是3+30+1=34

CATALOG创建和使用步骤
1.创建表空间
SQL> create tablespace cataspace datafile ‘/u01/app/oracle/oradata/ocp/cataspace.dbf’ size 10M autoextend on;

2.创建用户
SQL> create user catauser identified by 123456 default tablespace cataspace;

3.用户授权,必须要有recovery_catalog_owner
SQL> grant connect,resource,recovery_catalog_owner to catauser;

4.RMAN登录CATALOG,并创建CATALOG
[oracle@ocp ~]$ rman catalog catauser/123456
RMAN> create catalog;

5.RMAN登录数据库和CATALOG,并注册数据库到CATALOG,并使用。
[oracle@ocp ~]$ rman target / catalog catauser/123456
RMAN> register database;
RMAN> backup datafile 7;

设置归档模式
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
SQL> alter system set log_archive_dest_1=‘location=/u01/app/oracle/archivelog’;
SQL> archive log list;
SQL> alter system switch logfile;
SQL> alter system archive log current;

查看RMAN的配置

RMAN>showall;usingtargetdatabasecontrolfileinsteadofrecovery catalog RMAN configuration parametersfordatabasewithdb_unique_name DB1 are: CONFIGURE RETENTION POLICYTOREDUNDANCY1;# defaultCONFIGUREBACKUPOPTIMIZATIONOFF;# defaultCONFIGUREDEFAULTDEVICETYPETODISK;# defaultCONFIGURE CONTROLFILE AUTOBACKUPON;# defaultCONFIGURE CONTROLFILE AUTOBACKUP FORMATFORDEVICETYPEDISKTO'%F';# defaultCONFIGURE DEVICETYPEDISKPARALLELISM1BACKUPTYPETOBACKUPSET;# defaultCONFIGURE DATAFILEBACKUPCOPIESFORDEVICETYPEDISKTO1;# defaultCONFIGURE ARCHIVELOGBACKUPCOPIESFORDEVICETYPEDISKTO1;# defaultCONFIGURE MAXSETSIZETOUNLIMITED;# defaultCONFIGURE ENCRYPTIONFORDATABASEOFF;# defaultCONFIGURE ENCRYPTIONALGORITHM'AES128';# defaultCONFIGURE COMPRESSIONALGORITHM'BASIC'ASOFRELEASE'DEFAULT'OPTIMIZEFORLOADTRUE;# defaultCONFIGURE RMAN OUTPUTTOKEEPFOR7DAYS;# defaultCONFIGURE ARCHIVELOG DELETION POLICYTONONE;# defaultCONFIGURESNAPSHOTCONTROLFILE NAMETO'/u01/app/oracle/product/19.3.0/db_1/dbs/snapcf_DB1.f';# default

RMAN配置备份文件保留30天,即可以恢复到30天之前。
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 30 DAYS;

表空间的备份恢复,使用alter tablespace xx offline immediate方式

RMAN>RUN{sql"alter tablespace xx offline immediate;"restoretablespacexx;recovertablespacexx;sql"alter tablespace xx online;"}

datafile的备份恢复,可以使用脱机对应表空间的方式alter tablespace tablespacename offline,也可以直接脱机数据文件datafile offline的方式,进行restore和recover
SQL> alter database datafile N offline;
RMAN>restore datafile N;
RMAN>recover datafile N;
SQL> alter database datafile N online;

最全面最简洁的备份脚本和恢复方法:

RMAN>CONFIGURE CONTROLFILE AUTOBACKUPON;RMAN>CONFIGURE CONTROLFILE AUTOBACKUP FORMATFORDEVICETYPEDISKTO'/u01/backup/%F';RMAN>backupdatabaseformat'/u01/backup/datafile%U'plus archivelog format'/u01/backup/arch%U'deleteallinput;

以上脚本备份步骤如下
1、归档,再备份归档日志,删除已备份的归档日志
2、备份数据库文件
3、归档,再备份归档日志,删除已备份的归档日志
4、备份控制文件和参数文件

RMAN>backupdatabaseformat'/u01/backup/datafile%U'plus archivelog format'/u01/backup/arch%U'deleteallinput;Startingbackupat21-MAY-25currentlog archivedusingchannel ORA_DISK_1 channel ORA_DISK_1:startingarchived logbackupsetchannel ORA_DISK_1: specifying archived log(s)inbackupsetinput archived log thread=1sequence=24RECID=9STAMP=1201708288channel ORA_DISK_1:startingpiece1at21-MAY-25channel ORA_DISK_1: finished piece1at21-MAY-25piece handle=/u01/backup/arch053q1781_1_1 tag=TAG20250521T155128comment=NONE channel ORA_DISK_1:backupsetcomplete,elapsedtime:00:00:01channel ORA_DISK_1: deleting archived log(s)archived logfilename=/u01/app/oracle/archivelog/1_24_1200999124.dbf RECID=9STAMP=1201708288Finishedbackupat21-MAY-25Startingbackupat21-MAY-25usingchannel ORA_DISK_1 channel ORA_DISK_1:startingfulldatafilebackupsetchannel ORA_DISK_1: specifying datafile(s)inbackupsetinput datafilefilenumber=00001name=/u01/app/oracle/oradata/DB1/system01.dbf input datafilefilenumber=00003name=/u01/app/oracle/oradata/DB1/sysaux01.dbf input datafilefilenumber=00004name=/u01/app/oracle/oradata/DB1/undotbs01.dbf input datafilefilenumber=00007name=/u01/app/oracle/oradata/DB1/users01.dbf channel ORA_DISK_1:startingpiece1at21-MAY-25channel ORA_DISK_1: finished piece1at21-MAY-25piece handle=/u01/backup/datafile063q1782_1_1 tag=TAG20250521T155130comment=NONE channel ORA_DISK_1:backupsetcomplete,elapsedtime:00:01:06Finishedbackupat21-MAY-25Startingbackupat21-MAY-25currentlog archivedusingchannel ORA_DISK_1 channel ORA_DISK_1:startingarchived logbackupsetchannel ORA_DISK_1: specifying archived log(s)inbackupsetinput archived log thread=1sequence=25RECID=10STAMP=1201708357channel ORA_DISK_1:startingpiece1at21-MAY-25channel ORA_DISK_1: finished piece1at21-MAY-25piece handle=/u01/backup/arch073q17a5_1_1 tag=TAG20250521T155237comment=NONE channel ORA_DISK_1:backupsetcomplete,elapsedtime:00:00:01channel ORA_DISK_1: deleting archived log(s)archived logfilename=/u01/app/oracle/archivelog/1_25_1200999124.dbf RECID=10STAMP=1201708357Finishedbackupat21-MAY-25StartingControlFileandSPFILE Autobackup at21-MAY-25piece handle=/u01/backup/c-1794862737-20250521-01comment=NONE Finished ControlFileandSPFILE Autobackup at21-MAY-25

假设所有文件都丢失了,恢复步骤如下
1、恢复spfile文件
rman target /
RMAN> startup nomount;
RMAN> restore spfile from ‘XX’;
2、启动数据库到nomount状态
sqlplus / as sysdba
SQL> shutdown abort;
SQL> startup nomount;
3、恢复控制文件
rman target /
RMAN> restore controlfile from ‘/u01/backup/c-1794862737-20250521-01’;
4、启动数据库到mount状态
sqlplus / as sysdba
SQL> alter database mount;
5、restore数据库、recover不完全恢复数据库
RMAN> restore database;
RMAN> recover database;
RMAN> recover database until sequence XX;–XX使用上一步recover database中提示需要的sequence
6、启动数据库到open状态,使用resetlogs
sqlplus / as sysdba
SQL> alter database open resetlogs;

备份脚本的一个示例
vi /rmanbackup/scripts/backupLev0.sh

DATE=`date+%Y%m%d`rman target/cmdfile=/rmanbackup/scripts/rmanBackupLev0.rmanmsglog=/rmanbackup/log/rmanBackupLev0_$DATE.logvi/rmanbackup/scripts/rmanBackupLev0.rman run{ALLOCATE CHANNEL ch1 TYPE disk;BACKUP INCREMENTAL LEVEL0TAG'DB0'DATABASE FORMAT'/rmanbackup/data/DB_0_%T_%s_%U'PLUS ARCHIVELOG FORMAT'/rmanbackup/archivelog/ARCH_0_%T_%s'DELETE ALL INPUT;RELEASE CHANNEL ch1;CROSSCHECK BACKUP;CROSSCHECK ARCHIVELOG ALL;DELETE NOPROMPT EXPIRED BACKUP;DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;REPORT OBSOLETE;DELETE NOPROMPT OBSOLETE;}vi/rmanbackup/scripts/backupLev0_log.shDATE=`date-d"-1 day"+%Y%m%d`mail_list='XX@YY.COM'cat/rmanbackup/log/rmanBackupLev0_$DATE.log|mailx-s"XXDB IP 0级备份过程明细"$mail_list
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 6:13:06

西门子AF框架第十六章:工业PLC调度器原理与仿真调优实战

1. 这不是简单的文字搬运&#xff0c;而是一次工业软件本地化工程的实操复盘“西门子AF框架翻译-第十六章”——看到这个标题&#xff0c;很多刚接触TIA Portal博途生态的工程师第一反应是&#xff1a;又一本技术文档&#xff1f;翻完就扔&#xff1f;但如果你真这么想&#xf…

作者头像 李华
网站建设 2026/10/2 6:12:51

直启盘光纤/网络中继模块:可编程联动公式与工业控制实战

1. 直启盘光纤/网络中继模块到底是个什么东西第一次看到“直启盘光纤/网络中继模块”这个组合词&#xff0c;很多人会愣一下——直启盘是什么&#xff1f;光纤中继模块我懂&#xff0c;网络中继模块我也懂&#xff0c;但把这两个东西塞进一个带“可编程联动公式”的盒子里&…

作者头像 李华
网站建设 2026/10/2 6:12:30

Spec Coding 实战:用 TaoToken 统一 Key 打通 Cline MCP 的配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 6:12:29

为什么选择ReadAny?对标Calibre/KOReader,9大核心功能一文看懂

为什么选择ReadAny&#xff1f;对标Calibre/KOReader&#xff0c;9大核心功能一文看懂 【免费下载链接】ReadAny AI-powered cross-platform e-book reader with semantic search, RAG chat, local vector store, notes, TTS, and WebDAV sync. 项目地址: https://gitcode.co…

作者头像 李华