达梦数据库如何做定时备份和删除过期备份

达梦数据库如何做定时备份和删除过期备份?

  数据库维护过程中,备份和恢复是重中之重的事情。尽管很多时候数据库运行缓慢,但对数据库丢失数据而言,后者是致命的。所以,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 &

### 配置达梦数据库实现自动定时备份 #### 创建备份脚本 为了确保达梦数据库能够定期执行备份操作,首先需要编写一个用于备份Shell脚本。该脚本会调用达梦数据库自带工具`dmrman`来完成实际的数据备份工作。 ```bash #!/bin/bash # 设置环境变量 export DM_HOME=/opt/dmdbms # 安装路径, 请根据实际情况修改 export LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH export PATH=$DM_HOME/bin:$PATH BACKUP_DIR="/data/backup" DATE=$(date +%Y%m%d_%H%M%S) $DM_HOME/bin/dmrsync -U SYSDBA -P sysdba_password -B $BACKUP_DIR/db_backup_$DATE.bak if [ $? -eq 0 ]; then echo "Backup succeeded at $(date)" else echo "Backup failed at $(date)" >&2 fi ``` 此段代码定义了一个简单的备份流程并将其保存为可执行文件[^1]。 #### 添加计划任务 通过Linux系统的cron服务可以轻松安排上述脚本按照指定的时间间隔运行。编辑crontab文件以加入新的调度条目: ```bash crontab -e ``` 向其中添加如下行以便每天凌晨两点钟触发一次完整的数据库备份过程: ```text 0 2 * * * /path/to/your/backup_script.sh >> /var/log/db_backup.log 2>&1 ``` 这里假设已经将之前编写的shell脚本放置到了特定位置,并赋予了相应的权限使其可以直接被执行[^2]。 #### 注意事项 - 在正式部署前务必测试整个方案的有效性稳定性。 - 应当妥善管理好存储空间,防止因长期积累过多的历史备份而导致磁盘满载。 - 对于生产环境中使用的任何自动化脚本都建议增加必要的日志记录功能,便于后续排查可能出现的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值