在达梦读写分离系统中,当主机压力较大时,我们可以选择备份备机的方式进行全库备份,但是备机无法使用DM7自带的代理作业进行备份。只能使用ETL或脚本的方式进行数据库备份。这种情况下,我们可以使用BAT脚本进行定期完全备份,增量备份数据库以及删除不用的备份集。
首先在数据库中创建备份用的存储过程PRO_BackupDatabase
create or replace PROCEDURE PRO_BackupDatabase
as
declare
bakname VARCHAR2(300);
BAKSTR VARCHAR2(300);
V_DATE VARCHAR2(50);
begin
select to_char(sysdate,'day') day into V_DATE;
IF V_DATE = '星期六' THEN
set bakname='DB_DAMENG_FULL_'||TO_CHAR(SYSDATE,'YYYY_MM_DD_HH24_MI_SS');
set BAKSTR= 'backup database full to '||' " '||bakname||' " '||' backupset ' 'D:\data\bak\' ||bakname|| ''' task thread 4 parallel 4;';
PRINT BAKSTR;
EXECUTE IMMEDIATE BAKSTR;
ELSE
set bakname='DB_DAMENG_INCRE_' || TO_CHAR(SYSDATE,'YYYY_MM_DD_HH24_MI_SS');
set BAKSTR = 'backup database increment with backupdir ''D:\data\bak'' to '||'"'||bakname||'"'||' backupset ''D:\data\bak\'||bakname||''' task thread 4 parallel 4;';
PRINT BAKSTR;
EXECUTE IMMEDIATE BAKSTR;
END IF;
end;
这里设置的是周六完全备份,其他时间增量备份。备份目录为D:\data\bak
然后开始编写BAT脚本
显示备份脚本和对应的调用SQL
add_bak内容:
@echo off
Set User=SYSDBA
Set Pass=SYSDBA
Set IP=LOCALHOST
Set SysDate=%date:~0,4%-%date:~5,2%-%date:~8,2%
@echo 时间=%SysDate%
@echo 用户名=%User%
@echo 密码=%Pass%
@echo IP地址=%IP%
@echo*****数据库备份******
cd E:\工作\dmdbms\dm7_setup_win64_ent_release_20180504\source\bin
E:
disql.exe %User%/%Pass%@%IP% `D:\data\bak_job\bak.sql
@echo 结束
可以手动修改USER、PASS、IP还有对应的执行SQL脚本,我的bak.sql放在D:\data\bak_job下。
bak.sql内容:
CALL PRO_BackupDatabase();
EXIT;
然后是备份删除的BAT脚本
del_bak内容:
@echo off
set SrcDir=D:\data\bak
@echo 删除日期%date%
@echo 删除7天前过期备份文件和空目录
REM 指定天数
set DaysAgo=7
powershell -c "Get-ChildItem -Path '%SrcDir%' -Recurse -ErrorAction:SilentlyContinue | Where-Object -FilterScript {(((get-date) -($_.CreationTime)).days -gt %DaysAgo% -and $_.PsISContainer -ne $True)} |Remove-Item -Force"
for /f "delims=" %%a in ('dir /ad /b /s D:\data\bak\^|sort /r') do (
rd "%%a">nul 2>nul&&echo 空目录"%%a"成功删除!)
@echo 删除结束
然后是记录日志和调用用的BAT文件
start_bak.bat内容:
@echo off
Set SysDate=%date:~0,4%-%date:~5,2%
cd D:\data\bak_job
D:
@echo 删除备份
call del_bak.bat>>Delete_%SysDate%_log.txt
@echo 开始备份
call add_bak.bat>>Bakup_%SysDate%_log.txt
@echo 结束
Pause
现在让我们做个全备和增备,还有数据删除来试一下
先设置时间到周六
然后执行start_bak.bat 这里我在脚本里加了pause方便观看
第一次全备无问题
然后修改时间到第二天或者第三天,重启下数据库进行增备
增备也可以正常执行,现在试一下备份删除,我将日期调整到第三个星期六
删除和备份日志为一个月记录一份
上海腾科教育科技有限公司聚焦ICT人才培养和教育服务、培养数字化时代的新型ICT人才、促进良性的ICT人才生态发展,提供面授教育、在线教育、IT人才培养与就业、高校专业共建与实验室建设、企业人才定制培养,以及教育科技领域内的技术开发、咨询、服务以及解决方案,专注高校ICT课程课件研发、基于华为公有云的云实验实训平台建设,致力于ICT技术在高等院校的引进、开发和推广,是一家全国性的专业ICT行业技术认证服务公司。
腾科教育是华为授权的培训合作伙伴,专业提供华为ICT技术架构认证、平台与服务认证、行业服务认证等华为职业认证服务,连续多年荣获华为年度最佳合作伙伴贡献奖、华为优秀战略合作伙伴、上海HCIE精英俱乐部伙伴,连续多年举办腾科技术嘉年华华为专场,并协办华为ICT大赛、华为生态伙伴精英赛伙伴赛分赛场、华为人才双选会上海场等活动和赛事,提供面向华为生态合作伙伴和ICT学员的人才供需双选平台及ICT学员就业通道,培养ICT行业所需创新型、融合型人才。