RMAN 备份管理-上集
RMAN(Recover Manager)
RAMN工作原理
1)RMAN属于客户端工具, RMAN通过自行创建的通道(channerl)访问目标数据库中的数据文件、控制文件、日志文件,将这些文件按需求的进行备份存储到某个空间,而RMAN存储格式分为三种:
(1)备份集(backupset)
(2)压缩备份集(compressed backupset)
(3)镜像(copy)
2)而这里组成备份集的每个文件叫做备份片,什么叫备份片,就是存在于备份集编号里的每一个文件就是对应备份集的备份片。
3)在RMAN工具里有个叫RMAN资料库,它用于存放备份后的信息,例如备份了哪些文件等信息,类似于验收确认单一样的作用,而RMAN资料库存放在两个地方:
(1)目标数据库的控制文件中
(2)恢复目录
4)RAMN工具的优点:
(1)RAMN只备份有效的数据
(2)RAMN支持增量备份
增量备份大家应该会比较好理解,简单的说就是我第一次备份了1、2、3这三条数据,过了一段时间,我的数据增长到1、2、3、4、5、6了,那这时RMAN就可以基于我们上次的备份做增量备份,只备份4、5、6的数据,这样对空间利用会更完善、效率也会提高;
什么叫RMAN只备份有效数据?举个例子,我们现在要备份某一个表空间,而这个表空间对应的数据文件大小是100m,而这100m的大小中实际只使用10m
如果我们按照上一章用户管理的备份方式,不管用脱机备份还是联机备份,我们都要将这100m的数据文件进行完全备份,而RAMN恰恰相反,它可以将这100m里实际使用的10m进行备份,因为这10m对于这100m来说才是有效数据
5)大致上RAMN的工作原理就概述了一些,详细的后续会结合实操跟大家操作,后续实操会分为两个部分,第一个会使用没有恢复目录下的RMAN使用,第二个则是有恢复目录下的RMAN使用,这两块操作流程都差不多,只是想更清楚告诉大家工作原理。
⚠️最后说一点,在使用RMAN的时候,尽量在归档模式下使用,当然非归档模式也可以使用RMAN,像我之前也有说过,没有什么理由使用非归档模式,所以我们还是选择在归档模式下使用RMAN你会发现更加的便捷。
打开RMAN工具
(1)在ORACLE用户(OS用户)下输入`rman target / `这里就不再是在sqlplus里面输入了。
(2)会发现我们已经进入到目前实例下的RMAN>
- RMAN工具的使用流程:
- (1)List backup; - - 查看目前数据库中所有备份,如果是第一次使用是没有任何备份。
- (2)backup database; - -备份整个数据库所有文件(数据文件、控制文件、日志文件、参数文件),当我们执行的时候就会看到allocated channel:这个参数,表示的是rman已经自动分配了一个通道用于数据的传输,当你通道越多时,传输自然越快;piece handle=这个参数就是我们备份到哪一个位置。
- (3)备份完整个数据库后,我们再使用list backup就会发现出现了很多信息,我们首先关注BP Key:这个值,这个值就代表是一个备份集,如果是第一次备份那这里就是1,再看到List of Datafiles in backup set 1这句话,下面就是存放在备份集1里面的文件列表,这些文件列表就是组层备份集的备份片。
- (4)List backup of database; - -只查看备份过的数据库信息,刚刚上面说到,我们RMAN资料库就是存放备份信息的,里面存放的信息就可以通过list backup of database 查看了,存放的信息有备份集的名字、备份文件路径信息和带.bkp后缀的备份文件、是否有压缩(Compressed)、备份了哪些文件都是存放RMAN资料库中
- (5)delete backupset 1;- -删除备份集1,输入yes即可完成删除。
delete backupset 2;- -删除备份集2,输入yes即可完成删除。
delete backupset 1,2;- -删除备份集1,2,输入yes即可完成删除。
delete backup; - -删除所有的备份集,选择yes,啥都不留。
RMAN备份数据文件
(1)select file_id,file_name from dba_data_files; - -查询数据文件的编号和路径,假设我查询的结果如下:
file_id file_name
1 /u01/app/oracle/oradata/pas/system01.dbf
2 /u01/app/oracle/oradata/pas/sysaux01.dbf
3 /u01/app/oracle/oradata/pas/undotbs01.dbf
4 /u01/app/oracle/oradata/pas/users01.dbf
5 /u01/app/oracle/oradata/pas/example01.dbf
6 /u01/xx.dbf
(2)RMAN有两种备份数据文件的方式,和上面备份数据库步骤差不多:
backup datafile 6; - -这种是直接指定file_id来备份
backup datafile ‘/u01/xx.dbf’; - -这种是直接指定file_name来备份
(3)备份完成后,我们通过list backup查看到我们刚刚备份的备份集,
留意到piece handle=这个路径,这个路径看上去复杂且长,但是恢复的时候只要我们执行resotre,rman会自动帮我们在这个路径下恢复,无需我们过多操作,但你说想换个路径也行:
backup datafile 6 format ‘/u01/backup/df6.dbf’;
这里说一点,我们将file_id为6的数据文件指向了我们所设定的目录下的文件里,这里就不再是指定到目录了,而是一定要指定到文件(df6.dbf)
(4)也可以修改备份集的target号:
backup datafile 6 format '/u01/backup1/df6.dbf' target='123456';
这个target号作用不大,就是一个记录的单位。
(5)最后备份完成,可以去rman资料库查看备份信息。
RMAN备份表空间
(1)select tablespace_name,file_id,file_name from dba_data_files; --查看表空间的名称
(2)以表空间xx为例进行备份,backup tablespace xx;
(3)备份完成,检查备份集,list backup;
(4)可以从备份信息看到,我们xx表空间目前是只有一个数据文件对应的,那我们现在来增加一个数据文件:
alter tablespace xx add
datafile '/u01/xx1.dbf' size 10m
autoextend on next 5m
maxsize unlimited;
(5)目前xx表空间已经有两个数据文件对应了,现在我们删除刚刚的备份集,重新备份并制定保存目录,backup tablespace xx format '/u01/backup1/tsxx';
(6)备份完成之后再检查备份信息,list backup,会发现无论数据文件的数量有多少,只要我们将表空间备份就能把它名下的数据文件也一一备份。
(7)备份完成后,我们去到备份的目录下查看tsxx备份文件的大小:
ls -hl tsxx
-rw-r-----. 1 oracle oinstall 2.2M Jul 3 13:06 tsxx
再查看一下我们备份源文件的两个数据文件的大小:
ls -hl xx*.dbf
-rw-r-----. 1 oracle oinstall 11M Jul 3 13:06 xx1.dbf
-rw-r-----. 1 oracle oinstall 11M Jul 3 13:06 xx.dbf
从上面两个查询结果可以看出,两个原数据文件的大小分别为11M,但是我们备份完的备份文件就只有2.2M,这就是RMAN只备份有效数据的实践结果,在xx表空间里我们真正只是用了2.2M的真实数据。
RMAN备份控制文件
备份控制文件两种方法:
(1)(手动备份)backup current controlfile format '/u01/backup/controlfile1';--假如我们数据库中有两个控制文件,RMAN就会将我们两个控制文件都备份到controlfile1这个文件当中,出现控制文件丢失或损坏时,可以使用这个文件(controlfile1)恢复两个控制文件.
(2)(自动备份)控制文件在数据库的地位是重中之重,手动备份解决不了长远的问题,有可能等真正出现问题的时候,也来不及再手动备份了,所有我们需要使用自动备份:
show all;--这个可以查看到RMAN提供给实例的一些相关参数,可以看到全都是默认状态的#default,我们目前只关注这个参数(CONFIGURE CONTROLFILE AUTOBACKUP OFF;)这代表控制文件自动备份的开关,我们现在修改成ON,开启自动备份,CONFIGURE CONTROLFILE AUTOBACKUP ON;
这里开启的自动备份并不是控制文件会自己备份,而是当我们在备份别的文件的时候,类似我们在备份数据文件的时候,就会自动将控制文件包括动态参数文件一同备份,以下是备份数据文件同时rman帮我自动把控制文件和动态参数文件自动备份的信息:
Starting Control File and SPFILE Autobackup at 03-JUL-20
piece handle=/u01/app/oracle/flash_recovery_area/PAS/autobackup/2020_07_03/o1_mf_s_1044797233_hhxjfktc_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 03-JUL-20
(4)这样就完成了控制文件的自动备份。
RMAN备份重做日志
* rman是不能直接备份重做日志,但是可以备份归档日志
* backup archivelog all format ‘/u01/backup’;这个命令就会将所有的归档日志备份。
* 运行backup archivelog all 命令时执行的步骤:
1.alter system archive log current; 归档当前日志
2.backup archivelog all ; 备份所有归档日志
* backup database plus archivelog;这个命令就类似于之前的alter system switch logfile;但这个命令是一个加强版,当我们备份整个数据库的时候也会把当前的重做日志切换,生成归档日志后再备份。
而运行backup database plus archivelog命令,数据库系统后台执行步骤;
1.alter system archive log current; 归档当前日志
2.backup archivelog all; 备份所有归档日志
3.backup database; 备份数据库
4.alter system archive log current; 归档当前日志
5.backup archivelog recently generated ; 备份刚生成的归档日志
删除归档日志一般在备份归档日志同时加上一个参数:delete all input
例如:backup database plus archivelog delete all input;
执行此命令是会将所有的归档日志进行备份,并且在备份的同时删除已备份的归档日志。
所以如果在RMAN备份脚本中有plus archivelog 参数 就无需在备份归档日志之前执行: sql ‘alter system archive log current’;
我们也还可以使用多路备份,举个例子::: ::> (1)通过rman>show all;查看CONFIGURE DATAFILE
BACKUP COPIES FOR DEVICE TYPE DISK TO
1;这个默认值,这句命令的意思就是不管采用几路备份,但每次只会备份一个文件,这里我们就可以将这个值改一下,目前采用两路备份,CONFIGURE
DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 2;:: ::> (2)backup
datafile 6 format ‘/u01/backup1/dbf’,’/u01/backup2/dbf’;:: ::>
当我们备份在一个位置的安全性还不够完善的时候,可以考虑采用多路备份,但是有一点要注意,路径和备份文件名称不能相同,否则会报错,如果想在一个路径下写入两个副本,可以在路径末尾加上%c;
压缩备份集
之前我们一开始讲到rman备份有三种模式,而我们上面一直都是采用备份集的形式进行备份,到这里我们就要讲一下压缩备份集compressed backupset的方式了。
backup as compressed backupset datafile 6 '/u01/backup/dft-2';
上面这句命令就是将备份集进行压缩,和我们之前做的备份对比只是多了个as 和compressed backups’,这个as其实是一直默认有的,只是我们之前没有写到。
可以尝试对比之前的备份集和压缩后备份集的文件大小的变化,他们文件的内容是没有任何区别的,只是压缩过后可以减少更多的空间。
建议:在实际环境中优先考虑此备份方式。
镜像copy
第三种备份方式也同样简单,但是唯独这种备份方式和前两种不同的一点就是:之前两种备份方式都是将“有效数据”进行备份,多余的空间不会一同备份,而镜像备份就等于完全把需要备份的文件一模一样的复制。
backup as copy datafile 6 format '/u01/backup/dft-3;
这里我就不贴图了,举个例子:需要备份的xx.dbf文件大小为11m,那我们通过以上两种方法备份出来的会是 备份集:1.2 压缩备份集 1.3 镜像 11m,就这么简单。
查看镜像备份就不再是之前的list bakcup,而是list copy;
删除镜像备份从delete backup 改为 delta copy;
这也是跟前两种备份不同的地方。
—-将备份文件设为永久有效,不会设为“废弃”状态,但是这句命令当前是不会执行成功,因为需要恢复目录,后面会在有恢复目录下演示
`Backup datafile 6 format ‘/u01/backup/df6’ keep forever logs;`
—-设置备份从当前时间开始到未来的一百天内不会“废弃”
`backup datafile 6 format '/u01/backup/df6' keep until time ='sysdate+100';`
—-设置备份从当前时间开始到未来的一百天内不会“废弃”,并且会自动为文件名自动补充
`backup datafile 6 format '/u01/backup/df6-%U' keep until time ='sysdate+100';`
还有别的%使用,类似于%c就会为文件自增长序列,文件1、文件2、文件3这样,不用自己去设,系统自己搞定,就是为了避免备份的时候出现文件重复。
保留备份策略的类型:(有两种备份类型)
(1)redundancy(冗余):默认是冗余
`rman> configure retention policy to redundancy x;`
(2)recovery window(恢复窗口)
`rman> configure retention policy to recovery window of x days;`
配置恢复窗口期的时候,时间应该不大于参数control_file_record_keep_time 的值。
取消备份策略:(永不将备份置为obsolete)
rman> configure retention policy to none;
修改默认路径,当我们直接使用backup datafile 6不通过format指定路径的时候,可以看到系统的默认备份保存路径是又长又复杂,这时我们就可以修改这个备份的保存路径,便于我们查询
configure channel device type disk format '/u01/backup/%U';
这里我在show all里面跟上面的添加窗口期一样,再添加多一个策略,我们将备份集默认的保存路径修改为’/u01/backup,并且会自动生成名字,这里的type to disk是指保存在硬盘上,还有可以指定保存在非硬盘的上面(磁带)。