zoukankan      html  css  js  c++  java
  • 备份数据库用到的相关代码(在数据库事务中添加)

    这个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部分也需要做一些修改。就不再详细叙述了。

  • 相关阅读:
    valgrind 内存调试工具
    centos7 firewall 相关
    linux timer operate
    string int 相互转换
    shared_ptr(作为局部变量返回)
    计算机网络--02物理层
    计算机网络学习笔记--01概述
    java基础---字符串string
    java基础--static关键字的使用
    java基础---java语言概述
  • 原文地址:https://www.cnblogs.com/weiqi/p/1947600.html
Copyright © 2011-2022 走看看