16.3.7 归档模式下数据文件的备份
生产系统的数据库一般都处于归档模式下,而数据库中的数据文件是需要重点保护的,所以,在归档模式下对数据文件的备份方法需要读者重点掌握。
在归档模式下对数据文件的备份是很灵活的,可以针对整个数据库,或者针对一个表空间,或者针对表空间中的某个数据文件进行备份。尽管我们可以对数据库进行冷备份,但是对于生产系统而言,进行热备份显然是最合适的。
利用RMAN,可以对数据库进行完全备份和增量备份。完全备份和增量备份通过不同的备份级别来实现。在Oracle数据库中,可以实现以下几个级别的备份:
·FULL:完全备份。
·0:完全备份。
·1~4:增量备份。
需要注意的是,完全备份并不是指对整个数据库的备份。完全备份和增量备份可以针对整个数据库,或者一个表空间,或者一个数据文件。如果把整个数据库,或者某个表空间,或者某个数据文件中的数据全部备份,这次备份就是完全备份。反之,如果只把一段时间内数据库,或者表空间,或者数据文件中被修改的数据进行备份,这次备份就是增量备份。
大家还需要注意的是,尽管FULL和0备份都是完全备份,但是两者是有区别的。0级备份是增量备份的基础,而FULL备份不是。也就是说,在做增量备份之前,必须先做一次0级备份,如果没有做,那么RMAN将自动做一次0级备份。FULL备份可以认为是一种独立的备份,即使对数据库做了FULL备份,在做增量备份之前,还需要做一次0级备份。
例如,下面的代码用于对表空间users做一次0级备份:
RUN{
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;
ALLOCATE CHANNEL ch2 DEVICE TYPE DISK;
BACKUP INCREMENTAL LEVEL 0 tablespace users
FORMAT'/home/oracle/users0%T_%p';
RELEASE CHANNEL ch1;
RELEASE CHANNEL ch2;
}
下面的代码用于对表空间users做一次1级备份:
RUN{
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;
ALLOCATE CHANNEL ch2 DEVICE TYPE DISK;
BACKUP INCREMENTAL LEVEL 1 tablespace users
FORMAT'/home/oracle/users1%T_%p';
RELEASE CHANNEL ch1;
RELEASE CHANNEL ch2;
}
如果把上述代码中的BACKUP命令换成下面的形式,则分别用来对整个数据库和某个数据文件进行0级和1级备份。
BACKUP INCREMENTAL LEVEL 0 database FORMAT'/home/oracle/db0%T_%p';
BACKUP INCREMENTAL LEVEL 1 database FORMAT'/home/oracle/db1%T_%p';
BACKUP INCREMENTAL LEVEL 0 datafile 6 FORMAT'/home/oracle/file60%T_%p';
BACKUP INCREMENTAL LEVEL 1 datafile 6 FORMAT'/home/oracle/file61%T_%p';
在对数据文件进行备份时,可以指定数据文件的ID号,也可以指定它的完整路径。数据文件的ID号可以从数据字典视图dba_data_files中获得。
上述命令序列通过一对花括号限定,在命令序列的前面是一条RMAN中的命令RUN。通过这种形式把逻辑上相关的一组命令组合在一起,使它们组成一个相对独立的代码空间,在这里可以对通道进行配置,所做配置只在这个空间中有效。当输入花括号“}”时,这些命令即开始按顺序执行。
在BACKUP命令中,通过FORMAT关键字指定备份文件的存储路径和文件名称。文件的命名原则首先是要保证文件名的唯一性,否则以前产生的备份文件可能会被覆盖。其次,根据文件名能够判断这个文件是对谁做的什么级别的备份。为此,在文件名称中可以使用一些变量,如%T。这些变量具有特殊的含义,在产生备份文件时,这些变量被替换为实际的变量值。在表16.1中列出了在RMAN中可以使用的一些变量。
一般来说,在一个数据库中,我们把备份的重点放在业务数据所在的表空间上,不需要对整个数据库进行备份,临时表空间、UNDO表空间、SYSTEM表空间和SYSAUX表空间是不需要备份的。为了备份方便,应该把业务数据所相关的表单独存放在一个表空间中,而且把表上的索引单独存放在另外一个表空间中,因为索引表空间也不需要备份。