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

这个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 < 10 then
fNum
= numf(num - 1 )
else fNum = CStr (num)
End If
End Function

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

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

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

set fso = CreateObject ( " Scripting.FileSystemObject " )
if not fso.FolderExists(fpath) then
msgbox fpath
wscript.exit
end if
notremovefiles
= UCase (FilesList(fileExArr, date ))
' msgbox notremovefiles
Set fp = fso.GetFolder(fpath)
set fils = fp.Files
for each f in fils
fname
= fso.GetBaseName(f.Path)
' 如果不在保留的清单中,并且文件名含有 备份名前缀的,删除
  if InStr (notremovefiles, UCase ("|"+fname+"|")) = 0 and IfContainsfileEx(fileExArr, fname) then
' f.Delete true '这个的注释取消后,可以删除文件,小心哦,不会在回收站中出现哦
  msgbox " 这个文件会被删除: " + vbcrlf + f.Name + vbcrlf + fname, 0 , " 提示 "
end if
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部分也需要做一些修改。就不再详细叙述了。

你可能感兴趣的:(数据库)