前面总结了ORACLE的逻辑备份,本文来总结以下ORACLE的物理备份。数据库的备份一般分为冷备份和热备份,其中冷备份是指将数据库彻底关闭后进行的一致性备份,由于需要关停数据库所以在实际应用中很少用到冷备份。而热备份是指在数据库运行的同时对数据库进行备份,本文主要总结的是ORACLE的热备份。ORACLE的热备份分为用户管理的热备份(user-managed backup and recovery)和ORACLE管理的热备份(Recovery Manager-RMAN)。
用户管理的热备份是指先将表空间置于热备份模式下,然后通过操作系统工具对文件进行复制备份,备份完成后再结束表空间的备份模式。Oracle管理的热备份是指通过RMAN对数据库进行联机热备份,RMAN备份不需要将表空间置于热备模式,减少了对数据库的影响,RMAN备份功能强大但是相对复杂,也是生产中用得最多的备份方式,本文讲的ORACLE物理备份主要针对的是RMAN备份。
一、NOCATALOG方式进行数据库备份
使用RMAN备份,需要将备份信息存起来,这些信息将用来恢复,默认情况下RMAN会将备份信息存储在控制文件中;ORACLE也支持把RMAN的备份信息存储在目录数据库中,叫做calalog database。首先,来看下不使用catalog方式进行数据库备份,这也是最基础的rman备份方式。使用nocatalog方式进行数据库备份,一般需要打开控制文件自动备份功能,打开该功能后ORACLE会在数据库发生重大变化之后(如增减表空间)自动进行控制文件和spfile文件的备份。进入rman管理器后执行configure controlfile autobackup on命令即可设置控制文件自动备份。
RMAN备份文件有两种存储方式:镜像拷贝和备份集。备份集只备份使用过的数据块而镜像拷贝是拷贝整个数据文件,一般默认的都是使用备份集。最简单的全库备份通过backup database命令即可完成。执行全库备份,加上tag即对备份打一个标签,可以看到rman备份完成,数据库的备份集默认存在了数据库的闪回区即快速恢复区内。因为数据库在完成备份后会写控制文件,所以在备份完成后触发了控制文件和参数文件的自动备份。
二、归档日志的备份
除了备份数据文件,为了保证数据库能恢复到指定的任意时间点,归档日志的备份在生产中也是必不可少的。我们可以直接执行backup archivelog或者在备份数据文件和控制文件的同时指定backup ... plus archivelog操作来一起备份归档日志。归档日志的备份支持备份全部也支持备份某个时间段的。
backup archivelog all; backup archivelog from time 'sysdate-30' until time 'sysdate-7';
RMAN在备份归档前会先给数据库发出一个alter system archive log current命令归档所有的非当前redolog,然后再执行归档日志的备份。上面归档日志的备份针对的是全部归档日志,实际使用中,我们不可能每次都备份全部归档日志,这样将产生归档日志重复备份的情况。在RMAN的参数设置中,有一个备份优化选项,通过设置configure backup optimization on启用备份优化,这样可以避免归档日志的重复备份。此外,也可以在备份完归档日志后立即清理已备份的归档日志,这样也是更方便更节约空间的办法。在ORACLE中,删除归档日志的操作同样通过rman来完成,backup命令后面加上delete input即可以删除刚刚已备份的归档日志。还可以制定定时任务,删除指定时间的归档日志,noprompt参数表示不提示删除并且只会删除已备份的归档日志。
backup archivelog all delete input; delete noprompt archivelog all before 'sysdate-6';
任何时刻,我都应通过rman去维护备份的相关操作,这样可以保证rman信息一致,否则会出现控制文件中的备份记录和实际备份不一致的现象。
三、RMAN的备份保留策略
使用rman对备份集进行管理一般需要设置备份的保留策略,备份保留策略可以基于冗余或恢复窗口。当备份不需要时会被标记为废弃(obsolete),但废弃的备份不会被删除,使用report obsolete命令可以查看已废弃的备份,通过delete obsolete命令可以删除废弃的备份。
configure retention policy to redundancy 3; configure retention policy to recovery window of 7 days; report obsolete; delete noprompt obsolete;
四、RMAN恢复
在RMAN恢复中,主要依靠两个命令完成restore和recovery,restore一般称为转储指从备份集中恢复对应的文件,recovery称为恢复指利用归档日志和redo进行完全或基于时间点的恢复。当ORACLE的数据文件损坏或丢失后,如果数据库的参数文件和控制文件完好,那么就可以通过rman的备份集恢复数据文件,并应用归档日志,实现数据库的完全或不完全恢复。恢复数据库时需要把数据库启动到mount状态。
startup mount; list backup summary; restore database; recovery database; alter database open;
在进行数据库的不完全恢复时,一般可以指定到恢复的时间点,并在完成恢复后需要使用resetlog选项启动数据库重置redolog。在restore转储时加上tag可以指定备份集这样就可以指定恢复哪一天的备份。
recovery database until time '2024-07-10 16:00:00'; alter database open resetlogs; restore database from tag='';#指定备份集恢复