备份数据库用到的相关代码(在数据库事务中添加)

这个TSQL脚本是用来备份数据库成thotel20110129这样的文件

declare @disk nvarchar(100)
set @disk=N'E:\cshisdatabackup\thotel'+convert(nvarchar(12),getdate(),112)
print @disk
BACKUP DATABASE [Thotel] TO DISK=@disk WITH INIT , NOUNLOAD , NAME = N'Thotel 备份', NOSKIP , STATS =10, DESCRIPTION = N'cshis备份', NOFORMAT

不知道什么原因,直接在事务里添加,执行时总是出现问题,也没法调试,只好把下面的几个命令放在操作系统的“计划任务”中

这个bat命令用来备份数据库文件thotel20110129到thotel20110129.7Z(注释:这里调用的是7za.exe——7zip的单文件命令行版,如果需要支持rar的解压,需要到7zip安装目录提取7z.exe和7z.dll,这样就可以支持多种格式的压缩包解压)

另外,获取当前目录使用cd /d %~dp0命令

rem 对了,发现使用notepad++或者scite编辑bat文件时,产生的文件其中回车键和windows的不兼容,导致bat运行失败,好久才发现,也许有什么地方可以设置吧:scite的配置文件:SciTEGlobal.properties中修改eol.mode=CRLF
rem 前尘光明 20110129  保存文件的格式为:文件名+20110129的形式
rem
这是使用7z,将当天的文件打包成7z(注:在这个软件里,7z格式和zip相比的压缩率更高)
rem -t7z是设置格式为7Z,-m用来设置压缩率,-mx=9表示最大压缩率
rem 需要在bat目录放一个7za.exe文件(7z的命令行版本)
rem %date:~0,4%%date:~5,2%%date:~8,2%,这是截取bat中的日期格式20110129的形式
@echo off

set backpath=E:\cshisdatabackup\
set d=%date:~0,4%%date:~5,2%%date:~8,2%
"%~dp07za.exe" a -t7z -mx=9 %backpath%thotel%d%.7z %backpath%thotel%d%

 用这个vbs来清理多余的备份文件:

'用来删除对应目录下的数据库备份文件(带日期格式的如:thotel20110129)
'
前尘光明 20110129
dim fso,fpath,fp,fils,notremovefiles,fileExArr,fiex
fpath
="E:\主服中软数据备份\"
fileExArr
=Array("thotel") '支持的备份名前缀,如需要多个前缀,这里添加
keepbackDays=9'保存九天

numf
=Array("01","02","03","04","05","06","07","08","09")

Function fNum(num)
If num<10then
fNum
= numf(num-1)
else fNum=CStr(num)
EndIf
End Function

'用来获取时间字符串
Function DateStr(d)
DateStr
=CStr(Year(d))+fNum(Month(d))+fNum(Day(d))
End Function

'用来生成最近的文件名列表
Function FilesList(fileExArray,oneday)
FilesList
="|"
foreach fiex in fileExArray
for i=0to keepbackDays
FilesList
=FilesList+UCase(fiex) +DateStr(oneday-i) +"|"
next
next
End Function

''查看是否含有 备份名前缀,用来避免删除其他文件
Function IfContainsfileEx(fileExArra,filename1)
foreach fiexa in fileExArra
ifInStr(UCase(filename1),UCase(fiexa))>0then'匹配时都使用大写,以免不能识别
IfContainsfileEx=true
else
IfContainsfileEx
=false
endif
Next
End Function

set fso=CreateObject("Scripting.FileSystemObject")
ifnot fso.FolderExists(fpath) then
msgbox fpath
wscript.exit
endif
notremovefiles
=UCase(FilesList(fileExArr,date))
'msgbox notremovefiles
Set fp = fso.GetFolder(fpath)
set fils=fp.Files
foreach f in fils
fname
=fso.GetBaseName(f.Path)
'如果不在保留的清单中,并且文件名含有 备份名前缀的,删除
 ifInStr(notremovefiles,UCase("|"+fname+"|"))=0and IfContainsfileEx(fileExArr,fname) then
'f.Delete true '这个的注释取消后,可以删除文件,小心哦,不会在回收站中出现哦
 msgbox"这个文件会被删除:"+ vbcrlf +f.Name+ vbcrlf + fname,0,"提示"
endif
next
set fso=nothing
set fpath=nothing
set fp=nothing
set fils=nothing
set notremovefiles=nothing
set fileExArr=nothing
set fiex=nothing

注释:中软酒店管理系统的中,菜谱的共享操作非常麻烦,需要一个一个菜的设置,后来好不容易使用sql的事件探查器,结合自己操作特殊的数据,比如查找特定菜名,获取到了那个数据表名和sql语句,写出一个语句:update posmenu  set shr_flg=1  where trn_cd='207' or trn_cd='221' ,瞬间就把所有207(茶房),221(咖啡厅)的所有菜谱共享:

原来想用autoit程序来捕获checked控件是否checked,结果发现使用controlCommand方法居然获取不到checked状态(因为有些菜品已经checked了),只有找数据库的方法了。。。

源代码下载

 

补充说明:如果需要备份的时候带时间,也可以实现,数据库中,有hour minute可以获取到小时和分钟

在批处理中,获取时间的代码如下: for /f "tokens=1,2,3 delims== " %%i in (1.txt) do ( set a=%i-%j-%k)

这样获取到的时间%a%就是这种格式23-25-03.40,如果不需要这么多,那么set a=%i——那么%a%就是23(小时),set a=%i-%j——那么%a%就是23-25(小时-分钟)

vbs部分也需要做一些修改。就不再详细叙述了。

原文地址:https://www.cnblogs.com/weiqi/p/1947600.html