达梦数据库如何做定时备份和删除过期备份?
数据库维护过程中,备份和恢复是重中之重的事情。尽管很多时候数据库运行缓慢,但对数据库丢失数据而言,后者是致命的。所以,DBA要尽一切可能的做好数据库的备份工作。我们都知道数据库备份可以手工执行命令来备份,但是数据库备份一般都是在业务低峰期做的,人为的执行容易遗忘备份,并且不方便,所以我们可以把备份任务做为定时任务来执行。那么达梦数据库是怎么实现定时备份的呢?
达梦数据库的定时备份有两种实现方式:
一、通过建立数据库job对象来定时备份
二、通过编辑备份脚本,结合操作系统的定时任务来实现
下面分别讲讲这两种方式,怎么一步步实现:
方法1 创建定时备份job
启动达梦自带的客户端管理工具,可以很方便创建定时备份的job。
Ø 首先需要创建代理环境
对应的sql是:SP_INIT_JOB_SYS(1);
Ø 新建定时全备的job,比如DB_FULL_BAK
Ø 添加作业步骤
步骤类型有:备份数据库和基于备份集备份数据库。
第一种方式是比较旧的方式,不依赖dmap服务;
第二种方式是备份集的方式,依赖dmap服务,建议使用这种方式。
备份路径:最好是和数据库文件不同的路径。
备份并行数:根据实际的机器核数和负载来设置。
备份方式:选择完全备份,一定要压缩,备份日志。
Ø 新建作业调度
比如设置每周六晚22:00:00做一次全备,具体时间请根据项目实际情况。
最后点击保存,一个定时全库备份的job就做好了
通过查看该job的属性,可以看到具体的DDL:
call SP_CREATE_JOB ( 'DB_FULL_BAK' , 1 , 0 , '' , 0 , 0 , '' , 0 , ' 定时全库备份 ' );
call SP_JOB_CONFIG_START ( 'DB_FULL_BAK' );
call SP_ADD_JOB_STEP ( 'DB_FULL_BAK' , 'S1' , 6 , '01040000/dm/backup' , 1 , 2 , 0 , 0 , NULL , 0 );
call SP_ADD_JOB_SCHEDULE ( 'DB_FULL_BAK' , 'S2' , 1 , 2 , 1 , 64 , 0 , '22:00:00' , NULL , '2019-10-23 07:00:00' , NULL , ' 每周六晚 22:00:00 做一次全备 ' );
call SP_JOB_CONFIG_COMMIT ( 'DB_FULL_BAK' );
因为磁盘空间有限,所以生成的备份文件也需要定时去清理,包括不断产生的归档日志文件。
创建定时删除全备job
Ø 创建定时删除全备文件的job,比如:只保留30天的备份,具体请根据实际情况设置
Ø 新建作业步骤
Ø 新增调度,比如每周六凌晨1点执行
Ø 查看DDL
call SP_CREATE_JOB ( 'DEL_DB_FULL_BAK' , 1 , 0 , '' , 0 , 0 , '' , 0 , ' 定时删除全库备份 ' );
call SP_JOB_CONFIG_START ( 'DEL_DB_FULL_BAK' );
call SP_ADD_JOB_STEP ( 'DEL_DB_FULL_BAK' , 'S1' , 0 , ' SP_DB_BAKSET_REMOVE_BATCH(NULL,SYSDATE-30);' , 1 , 2 , 0 , 0 , NULL , 0 );
call SP_ADD_JOB_SCHEDULE ( 'DEL_DB_FULL_BAK' , 'S2' , 1 , 2 , 1 , 64 , 0 , '01:00:00' , NULL , '2019-10-23 15:14:18' , NULL , '' );
call SP_JOB_CONFIG_COMMIT ( 'DEL_DB_FULL_BAK' );
创建定时删除归档日志文件的job
Ø 虽然dmarch.ini可以限制归档文件的最大空间,但是还是做定时任务去清理更稳妥一点。
Ø 添加作业步骤
Ø 新增调度,比如删除30天前的归档日志文件
Ø 查看DDL
call SP_CREATE_JOB ( 'DEL_ARCH' , 1 , 0 , '' , 0 , 0 , '' , 0 , ' 定时删除归档 ' );
call SP_JOB_CONFIG_START ( 'DEL_ARCH' );
call SP_ADD_JOB_STEP ( 'DEL_ARCH' , 'S1' , 0 , ' SF_ARCHIVELOG_DELETE_BEFORE_TIME(SYSDATE - 30);' , 1 , 2 , 0 , 0 , NULL , 0 );
call SP_ADD_JOB_SCHEDULE ( 'DEL_ARCH' , 'S2' , 1 , 2 , 1 , 1 , 0 , '01:00:00' , NULL , '2019-10-23 15:30:33' , NULL , '' );
call SP_JOB_CONFIG_COMMIT ( 'DEL_ARCH' );
方法2 编辑备份脚本+crontab 定时执行
Ø 编辑全库备份脚本
vim db_full_bak.sh
#!/bin/bash
i=$(date +%F)
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA -e "backup database backupset '/dm/backup/DB_FULL_$i' compressed level 1 parallel 8;"
备份结果如下:
Ø 做定时任务
crontab -e
00 22 * * * /usr/bin/nohup /home/dmdba/db_full_bak.sh >>/home/dmdba/dmdbms/log/nohup.out &