什么是备份通道?RMAN为什么要使用通道?我们先看看没有通道是什么样的操作。假设我们没有使用RMAN,直接拷贝了数据文件,这时候有通道概念吗?其实是有的,它就是文件系统,我们拷贝数据文件本质上就是复制了数据块并且创建了文件系统元数据。这样的缺点是什么?首先,不能保证拷贝成功,因此数据文件实时写入;其次,效率低;第三,不能解决与第三方,如备份软件的对接。因此,Oracle设计了RMAN工具。它从进程层面与数据库通讯,在数据文件实时写入情况下也可以进行数据的拷贝。这个进程层面的数据传输,就是通道的概念。通道可以配置为磁盘间传输,也可以配置为磁盘到第三方备份软件间传输(需要驱动程序)。
1. 通道简介
备份通道,就是一套内存结构。它从数据文件中读取数据,存入Input buffer,再拷贝到Output buffer中。根据通道类型,DISK或SBT,从Output buffer将数据拷贝到相应的目标中。
可以看到,链路、Buffer,以及处理拷贝的CPU资源,都是影响备份和恢复性能的重要因素。本文不涉及调优内容,其实我在这方面的经验也不多,大多数情况下也不需要调优。
2. 通道配置
2.1 多通道
在文章最开始的举例中提及到了创建通道,通道的数量可以影响备份的速度。如果希望更快的完成备份,就需要创建更多的通道。保量通过的数量和备份的整体速度并不是一定成正比。例如,备份数据保存在一个文件系统中,文件系统的性能会成为瓶颈。这时,创建更多的通道就没有意义了,反而由于资源竞争会降低备份速度。我们可以向不同的通道指向不同的文件系统,例如:
RMAN> allocate channel c1 device type disk format '/f1/%U';
RMAN> allocate channel c2 device type disk format '/f2/%U';
将所有任务分散到两个不同的文件系统,避免单个文件系统瓶颈。
在使用备份软件时,依然可以利用多通道提升备份速度,但是这要求备份软件具备多个介质服务器。通常,一些主流的备份软件都可以支持多介质服务器并行架构,例如NetBackup、Commvault等。
2.2 通道分配
通道的分配是调优范畴,这里仅作一点简单的介绍,详细内容请参照官方文档《database backup and recovery reference》。
RMAN会自动将数据库的内容分配到多个通道进行备份,也支持手工分配来进行优化。在大多数情况下,RMAN的算法会根据实际情况来自动调整通道的任务。有某些场景下,例如数据库中有多个数据文件,其中某几个大小约500G到1T,其它数据文件大小在1G到20G之间。这种场景下,如果使用自动分配,会按照一定的算法尽量最大化通道资源利用。我们也可以手工来分配,例如,
RMAN> run {
2> allocate channel c1 type disk;
3> backup datafile 1,3,4,5;
4> allocate channel c2 type disk;
5> backup datafile 6,7,8,9;
6> allocate channel c3 type disk;
7> backup datafile 9,10,11,12;
8> allocate channel c3 type disk;
9> backup datafile 13,15,16,18;
10> }
将数据文件的大小按照比例均匀的分配到多个通道中,最大化备份资源使用,提升备份速度。但是这似乎是一种非常低效的办法,需要人工计算,并且经常需要调整来适应数据文件的变化。因此,我们可以尝试另外一种方法,给默认的自动计算方式加上一些条件来满足需求。
如果有些数据文件的大小比较突出的情况下,无法将总体数据量比较均匀的分配到所有的通道,就需要将某个数据文件进行拆分的备份。每个通道每一次执行设置一个最大的数据量(section size)。例如,
RMAN> run {
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> allocate channel c3 type disk;
5> allocate channel c4 type disk;
6> backup database section size 10g;
7> }
这样一来,不论数据文件有多大,每个通道一次执行最多备份10G。如果数据文件50G,就会自动被分配到不同的通道上,一共执行5次。
还有些情况下,为了备份数据的管理方便,也是为了提升“消重率”的原因,管理员需要每个通道每一次只备份1个数据文件。自动方式下,每个通道一次的备份数据文件数量不可控,但是手工也可以指定。例如,
RMAN> run {
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> allocate channel c3 type disk;
5> allocate channel c4 type disk;
6> backup database filesperset 1;
7> }
3. 多实例
在多实例(RAC)场景中,可以利用并行能力进行备份,同时从两个或多个节点并行备份数据。这会大幅提升备份速度,特别是大型数据库场景下的优势更为突出。在创建通道时,添加实例属性,
RMAN> run {
2> allocate channel c1 type disk connect 'sys/password@rac1';
3> allocate channel c2 type disk connect 'sys/password@rac2';
4> allocate channel c3 type disk connect 'sys/password@rac1';
5> allocate channel c4 type disk connect 'sys/password@rac2';
6> backup format '192.168.10.101:/path/bk_%U' database;
7> backup format '192.168.10.101:/path/arch_%U' archivelog all;
8> }
rac1和rac2是RAC的两个节点实例,在任意一个节点上都可以执行备份操作。默认的备份用户是SYS。备份数据的保存地址要设置为两个节点可同时访问的共享路径,如文件共享服务器等。当备份运行时,会从每个节点发起一个备份通道进行备份,也可以在每一个节点配置多个通道。
在恢复时,创建通道使用的语法相同,并且通道数量可以任意配置。可以从单实例恢复,也可以进行多实例并行恢复。
CSDN视频课程:
https://edu.csdn.net/lecturer/8135?spm=1002.2001.3001.4144
3280

被折叠的 条评论
为什么被折叠?



