#备份

# 操作说明

  • 使用本方式执行备份时,要求数据库运行于OPEN状态且归档模式开启。
  • 备份命令仅SYS超级用户或拥有SYSDBA、SYSBACKUP权限的用户才可执行,备份语法详细说明请参考开发手册BACKUP DATABASE
  • 若数据库在只读模式(主备模式下,备库进行备份)下备份,需要指定FORCE关键字。
  • 备份会消耗一定的系统和数据库资源,请根据业务负载酌情选择备份窗口。
  • 跟踪$YASDB_DATA/log/run/run.log运行日志,可查看备份恢复过程的详细日志。
  • 可通过select * from V$BACKUP_PROGRESS语句实时查看备份进度。
  • 增量备份的多个备份集可采用不同的压缩算法。
  • 增量备份的多个备份集必须采用一致的加密策略(都加密或都不加密,都加密时密码相同),但可以采用不同的加密算法。
  • 共享集群部署中,同一时间只能在一个实例上执行备份操作,且备份期间如果任一实例宕机,该集群的备份操作将被中断。
  • 在备库执行备份操作,会阻塞备库回放表空间、数据文件的文件类型操作的REDO,例如文件增/删等,此时会导致主备的日志差距增大,需等待备库的备份操作完成后备库才会正常回放主库REDO。

# 备份

# 全量备份

示例(单机)

BACKUP DATABASE FULL FORMAT '/data/backup/full_20211209191000' TAG 'yas_full_backup' PARALLELISM 3;

示例(共享集群)

BACKUP DATABASE FULL FORMAT '+DG0/backup/yfs_full_20211209191000' TAG 'yfs_yas_full_backup' PARALLELISM 3;

本示例中,full关键字表明当前为全量备份,format关键字指定生成备份集的文件名称,tag关键字指定备份集的标识为"yas_full_backup",parallelism关键字指定备份任务以3个线程的并行度执行。

其中,备份共享集群部署的数据库时,format关键字指定的内容决定了备份集放于实例所在服务器磁盘,或者放于共享存储。当指定的内容为YFS路径时,表示将备份至共享存储;为普通磁盘绝对路径时,表示备份至服务器磁盘。

# LEVEL 0增量备份

示例(单机)

BACKUP DATABASE INCREMENTAL LEVEL 0  FORMAT '/data/backup/incr_0_20211209193516';

示例(共享集群)

BACKUP DATABASE INCREMENTAL LEVEL 0 FORMAT '+DG0/backup/incr_0_20211209193516';

本示例中,incremental level 0 关键字表明当前为零级增量备份,format关键字指定生成备份集的文件名称。

增量备份有LEVEL 0和LEVEL 1两个级别,其中LEVEL 0作为后续所有LEVEL 1的上层基线,本质上也是一种全量备份,但是在备份概要文件中添加了与全量备份区分的物理标识。

其中,备份共享集群部署的数据库时,format关键字可以指定为普通磁盘路径或者YFS路径。

# LEVEL 1增量备份

示例(单机)

BACKUP DATABASE INCREMENTAL LEVEL 1 FORMAT '/data/backup/incr_1_20211209193740';

示例(共享集群)

BACKUP DATABASE INCREMENTAL LEVEL 1 FORMAT '+DG0/backup/incr_1_20211209193740';

本示例中,incremental level 1 关键字表明当前为一级增量备份,format关键字指定生成备份集的文件名称。

增量备份只有LEVEL 0和LEVEL 1两个级别,其中LEVEL 1只备份自上次执行增量备份以后系统产生的增量数据(以上示例),相较于全量备份,增量备份数据量不大,能节省磁盘空间,恢复所需时间短。

YashanDB支持1000次连续LEVEL 1增量备份,考虑到备份集的可维护性与存储资源使用,不建议连续多次LEVEL 1增量备份。

其中,备份共享集群部署的数据库时,format关键字可以指定为普通磁盘路径或者YFS路径,但需注意的是,如果某次增量备份想与之前的备份指定不同的备份集存储(例如在level 0指定了YFS路径存储至共享存储,而level 1希望指定普通磁盘路径存储至实例所在磁盘),必须保证其与之前所有次备份的操作均是在同一个实例上发起,否则备份操作将失败。

# 基于tag的增量备份

# LEVEL 0

示例(单机)

BACKUP DATABASE INCREMENTAL LEVEL 0  FORMAT '/data/backup/base_incr_0_20211209193516' TAG 'base_incr_0' INDEPEND ;

本示例中,incremental level 0 关键字表明当前为零级增量备份,format关键字指定生成备份集的文件名称为"/YashanDB/backup/base_incr_0_20211209193516",INDEPEND关键字指定为独立的增量备份链,后续基于tag的增量备份必须为独立的增量备份链,指定的tag关键字是该备份集的唯一标识,后续可指定该tag作为基线做增量备份。

# LEVEL 1

示例(单机)

BACKUP DATABASE INCREMENTAL LEVEL 1  FORMAT '/data/backup/base_incr_1_20211209193516' TAG 'base_incr_1' BASE ON 'base_incr_0' ;

本示例中,incremental level 1 关键字表明当前为一级增量备份,format关键字指定生成备份集的文件名称为"/YashanDB/backup/base_incr_1_20211209193516",指定的tag关键字是该备份集的唯一标识,后续可指定该tag作为基线做增量备份。BASE ON 可以指定独立增量备份集的tag作为基线,在该基线的基础上做增量备份。实际表现与普通增量备份一致,仅仅是通过指定基线tag来生成不同的增量备份链。

Note

若指定的基线为level 0,其备份集生成时必须指定INDEPEND关键字。 若指定的基线为level 1备份集,该备份集也必须是指定BASE ON关键字生成的。 如果源库执行过RESTORE DATABASE 重新建库,必须重建基于tag增量备份的基线,即重新生成新的增量备份链。

# 备份压缩

示例(单机)

BACKUP DATABASE COMPRESSION ALGORITHM  ZSTD LOW FORMAT '/data/backup/full_compress' TAG 'yas_full_compress';

示例(共享集群)

BACKUP DATABASE COMPRESSION ALGORITHM  ZSTD LOW FORMAT '+DG0/backup/full_compress' TAG 'yas_full_compress';

本示例中,COMPRESSION关键字表明对源数据进行压缩备份,ALGORITHM关键字指定压缩算法,压缩算法可选ZSTD或者LZ4。LOW表示该种算法的压缩级别,有LOW、MEDIUM、HIGH 三种可选项。压缩也可以单独指定COMPRESSION参数,其余参数可以省略,即会使用默认的压缩算法ZSTD和压缩级别LOW。

# 备份加密

示例(单机)

BACKUP DATABASE ENCRYPTION AES256 IDENTIFIED BY yas2022 FORMAT '/data/backup/full_encryption' TAG 'yas_full_encryption';

示例(共享集群)

BACKUP DATABASE ENCRYPTION AES256 IDENTIFIED BY yas2022 FORMAT '+DG0/backup/full_encryption' TAG 'yas_full_encryption';

本示例中,ENCRYPTION关键字表明对源数据进行加密备份,AES256关键字表示加密算法,缺省值为AES128加密算法。其中加密算法可选AES128、AES192、AES256和SM4。IDENTIFIED BY关键字为指定加密备份集使用的密码。

# 常见问题

  • 备份必须运行在归档模式下,否则会触发YAS-02079报错。

  • 第一次增量备份必须为LEVEL 0备份,否则会触发YAS-02507错误。

  • 如指定了备份文件保存目录,必须保证该目录为空,否则会触发YAS-00318错误。

  • 确保备份文件保存目录的磁盘空间充足,否则会触发YAS-00301错误。

  • 备份并行度取值范围为[0,8]整数,否则会触发YAS-04204错误。

  • 超过1000次连续LEVEL 1增量备份,会触发YAS-02508错误。

  • 主备在最大保护模式下,如果备库断连,主库事务无法提交,继续在主库执行备份会偶现备份卡住问题。将主库事务切换为最大可用模式即可继续执行备份。

  • 备份不允许和表空间、redo文件等数据文件的增删、resize操作并发,需要等待任一操作完成之后才可执行。