#BACKUP DATABASE

# 通用描述

BACKUP DATABASE用于执行对当前数据库的备份,即将数据库文件拷贝一个副本,以备份集的形式持久化。

备份包括全量备份和增量备份。

  • 全量备份:对某一时间点上的所有数据进行完全复制,不依赖之前的备份集。一个全量备份集可以恢复出所有数据。
  • 增量备份:首次执行基线备份(level0),之后每次只需备份增量数据(level1),备份效率高,节省磁盘空间。恢复时需要从基线备份集开始依次恢复所有增量备份。

DBA_BACKUP_SET视图中查询生成的备份集信息。

V$BACKUP_PROGRESS视图中查询备份的过程信息。

只能在数据库状态为OPEN时备份数据库,且归档模式必须为开启状态(使用ALTER DATABASE语句调整归档模式)。

关于备份恢复的详细操作描述请参考备份恢复

分布式部署中,用户可以执行此语句,但只能对所在节点进行备份,因此不建议使用。如需对分布式集群进行备份,需使用yasrman工具。

# 语句定义

backupCommonSpecifier::=

backupCommonSpecifier
COMPRESSION ALGORITHM ZSTD LZ4 LOW MEDIUM HIGH ENCRYPTION AES128 AES192 AES256 SM4 IDENTIFIED BY password FORMAT backup_path TAG tag_name PARALLELISM integer SECTION SIZE size_clause

backup database::=

syntax
BACKUP DATABASE FULL INCREMENTAL LEVEL integer CUMULATIVE INDEPEND BASE ON tag_name backupCommonSpecifier FORCE DELETE BACKUPSET IF EXISTS TAG tag_name PATH backup_path CANCEL

# full

该语句用于指定备份方式为数据库全量备份,全量备份是默认的备份方式。

示例(单机、共享集群部署)

BACKUP DATABASE FULL;
 
--通过视图查看备份信息
SELECT RECID#,TYPE,INCREMENT_LEVEL,INCREMENT_ID#,PATH,TAG,TRUNC_LSN 
FROM DBA_BACKUP_SET 
ORDER BY START_TIME;
  RECID# TYPE    INCREMENT_LEVEL INCREMENT_ID# PATH                                                             TAG                       TRUNC_LSN
-------- ------- --------------- ------------- ---------------------------------------------------------------- ----------------------- -----------
       1 FULL                  0             0 /data/yashan/yasdb_data/db-1-1/backup/bak_2023121319584275       bak_2023121319584275         187034

# incremental level

该语句用于指定备份方式为增量备份。

LEVEL后只能指定0或者1,且必须指定,其中0即等同于全量备份,1表示增量备份。第一次进行增量备份时,必须指定LEVEL 0。

# independ

仅支持单机部署。

该语句在指定备份集为增量备份时,指定INDEPEND属性可生成独立增量备份链路的备份集,在DBA_BACKUP_SET视图中DEFAULT_BASE字段显示为FALSE,且该字段仅可在增量备份指定为LEVEL 0时可用。

# base on tag_name

仅支持单机部署。

该语句与INDEPEND字段使用目的一致,但BASE ON字段仅在增量备份指定为LEVEL 1时可用,且tag_name指定备份集必须为独立链路的备份集,即在DBA_BACKUP_SET视图中DEFAULT_BASE字段显示为FALSE的备份集。

# cumulative

对于LEVEL 1增量备份,显式指定CUMULATIVE时表示增量备份方式为累积增量备份,否则为普通增量备份。

  • 普通增量备份:普通增量备份的基线(LSN)是上一次增量备份,可以是level 0的,也可以是level 1的。从此种方式的增量备份集进行数据库恢复时,除此增量备份集外还需要至少一个其他的增量备份集。
  • 累积增量备份:累积增量备份的基线(LSN)是最近一次level 0的增量备份。从此种方式的增量备份集进行数据库恢复时,除此增量备份集外只需要一个其他的增量备份集。

Note

当备份指定CUMULATIVE后,不可同时指定备份属性为INDEPEND或者使用BASE ON语法。

示例(单机、共享集群部署)

BACKUP DATABASE INCREMENTAL LEVEL 0;
SELECT RECID#,TYPE,INCREMENT_LEVEL,INCREMENT_ID#,PATH,TAG,TRUNC_LSN 
FROM DBA_BACKUP_SET 
ORDER BY START_TIME;
  RECID# TYPE          INCREMENT_LEVEL INCREMENT_ID# PATH                                                             TAG                     TRUNC_LSN
-------- ------------- --------------- ------------- ---------------------------------------------------------------- ---------------------- ----------
       1 FULL                        0             0 /data/yashan/yasdb_data/db-1-1/backup/bak_2023121319584275       bak_2023121319584275       187034
       2 INCREMENTAL                 0             0 /data/yashan/yasdb_data/db-1-1/backup/bak_2023121320010894       bak_2023121320010894       187038
									 
BACKUP DATABASE INCREMENTAL LEVEL 1 CUMULATIVE;
SELECT RECID#,TYPE,INCREMENT_LEVEL,INCREMENT_ID#,PATH,TAG,TRUNC_LSN 
FROM DBA_BACKUP_SET 
ORDER BY START_TIME;
  RECID# TYPE          INCREMENT_LEVEL INCREMENT_ID# PATH                                                             TAG                     TRUNC_LSN
-------- ------------- --------------- ------------- ---------------------------------------------------------------- ---------------------- ----------
       1 FULL                        0             0 /data/yashan/yasdb_data/db-1-1/backup/bak_2023121319584275       bak_2023121319584275       187034
       2 INCREMENTAL                 0             0 /data/yashan/yasdb_data/db-1-1/backup/bak_2023121320010894       bak_2023121320010894       187038
       3 INCREMENTAL                 1             1 /data/yashan/yasdb_data/db-1-1/backup/bak_2023121320030305       bak_2023121320030305       187042

# compression

该语句用于压缩备份集,COMPRESSION后的选项都省略时,表示按ZSTD算法和LOW级别压缩备份数据。

增量备份的每个备份集可采用不同的压缩算法及级别,不影响对其的恢复。

压缩算法

通过ALGORITHM关键字指定,YashanDB提供如下两种压缩算法供用户选择:

  • ZSTD
  • LZ4
  • 其中:ZSTD算法提供更高的压缩率,LZ4算法提供更高的压缩速率。

压缩级别

在指定压缩算法时可同时指定压缩级别,可省略,则缺省采用LOW级别。

压缩级别包含HIGH、MEDIUM、LOW三个选项,其中HIGH表示最高的压缩率(最低的压缩速度),LOW表示最低的压缩率(最高的压缩速度)。

示例(单机、共享集群部署)

BACKUP DATABASE INCREMENTAL LEVEL 1 CUMULATIVE COMPRESSION;
BACKUP DATABASE INCREMENTAL LEVEL 1 CUMULATIVE COMPRESSION ALGORITHM lz4 HIGH;

# encryption

该语句用于加密备份集。

增量备份的每个备份集需要保证统一的都加密或者都不加密,且每个备份集的密钥必须保持一致。

加密算法

YashanDB提供如下四种加密算法供选择,不指定时默认采用SM4加密算法:

  • AES128
  • AES192
  • AES256
  • SM4

IDENTIFIED BY

指定加密备份时必须输入的密钥,该密钥输入的约束规则同用户口令规则,参考CREATE USER中password描述。

示例(单机、共享集群部署)

BACKUP DATABASE INCREMENTAL LEVEL 0 ENCRYPTION IDENTIFIED BY 12345;

--增量备份必须都加密
BACKUP DATABASE INCREMENTAL LEVEL 1;
YAS-00607 encryption algorithm error, the baseline backup set is encrypted

--增量备份的密钥必须相同
BACKUP DATABASE INCREMENTAL LEVEL 1 ENCRYPTION SM4 IDENTIFIED BY 123;
YAS-04261 invalid password: the backup password entered is inconsistent with the baseline backup password

--增量备份的加密算法可以不同
BACKUP DATABASE INCREMENTAL LEVEL 1 ENCRYPTION SM4 IDENTIFIED BY 12345;

# format

该语句用于指定生成的备份集的文件名称,省略则默认为$YASDB_DATA/backup/bak_{date}

当文件名称中未指定路径时,默认创建在数据库的$YASDB_DATA/backup文件夹下。

共享集群部署中,通过指定为YFS路径,可将数据备份至共享存储上;指定为普通磁盘路径时,则将数据备份至实例所在服务器上。

# tag

该语句用于指定备份集的别名,该别名最大长度为64(包含结束符'\0')。

# parallelism

该语句用于指定多线程备份的并行度,该值范围[1, 8],省略时默认为2。

# section size

该语句用于指定文件分片大小,超过该值的文件会被拆分为多个小文件执行备份,范围[128M, 32T],省略时默认为系统自动计算的最优值。若指定默认文件大小不是1M整数倍,则会向下取整按照1M对齐。

Note

请按照实际数据文件大小选择合适的分片大小,假设当前DB中单个数据文件最大大小为MAXSIZE,建议分片大小应该小于(MAXSIZE/(PARALLELISM*2)),且建议最大不超过4G,其中PARALLELISM为备份指定的并行度,可有效提高备份效率。

示例(单机、共享集群部署)

BACKUP DATABASE FULL FORMAT 'backup' TAG 'backup' PARALLELISM 8 SECTION SIZE 128M;

# force

该语句用于指定是否强制备份。

强制备份被应用于对只读数据库的备份,例如主备形态中的备库备份,强制备份不会记录系统表,也不需要备库连接到主库。

只能在执行全量备份时指定FORCE。

示例(单机、共享集群部署)

BACKUP DATABASE FULL FORMAT 'backup1' TAG 'backup1' PARALLELISM 8 SECTION SIZE 128M FORCE;

# cancel

该语句用于取消当前的backup,restore或build任务。

示例(单机、共享集群部署)

BACKUP DATABASE CANCEL;

# delete backupset

该语句用于删除备份集,以及DBA_BACKUP_SET里的备份集记录。

本语句只能在单机部署中执行。

示例(单机、共享集群部署)

BACKUP DATABASE DELETE BACKUPSET TAG 'backup';
BACKUP DATABASE DELETE BACKUPSET PATH '/data/yashan/yasdb_data/db-1-1/backup/bak_2023121319584275';