DM7定时创建及删除备份文件

本文详细介绍DM7数据库的在线备份策略,包括全量备份、增量备份及过期备份文件的自动清理流程,并演示如何使用DM7的还原功能恢复数据库至特定状态。

DM7定时创建备份文件
前提条件
修改dm.ini和dmarch.ini,保证能够在联机情况下进行数据库备份操作;

  1. 配置归档日志
    打开DM管理工具,在查询窗口执行如下语句:
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST = c:\awork\dmdbms\data\arch, TYPE = local, FILE_SIZE = 1024, SPACE_LIMIT = 10240';
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
  1. 新建作业
    右键点击“代理”,创建代理环境;
    右键点击“作业”“新建作业”,在弹出的页面中输入作业名、作业描述等信息,如下图所示:
    在这里插入图片描述

  2. 设置作业-全量备份
    点击“选择项”“作业步骤”新建,在弹出的页面中输入 步骤名称、步骤类型(备份数据库)、备份路径,备份方式,点击“确定”按钮,如下图所示:
    在这里插入图片描述

  3. 设置调度
    点击“选择项”“作业调度”新建,在弹出的页面中输入 名称、调度类型(反复执行)、发生频率的类型(根据实际需求,可以选择周或天)、每周频率执行一次(设置执行时间01:00:00,时间根据实际情况设置),点击“确定”按钮,如下图所示:
    在这里插入图片描述再次点击“确定”按钮后,自动定时全库备份的作业就设置成功了;

  4. 如何修改作业
    如果需要修改,可以右键点击 代理作业定时全库备份修改,在弹出的页面中修改;

  5. 如何作业查看执行情况
    可以右键点击 代理作业定时全库备份查看作业历史信息,在弹出的页面中查看;

  6. 设置作业-增量备份
    在这里插入图片描述
    DM7定时删除过期备份文件
    前提条件
    修改dm.ini和dmarch.ini,保证能够在联机情况下进行数据库备份操作;
    1、创建函数SF_DEL_DB_BAK_EXPIRED
    打开DM管理工具,在查询窗口执行如下语句:

create or replace function SF_DEL_DB_BAK_EXPIRED(
DBNAME varchar(128), 
BAKDIR varchar(256),
PARALLEL_DIR varchar(256),
EXPIRED_DAY int ) 
return INT as

DECLARE
V_CNT INT;
V_I   INT;
V_PATH VARCHAR(256);
V_TIME INT;
V_FLAG INT;
V_NUM INT;

TYPE T_REC IS 
RECORD (
ID INT,
NAME VARCHAR(128),
TIME VARCHAR(128),
PATH VARCHAR(256));
TYPE T_REC_ARR IS TABLE OF T_REC;

BAK_INFO T_REC_ARR:=T_REC_ARR();  

begin
V_NUM=0;
/*初始化备份链表*/
SF_BAK_LST_INIT();
SF_BAK_LST_SET_N_PATH(1);
SF_BAK_LST_SET_PATH(0, BAKDIR);
SF_BAK_LST_SET_PARALLEL_DIR(PARALLEL_DIR);
SF_BAK_LST_COLLECT(DBNAME, '', 1); 
V_CNT = SF_GET_BAK_LST_NUM(DBNAME);
/*判断某库是否存在备份*/
IF V_CNT > 0 THEN
PRINT V_CNT;
ELSE RETURN -1;
END IF;
/*指向第一个备份*/
SF_BAK_LST_GET_FIRST();
/*指向某一个备份,获取其中某些信息存入数组BAK_INFO*/
FOR V_I IN 1..V_CNT
LOOP
V_PATH=SF_BAK_GET_CUR_PATH();
IF V_PATH IS NOT NULL THEN
    BAK_INFO.EXTEND;
BAK_INFO(V_I).ID    =V_I;
BAK_INFO(V_I).NAME  = SF_BAK_GET_NAME(V_PATH);
BAK_INFO(V_I).TIME  = SF_BAK_GET_TIME(V_PATH);
BAK_INFO(V_I).PATH  = V_PATH; 
END IF;
/*移向下一个备份*/
SF_BAK_LST_GET_NEXT();
END LOOP;
/*用游标隐式打开从ARRAY BAK_INFO取这些值*/
FOR R IN (SELECT * FROM  table(BAK_INFO))
LOOP   
IF DAYS_BETWEEN(CURDATE(),R.TIME) >= EXPIRED_DAY THEN--注意between中参数顺序保证得正数
V_FLAG = SF_DEL_BAK(DBNAME,'',R.NAME,1);
END IF;
 
IF V_FLAG=0 THEN
V_NUM=V_NUM+1;
END IF;   
END LOOP;
/*有一个失败,全部失败*/
IF V_NUM >= 1 THEN
RETURN 0;
ELSE RETURN 1;
END IF;
/*销毁备份链表*/
SF_BAK_LST_DEINIT();
end;

2、新建作业
右键点击“代理”,创建代理环境;
右键点击“作业”“新建作业”,在弹出的页面中输入作业名、作业描述等信息,如下图所示:
在这里插入图片描述
3、设置作业
点击“选择项”“作业步骤”新建,在弹出的页面中输入 步骤名称、步骤类型(SQL脚本)、脚本语句(Call SF_DEL_DB_BAK_EXPIRED(‘DAMENG’,‘c:\awork\dmdbms\data\DAMENG\bak’,’’,15); 'DAMENG’指的是数据库名,'c:\awork\dmdbms\data\DAMENG\bak’代表备份文件路径,15代表删除15天之前的备份文件),点击“确定”按钮,如下图所示:
在这里插入图片描述
4、设置调度
点击“选择项”“作业调度”新建,在弹出的页面中输入 名称、调度类型(反复执行)、发生频率的类型(根据实际需求,可以选择周或天)、每周频率执行一次(设置执行时间01:00:00,时间根据实际情况设置),点击“确定”按钮,如下图所示:
在这里插入图片描述
再次点击“确定”按钮后,自动定时删除过期备份 的作业就设置成功了;

DM7根据备份文件还原数据库
1、还原全库备份文件状态-全库备份文件

c:\Awork\dmdbms\bin>dmrestore ini_path=c:\Awork\dmdbms\data\DAMENG\dm.ini file=c:\Awork\dmdbms\data\DAMENG\bak\DB_DAMENG_FULL_2017_12_01_15_55_06.bak

2、还原增量备份文件-全库备份+增量备份文件

c:\Awork\dmdbms\bin>dmrestore ini_path=c:\Awork\dmdbms\data\DAMENG\dm.ini file=c:\Awork\dmdbms\data\DAMENG\bak\DB_DAMENG_INCREMENT_2017_12_01_16_00_06.bak

3、还原最新状态-全库备份+增量备份+归档日志文件

c:\Awork\dmdbms\bin>dmrestore ini_path=c:\Awork\dmdbms\data\DAMENG\dm.ini file=c:\Awork\dmdbms\data\DAMENG\bak\DB_DAMENG_INCREMENT_2017_12_01_16_00_06.bak ARCHIVE_DIR=c:\Awork\dmdbms\data\arch
### 达梦数据库定时备份配置方法 达梦数据库的定时备份可以通过脚本和操作系统级别的定时任务(如 `crontab`)来实现。以下内容详细描述了如何配置达梦数据库的定时备份。 #### 1. 配置备份脚本 备份脚本通常用于执行具体的备份逻辑,包括全量备份、增量备份以及清理过期备份文件等操作。以下是一个通用的备份脚本示例[^3]: ```bash #!/bin/bash # 定义数据库连接信息 DB_HOST="192.168.1.1" DB_PORT="5236" DB_USER="SYSDBA" DB_PASSWORD="sysdba" DB_NAME="TESTDB" # 数据库 bin 路径 DM_BIN="/home/dmdba/dmdbms/bin" # 保留备份的天数 DAYS_TO_KEEP=7 # 定义备份文件存储路径 BACKUP_DIR="/home/dmbak" BACKUP_FILE="${BACKUP_DIR}/backup_${DB_NAME}_$(date +%Y%m%d%H%M%S).dmp" # 创建备份目录 mkdir -p $BACKUP_DIR # 执行备份命令 echo "开始备份数据库..." cd ${DM_BIN} ./dexp ${DB_USER}/${DB_PASSWORD}@${DB_HOST}:${DB_PORT} directory=${BACKUP_DIR} file=${BACKUP_FILE} SCHEMAS=${DB_NAME} echo "备份完成。" # 删除过期备份 find $BACKUP_DIR -mtime +$DAYS_TO_KEEP -type f -name "*.dmp" -exec rm -f {} \; # 检查备份是否成功 if [ $? -eq 0 ]; then echo "备份完成: $BACKUP_FILE" else echo "备份失败。" fi ``` 此脚本实现了以下功能: - 定义数据库连接信息。 - 指定备份文件存储路径。 - 使用 `dexp` 命令执行全量备份。 - 删除超过指定天数的旧备份文件。 - 检查备份是否成功并输出结果。 #### 2. 设置定时任务 通过 `crontab` 设置定时任务,确保备份脚本在指定时自动运行。以下是具体步骤: - 编辑定时任务:`crontab -e` - 添加定时任务条目:`00 02 * * * /path/to/backup.sh` 表示每天凌晨两点执行备份脚本[^1]。 - 查看已设置的定时任务:`crontab -l` #### 3. 清理过期备份 为避免备份文件占用过多磁盘空间,建议定期清理过期备份。可以使用 `find` 命令结合 `-mtime` 参数删除超过指定天数的文件[^3]。例如: ```bash find /home/dmbak -type f -name "*.dmp" -mtime +7 -exec rm -f {} \; ``` 此命令将删除 `/home/dmbak` 目录下超过 7 天的 `.dmp` 文件。 #### 4. 开启归档模式 为了确保数据库在备份期间的一致性,建议开启归档模式。以下是开启归档模式的具体步骤[^4]: 1. 启动数据库到 `MOUNT` 状态: ```sql alter database mount; ``` 2. 设置归档目录和大小(最大 40G): ```sql alter database add archivelog 'type=local, dest=/data/arch, file_size=256, space_limit=409600'; ``` 3. 开启归档模式: ```sql alter database archivelog; ``` 4. 打开数据库: ```sql alter database open; ``` 5. 切换归档测试: ```sql alter database archivelog current; ``` 6. 检查归档状态: ```sql select name, arch_mode from v$database; ``` #### 5. 注意事项 - **权限问题**:确保备份脚本具有可执行权限,例如 `chmod +x backup.sh`[^3]。 - **网络稳定性**:如果数据库位于远程服务器,请确保网络连接稳定。 - **日志记录**:建议将备份过程中的日志信息保存到文件中,便于后续排查问题。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值