注冊(cè) 登錄
Office中國(guó)論壇/Access中國(guó)論壇 返回首頁(yè)

roych的個(gè)人空間 http://ctxi.cn/?179386 [收藏] [復(fù)制] [分享] [RSS]

日志

淺談VBScript下的分卷壓縮

熱度 1已有 1683 次閱讀2015-11-13 10:28 |個(gè)人分類:隨便說(shuō)說(shuō)

        先說(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)參考上面的代碼。

發(fā)表評(píng)論 評(píng)論 (1 個(gè)評(píng)論)

回復(fù) WFH6898 2015-12-14 15:06
專業(yè)

facelist doodle 涂鴉板

您需要登錄后才可以評(píng)論 登錄 | 注冊(cè)

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2024-10-23 08:24 , Processed in 0.094448 second(s), 18 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回頂部