2013年1月10日 星期四

[aspx]access 資料庫壓縮

客戶家的資料庫,用得是 access,已經兩年,長得非常大,有 1G 這麼大。實在是會擔心,如果不小心壞了,那可是救都救不回來。還好,備份一個 access 的資料庫非常簡單,就把那個檔案複製一份,就解決了。甚至,還可以寫一個 aspx 網頁,來執行這個動作,讓我在任何地方,只要有網路,就可以用網頁來做備份,就算我用 iPad,iPhone,Android手機都可以。雖然是小題大作,一年不過做個兩、三次的事,但是,若能夠不讓客戶擔心的情況下,做完這些保險的事,也會有讓他們信任的感受。就算不是電腦自動化地來做,至少也是我自動地做,也算是自動化了啊!

但是,只有備份,仍然不夠,備份只解決了失效復原的第一步。接下來面臨的是舊資料越來越多,如果不刪除,檔案越來越大,查詢的時間越來越長,真的是無謂的浪費時間。所以,接下來完成了刪除舊資料的功能。但是,這又產生一個不滿足。雖然,資料刪了,查詢速度又回復以往的快速,但是,資料檔的大小,仍然維持一樣。著實想想真是不開心。

使用 office access,可以把 mdb 打開,然後在「主功能(左上的視窗)」->「管理」->「壓縮及修復資料庫」這個功能,把資料庫壓縮。

image

這麼做,就需要人工來做。並且要準備一台裝有 MS access 的電腦才行。

當然這工作,用指令也行,但還是要在裝有 MS access 的電腦執行指令,然後用工作排程器執行(參考)。

C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.EXE c:\Northwind.mdb /compact

這種若要想用網頁執行,則會因為某種限制而無法執行。猜測主要是因為 MSACCESS.exe 是桌面程式。執行後就卡住,沒有把工作做完。這應該只是設定的問題,因為在開發環境是可以正常使用。但是在 IIS 的環境,就是卡住。有人提醒 service 程式也許不能與桌面互動而導致問題(參考)。我試過這方法也是失敗。
我們以前嘗試過,如果是 console 程式,是可以的執行成功的。

為了堅持要用網頁執行,尋找許久,在微軟的開發環境裡,都會安裝一個 dao。它只是一個 dll。只要把 dao.dll 複製一份在 bin 裡面,然後引用它。只要用兩行就搞定了。



dao.DBEngine dbe = new DBEngine();
dbe.CompactDatabase(target_uncompact, target_compact, null, null, null);


如果,老闆問,為什麼兩行程式要寫快兩個星期,那……,要請曹操的好朋友來回答了。


註:網路上也有用 Jet 引擎來處理的,我累了,所以有空的人可以試試。參考

沒有留言:

張貼留言