先說(shuō)說(shuō)背景吧。
目前我們公司的數(shù)據(jù)庫(kù)是租用了云服務(wù)器去,但是基于并發(fā)用戶數(shù)較多,會(huì)影響數(shù)據(jù)庫(kù)性能的原因,不太允許我們從云端(假定為:Cloud Server)來(lái)查詢數(shù)據(jù)。也就是說(shuō),我們需要從云端把數(shù)據(jù)庫(kù)復(fù)制到本地來(lái)使用。
于是,公司設(shè)置了定時(shí)備份的功能。bak文件當(dāng)然只是存在Cloud Server的。所以我還需要將bak數(shù)據(jù)復(fù)制到備份服務(wù)器(假定為Backup Sever),由于bak是完整備份,往往是19G左右,為此不得不進(jìn)行壓縮處理(壓縮后約2.3G左右,壓縮率為12%)。壓縮為一個(gè)2G的文件,在兩個(gè)服務(wù)器之間傳輸,仍然可能存在通訊中斷的問(wèn)題,所以,使用分卷壓縮會(huì)好一些。于是問(wèn)題來(lái)了:
那么什么時(shí)候壓縮呢?上班時(shí)當(dāng)然不能壓縮了,因?yàn)橐坏〾嚎s,Cloud Sever的CPU會(huì)立馬飆到95%以上,通常是100%,客戶端嚴(yán)重受影響,雖然只有十來(lái)分鐘。所以只能等到下班了。下班后,大多數(shù)人(包括我在內(nèi))應(yīng)該不太喜歡再去搗鼓工作相關(guān)的事情。
所以,寫(xiě)一個(gè)腳本,開(kāi)啟任務(wù)計(jì)劃是最佳的選擇。于是就有了以下內(nèi)容:
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
當(dāng)然,這還沒(méi)完的。最后的步驟是用LeapFTP將Backup Server的數(shù)據(jù)的數(shù)據(jù)Download到本地服務(wù)器(Local Sever),然后解壓,還原數(shù)據(jù)庫(kù),這才算是完成數(shù)據(jù)庫(kù)更新的操作。
現(xiàn)在再來(lái)看看VBA跟VBScript的區(qū)別。
- VBScript可以說(shuō)是沒(méi)有變量類型,所以Dim xx As Long之類就會(huì)出錯(cuò),正確的寫(xiě)法是:Dim xx。
- VBScript沒(méi)有Format函數(shù),轉(zhuǎn)換類型時(shí)除了C開(kāi)頭的那部分【例如CDate、Clng等】,幾乎沒(méi)有別的寫(xiě)法了。所以像上面的本來(lái)用Format很容易解決的問(wèn)題,只能定義三個(gè)變量才能把年月日合并在一起。
- 估計(jì)你可能已經(jīng)留意到了,VBScript沒(méi)有Like函數(shù)。關(guān)于通配符怎么辦呢?——目前我是用Instr來(lái)處理的。當(dāng)然正則表達(dá)式也是可以的,不過(guò)如果不熟悉的話,估計(jì)調(diào)試也要花那么一點(diǎn)點(diǎn)時(shí)間。
- 還記得VBA里的全能打手Shell函數(shù)么?似乎只要有那個(gè)應(yīng)用程序,Shell就能激活并使用它。VBScript呢?對(duì)不起,不能直接Shell。里面不是有WSHShell嗎?是的。你很細(xì)心……我開(kāi)始也是這么以為的,用:WSHShell "應(yīng)用程序 參數(shù)……"來(lái)完成操作的。但是,我錯(cuò)了……所以正確的做法是,先創(chuàng)建一個(gè)WSHShell,然后再用這個(gè)WSHShell去run應(yīng)用程序。詳細(xì)請(qǐng)參考上面的代碼。