上海腾科教育达梦数据库培训干货分享WINDOWS上使用BAT定期执行备份操作

在达梦读写分离系统中,当主机压力较大时,我们可以选择备份备机的方式进行全库备份,但是备机无法使用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方便观看

第一次全备无问题

然后修改时间到第二天或者第三天,重启下数据库进行增备

增备也可以正常执行,现在试一下备份删除,我将日期调整到第三个星期六

删除和备份日志为一个月记录一份

猜你喜欢

转载自blog.csdn.net/qq_42726883/article/details/108528580
今日推荐