欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

RMAN 备份管理-上集

程序员文章站 2024-01-06 08:00:52
RAMN工作原理1)RMAN属于客户端工具,RMAN通过自行创建的通道(channerl)访问目标数据库中的数据文件、控制文件、日志文件,将这些文件按需求的进行备份存储到某个空间,而RMAN存储格式分为三种:(1)备份集(backupset)(2)压缩备份集(compressed backupset)(3)镜像(copy)2)而这里组成备份集的每个文件叫做备份片,什么叫备份片,就是存在于备份集编号里的每一个文件就是对应备份集的备份片。3)在RMAN工具里有个叫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备份数据文件

1select 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备份表空间

1select 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-204)这样就完成了控制文件的自动备份。

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 参数 就无需在备份归档日志之前执行: sqlalter 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是指保存在硬盘上,还有可以指定保存在非硬盘的上面(磁带)。

相关标签: 数据库