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是指保存在硬盘上,还有可以指定保存在非硬盘的上面(磁带)。

👆上面所有的路径我们都是一条一条的在rman>的黑窗口内执行的,其实rman也是支持脚本语言的,以下是rman脚本结构:
rman>run{
语句1;
语句2;
语句3;
语句。。。
}
这脚本相当简单,就等于是把多条想执行的语句放到run里面批量执行,下面我们来实践一下,我们要做的事情为三样:
1.分配一个新通道并指定备份保存路径‘
2.备份数据文件 6;
3.释放通道。
实操:

RMAN> run{    
2> allocate channel ch1 device type disk format '/u01/backup/df-%U';
3> backup datafile 6;
4> release channel ch1;
5> }

这里已经写好了脚本了,说明一下,如果在第2行我们没有指定路径的话,下面的备份文件都会走默认的保存路径,如果我们指定了路径,那下面的备份集都不用format再指定路径,第4行的释放通道就算不写,当我们脚本执行完成后也还是会释放的。

RMAN> run{    
2> allocate channel ch1 device type disk format '/u01/backup/df-%U';
3> allocate channel ch2 device type disk format '/u01/backup/df-%U'; 
4> backup datafile 6;
5> }

这里我们也可以指定多条通道进行工作,可以提高备份效率,达到并行的效果

RMAN> run{    
2> set backup copies 2;
3> allocate channel ch1 device type disk format '/u01/backup/df-%c';
4> backup datafile 6;
5> }

这里我们可以设置多路备份,之前有讲到要使用多路备份,必须要修改参数CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
但是我们在run脚本里面是不用修改的,可以直接用set backup copies 数量
指定多路备份数,这个set命令只能在run脚本里面使用。

上面三种备份脚本我们都是登录到rman在rman>里面执行的脚本,当然我们也可以在操作系统里面执行,以linux系统为例:

[oracle@oracle u01]$ vim aa.rman
[oracle@oracle u01]$ cat aa.rman 
run{
allocate channel ch1 device type disk format '/u01/backup/df-%c';
backup datafile 6;
}
脚本已经写好,保存,这里要说一点就是.rman只是为了更好理解,后缀不一定要rman结尾。
[oracle@oracle u01]$ rman target / @aa.rman
我们执行该脚本就可以完成不登陆rman进行备份了。

非归档模式下通过rman备份

::在非归档模式下备份的命令与归档模式下是完全相同的,这里要说唯一不同的就是:在非归档模式下面,如果想使用rman进行备份的话,必须在mount状态下面,不能在open状态下进行备份::

恢复目录

什么是恢复目录?恢复目录不会保存实际的备份数据或备份文件,它用于保存备份的信息(备份时间、备份位置、备份有效期)之类的信息,随着备份的数据日益增长,控制文件也会越来越大,所以需要建立一个恢复目录专门保存控制文件的地方,而恢复目录会单独保存在硬盘上的一个单独表空间内,下面讲述怎么创建和使用一个恢复目录:

创建恢复目录:
--创建表空间
SQL> create tablespace yy datafile '/u01/yy.dbf' size 10m
  2  autoextend on next 5m
  3  maxsize unlimited;  

Tablespace created.
--创建用户并指定默认表空间和无限配额
SQL> create user hugo identified by oracle default tablespace yy quota unlimited on yy;

User created.
--赋予登录、恢复、恢复目录用户指定的权限(权限设置是很关键的一步)
SQL> grant connect,resource,recovery_catalog_owner to hugo;

Grant succeeded.
--登录恢复目录,这里会与之前登录rman工具命令不同
[oracle@oracle ~]$ rman catalog hugo/oracle

Recovery Manager: Release 11.2.0.1.0 - Production on Sun Jul 12 15:45:44 2020

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to recovery catalog database

RMAN> 
--创建恢复目录并挂载到yy表空间
RMAN> create catalog tablespace yy;

recovery catalog created
这里如果不指定挂载表空间将会创建在默认的user表空间下面
--登录数据库并使用恢复目录
[oracle@oracle ~]$ rman catalog hugo/oracle target /

Recovery Manager: Release 11.2.0.1.0 - Production on Sun Jul 12 15:48:41 2020

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to target database: PAS (DBID=2578645728)
connected to recovery catalog database

RMAN> 
--注册,将当前数据库实例注册到恢复目录中
RMAN> register database;

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
--(校验成果)备份数据文件6并设置为永不过期
RMAN> backup datafile 6 format '/u01/backup/dt-%c' keep forever logs;

备份模式

上面有介绍备份的模式,分别为全量备份和增量备份,我们再回顾一下这两种备份并介绍一种新的备份:
全量备份:假如我要备份的数据文件大小是100g,那我备份出来的备份集也就是100g
优点:数据全 缺点:时间慢,占用过多的磁盘空间
增量备份:假如星期天备份了100g数据,星期一的数据增长到了110g,星期二的数据增长到120g,以星期一为例跟星期天对比只增长了10g的数据,那增量备份就只会备份这10g的数据,星期二的话就跟星期一比较,顺势而为。
优点:速度快,占用空间小 缺点:数据紧凑性需要合理的备份策略,否则会出现数据遗漏。
(新)累计备份:记录从周末以来的变化,假如星期天的数据100g,星期一110g,星期二120g,那星期一跟星期天比是增量了10g,而到了星期二就不再是跟星期一比了,是跟星期天比,那就是增长了20g,这就是累计备份。
下面简单的介绍下几句备份的命令:

--全量备份
backup tablespace xx; 
--备份级别为0的话,也是全量备份,建议全量备份采用这种形式。
backup incremental level 0 tablespace xx;
--增量备份
backup incremental level 1 tablespace xx;
backup incremental level 2 tablespace xx;
级别1会和备份级别0对比,级别2会和级别1对比,结合上面的介绍就好理解了
--累计备份
backup incremental level 2 cumulative tablespace xx;
backup incremental level 3 cumulative tablespace xx;
视上次周末备份的级别,级别23会与上次周末备份集进行对比累计备份。

此外,Rman里面还有其他一些实用的命令,比如
report schema;(查看数据库的表空间情况)
report obsolete redundancy 2;(会根据当前备份策略查看有哪些废弃备份)

对RMAN有兴趣的小伙伴可以深入研究,只要肯在RMAN上投入时间精力,你将来会领会到RMAN给你带来的意想不到的快乐😄

本文内容较长,感谢大家耐心阅读,大家对文章内容有意见或建议欢迎私信留言互相讨论,送人玫瑰,手有余香,能帮到您的话,点个赞呗👍

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值