#BACKUP DATABASE
# 通用描述
BACKUP DATABASE用于执行对当前数据库的备份,即将数据库文件拷贝一个副本,以备份集的形式持久化。
备份包括全量备份和增量备份。
- 全量备份:对某一时间点上的所有数据进行完全复制,不依赖之前的备份集。一个全量备份集可以恢复出所有数据。
- 增量备份:首次执行基线备份(level0),之后每次只需备份增量数据(level1),备份效率高,节省磁盘空间。恢复时需要从基线备份集开始依次恢复所有增量备份。
在DBA_BACKUP_SET
视图中查询生成的备份集信息。
在V$BACKUP_PROGRESS
视图中查询备份的过程信息。
只能在数据库状态为OPEN时备份数据库,且归档模式必须为开启状态(使用ALTER DATABASE语句调整归档模式)。
关于备份恢复的详细操作描述请参考备份恢复。
分布式部署中,用户可以执行此语句,但只能对所在节点进行备份,因此不建议使用。如需对分布式集群进行备份,需使用yasrman工具。
# 语句定义
backupCommonSpecifier::=
backup database::=
# 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里的备份集记录。
# if exists
备份集删除命令可选项。若不确定指定备份集TAG的视图信息或者备份集物理文件是否存在时可指定该选项,均返回删除成功。
示例(单机、共享集群部署)
BACKUP DATABASE DELETE BACKUPSET TAG 'backup';
BACKUP DATABASE DELETE BACKUPSET PATH '/data/yashan/yasdb_data/db-1-1/backup/bak_2023121319584275';
BACKUP DATABASE DELETE BACKUPSET IF EXISTS TAG 'backup';
Note:
执行指定备份集TAG的备份集删除命令将删除备份视图内容和物理备份集。指定物理备份集目录则只删除物理备份集,该备份集对应的视图内容仍然保留。
若备份视图残留、备份集物理文件已被删除,可指定IF EXISTS选项执行备份集删除命令,即可删除成功且返回删除成功结果。