一、备份方式适用场景
二、物理备份原理
物理备份分为数据备份和Redo log备份。
(1)数据备份:物理备份数据备份过程中,根据 DM 数据文件系统的描述信息,准确判断每一个数据页是否被分配、使用,将未使用的数据页剔除,仅保留有效数据页进行备份。
(2)redo log 备份:将数据备份过程中所产生的redo log拷贝下来。
1、完全备份
执行完全备份,备份程序会扫描数据文件,拷贝所有被分配、使用的数据页,写入到备份片文件中。库备份会扫描整个数据库的所有数据文件,表空间备份则只扫描表空间内的数据文件。数据文件备份结束后,BEGIN_LSN 之前修改的所有数据页都被备份下来。
注:库备份不会备份TMP表空间里的数据文件。
1.1. 节点 BEGIN_LSN
为了保证备份的完整性和有效性,必须包含的归档日志起始 LSN 值。BEGIN_LSN = 备份开始时检查点偏移前一个 RLOG_PKG 的 max_lsn。(即有固定的起始点)
1.2. 节点 END_LSN
为了保证备份的完整性和有效性,必须包含归档日志结束 LSN 值。END_LSN = 备份结束时 FILE_LSN。(即一直拷贝到最后一次redo log刷盘)
为了简化还原过程,增量备份时要求 BEGIN_LSN 必须大于等于基准备份的 END_LSN,如果不满足条件,则强制生成检查点,直到 BEGIN_LSN 满足条件为止。
问:如果增备的BEGIN_LSN不大于基备份的END_LSN,会发生什么?
答:会做很多次日志重做,例如有一次全备、三次增备,如果每次增备都是BEGIN_LSN不大于基备份的END_LSN进行的,那么恢复时都要重做每次备份的redo日志,即四次,反之,则仅需要重做最后一次增备的redo log即可恢复所有的数据。
2、增量备份
执行增量备份,备份程序会扫描数据文件,拷贝所有基备份结束以后被修改的数据页,写入到备份片文件中。为了简化增量备份的还原过程,避免还原过程中重做基备份集对应的归档日志,DM 要求执行增量备份时,<=基备份 END_LSN 的所有数据页已经写入磁盘。由于基备份过程中,基备份 BEGIN_LSN 与 END_LSN 之间的数据页可能被修改,导致数据库中的数据与备份文件中的数据不一致,所以增量备份会拷贝 LSN >基备份 BEGIN_LSN 的数据页写入备份片文件中(如图 2.中第三根横轴所示),LSN <= 基备份 BEGIN_LSN 的数据页不需要写入到备份片文件中。
2.1 差异增备
在最近一次备份(全备或增备)基础上进行增量备份。
2.2 累计增备
在最近一次全备基础上进行增量备份。
3、表空间备份
表空间备份只拷贝指定表空间的数据页,因此,相对于数据库备份而言,表空间备份的速度会更快,生成的备份集会更小。对一些包含关键数据的用户表空间,我们可以使用表空间备份功能,进一步保障数据安全。表空间备份支持完全备份和增量备份,但只能在联机状态下执行。不支持 temp 表空间备份还原。
4、表备份
表备份主要包括数据备份和元信息备份两部分。与库备份和表空间备份不同,表备份不是直接扫描数据文件,而是从 BUFFER 中加载数据页,拷贝到备份片文件中。表备份的元信息则包括建表语句、重建约束语句、重建索引语句,以及其他相关属性信息。表备份不需要配置归档就可以执行,并且不支持增量表备份。
三、逻辑备份原理
四、物理备份语法详解(以库级备份为例)
4.1 语法
BACKUP DATABASE [ [ [FULL] [DDL_CLONE] ] | INCREMENT [CUMULATIVE][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]|[BASE ON BACKUPSET '<基备份目录>']][TO <备份名>][BACKUPSET '<备份集路径>']
4.2 基础参数应用场景及解释
(1)确定备份类型:全备 or 差异增备 or 累计增备
- FULL:备份类型。FULL 表示完全备份,可不指定,默认为完全备份。
- INCREMENT:备份类型。INCREMENT 表示增量备份,若要执行增量备份必须指定该参数。
- CUMULATIVE:用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型。 【两者差异体现在基备份的基础上】
- 差异增量备份:差异增量备份的基备份既可以是一个完全备份集,也可以是一个增量备份集。
- 累计增量备份:累积增量备份的基备份只能是完全备份集。
(2) 确定联机数据库备份路径:BACKUPSET
该参数用于指定备份集的输出路径,若指定为相对路径,则在默认备份路径下生成相对路径名称的目录,该目录下生成备份集。若不指定,则在默认备份路径中按约定规则,生成默认备份集目录。库级备份默认备份集目录名生成规则 : DB_ 库 名 _ 备份类型 _ 备份时间,如DB_DAMENG_FULL_20180518_143057_123456。表明该备份集为 2018 年 5 月 18 日备份与还原14 时 30 分 57 秒 123456 毫秒时生成的库名为 DAMENG 的数据库完全备份集。
默认备份目录:默认的备份路径为 dm.ini 中 BAK_PATH 配置的路径,通常默认是实例安装目录下的bak目录,如/dmdata/DM01/bak。
实例1:不指定backupset
backup DATABASE full;
实例2:指明相对路径
backup database full BACKUPSET 'BAK02';
实例3:指明绝对路径
backup database full BACKUPSET '/dmdata/DM01/BAK03';
⭐⭐⭐补充说明:一个目录一个备份集,不能单目录备份多个文件!
[执行语句1]:(在实例3的基础上)
backup database full to BAK01 BACKUPSET '/dmdata/DM01/BAK03';
执行失败(语句1)
-8055: 备份目录冲突
(3)增量备份指定基备份集路径 WITH BACKUPDIR 和BASE ON BACKUPSET
WITH BACKUPDIR:用于增量备份中,指定基备份的搜索目录,最大长度为 256 个字节。若不指定,自动在默认备份目录和当前备份目录下搜索基备份。如果基备份不在默认的备份目录或当前备份目录下,增量备份必须指定该参数。
BASE ON BACKUPSET:用于增量备份中,指定基备份集路径。
基备份集的搜索目录包含四种:默认备份目录、WITH BACKUPDIR子句指定的目录、还原时备份集所在的上级目录、增量备份时基备份集所在的上级目录。当使用WITH BACKUPDIR指定一个有效路径时,dm都会从该路径中辨识出搜索目录,在这个路径中找到合适的基备份集。例如是差异增备,则会找到最近一次的备份集(全备或增备)作为基备份集,如果是累计增备,则会找到最近一次的全备集作为基备份集。(对应实例1)
实例1:
创建测试环境:做三次全备,名称分别为bak01.bak、bak02.bak、bak03.bak。
SQL> backup database full backupset '/dmdata/DM01/bak/BAK01';
SQL> backup database full backupset '/dmdata/DM01/bak/BAK02';
SQL> backup database full backupset '/dmdata/DM01/bak/BAK03';
分别指定不同路径做增备,查看增备的基备份情况:
(1)指定'/dmdata/DM01/bak'(该路径下有三个全备路径)作为搜索目录。
backup DATABASE INCREMENT WITH BACKUPDIR '/dmdata/DM01/bak' to incr01 ;
(2)指定'/dmdata/DM01/bak/BAK01'(该路径下有一个全备路径)作为搜索目录。
backup DATABASE INCREMENT WITH BACKUPDIR '/dmdata/DM01/bak/BAK01' to incr02 ;
(3)指定'/dmdata/DM01/bak/BAK01'(该路径下有一个全备路径)作为基备份集路径。
backup DATABASE INCREMENT BASE ON BACKUPSET '/dmdata/DM01/bak/BAK01' to incr03 ;
(4)指定'/dmdata/DM01/bak/'(该路径下有三个全备路径)作为基备份集路径。
backup DATABASE INCREMENT base ON BACKUPSET '/dmdata/DM01/bak/' to incr06 ;
执行失败(语句1)
-10001: [错误码:-127]无效的备份集目录[/dmdata/DM01/bak]
执行情况:
select backup_name,base_name from SYS."V$BACKUPSET";
结果分析:增备incr01会在搜索目录中找到最近一次的备份集作为基备份集;增备incr02虽然指定的路径下只有一个全备集,但其会自动往上一级去搜索最近一次的备份集作为基备份集(即incr01);
(4)指定备份集的逻辑名称
指定生成备份名称。若未指定,系统随机生成,默认备份名格式为:DB_库名_备份类型_备份时间。其中,备份时间为开始备份时的系统时间。
注:DM中备份名分为两种类型,一是物理名称,一是逻辑名称。
物理名称指的是从系统路径查看的文件名,该名称不由用户指定,该名称同其所在目录名称相同。
逻辑名称指的是经过TO命名后的名称,可通过select * from SYS."V$BACKUPSET" 查看。
例如:在默认备份路径下执行备份
backup DATABASE full to BAK03;
(视图查询)
(系统路径查看)
五、逻辑备份语法详解
5.1 基础参数介绍
- 库级:FULL,使用方式为FULL = y
- 模式级:SCHEMAS(默认),使用方式schemas=schema1,schema2...
- 用户级:OWNER,使用方式OWNER=user1,user2,user3...
- 表级别:TABLES,使用方式TABLES=table1,table2,table3...
(5)LOG:指明日志名称,默认是dexp.log
5.2 实例1:全库备份
./dexp SYSDBA/SYSDBA@192.168.0.248:5236 FILE=dexp01.dmp LOG=dexp01.log DIRECTORY=/emc_2/data/dexp FULL=Y
5.3 实例2:表备份
./dexp SYSDBA/SYSDBA@192.168.0.248:5236 FILE=dexp03.dmp LOG=dexp03.log DIRECTORY=/emc_2/data/dexp tables=test01,test02