注册 登录
Office中国论坛/Access中国论坛 返回首页

roych的个人空间 http://www.office-cn.net/?179386 [收藏] [复制] [分享] [RSS]

日志

浅谈VBScript下的分卷压缩

热度 1已有 1609 次阅读2015-11-13 10:28 |个人分类:随便说说

        先说说背景吧。
       目前我们公司的数据库是租用了云服务器去,但是基于并发用户数较多,会影响数据库性能的原因,不太允许我们从云端(假定为:Cloud Server)来查询数据。也就是说,我们需要从云端把数据库复制到本地来使用。

       于是,公司设置了定时备份的功能。bak文件当然只是存在Cloud Server的。所以我还需要将bak数据复制到备份服务器(假定为Backup Sever),由于bak是完整备份,往往是19G左右,为此不得不进行压缩处理(压缩后约2.3G左右,压缩率为12%)。压缩为一个2G的文件,在两个服务器之间传输,仍然可能存在通讯中断的问题,所以,使用分卷压缩会好一些。于是问题来了:

       那么什么时候压缩呢?上班时当然不能压缩了,因为一旦压缩,Cloud Sever的CPU会立马飙到95%以上,通常是100%,客户端严重受影响,虽然只有十来分钟。所以只能等到下班了。下班后,大多数人(包括我在内)应该不太喜欢再去捣鼓工作相关的事情。
      所以,写一个脚本,开启任务计划是最佳的选择。于是就有了以下内容:
Dim fso, fl,y,m,d,ymd,ws
Set fso = CreateObject("scripting.filesystemobject")
y=Year(Date())
m=month(date())
d=day(date())
'获取日期格式
ymd= y&"_"&m&"_"&d
'分卷压缩,每卷100M。
on error resume next
Set ws=CreateObject("wscript.shell")
For Each fl In fso.GetFolder("D:\db_backup\").Files
    If instr(1,fl.Name,ymd)>0  Then
ws.run """C:\Program Files (x86)\WinRAR\WinRAR.exe"" a -

v1000000[k] -df""D:\db_backup\" & Left(fl.Name, Len(fl.Name) - 4) & ".rar" 

& """ """ & fl.path & """"
    End If
Next
'退出脚本
Wscript.Quit
       当然,这还没完的。最后的步骤是用LeapFTP将Backup Server的数据的数据Download到本地服务器(Local Sever),然后解压,还原数据库,这才算是完成数据库更新的操作。
       现在再来看看VBA跟VBScript的区别。
  • VBScript可以说是没有变量类型,所以Dim xx As Long之类就会出错,正确的写法是:Dim xx。
  • VBScript没有Format函数,转换类型时除了C开头的那部分【例如CDate、Clng等】,几乎没有别的写法了。所以像上面的本来用Format很容易解决的问题,只能定义三个变量才能把年月日合并在一起。
  • 估计你可能已经留意到了,VBScript没有Like函数。关于通配符怎么办呢?——目前我是用Instr来处理的。当然正则表达式也是可以的,不过如果不熟悉的话,估计调试也要花那么一点点时间。
  • 还记得VBA里的全能打手Shell函数么?似乎只要有那个应用程序,Shell就能激活并使用它。VBScript呢?对不起,不能直接Shell。里面不是有WSHShell吗?是的。你很细心……我开始也是这么以为的,用:WSHShell "应用程序 参数……"来完成操作的。但是,我错了……所以正确的做法是,先创建一个WSHShell,然后再用这个WSHShell去run应用程序。详细请参考上面的代码。

发表评论 评论 (1 个评论)

回复 WFH6898 2015-12-14 15:06
专业

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-8 05:10 , Processed in 0.075716 second(s), 18 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部