Pages

2012年2月28日 星期二

【CMD】批次檔檢查檔案大小

最近因為程式關係,需要檢查下傳檔案大小使否與伺服器上檔案一致,
所以需要找批次檢查檔案,因此找到一個簡易的範例。


@echo off
setlocal
set file="test.cmd"
set maxbytesize=1000

FOR /F "usebackq" %%A IN ('%file%') DO set size=%%~zA

if %size% LSS %maxbytesize% (
    echo.File is ^< %maxbytesize% bytes
) ELSE (
    echo.File is ^>= %maxbytesize% bytes
)

2012年2月7日 星期二

sql2000如何完美壓縮.mdf文件


核心提示:大家都用過企業管理器中的--“收縮資料庫,裏面的功能的確可以收縮資料庫的日誌檔(.ldf)和資料檔案(.mdf),但都會發現同樣的問題,在收縮資料檔案”(.mdf)時根本收縮不了多少。最多截段自動增長部份的,沒有根本釋放在日常操作中刪除資料庫的沉冗空間。


大家都用過企業管理器中的--“收縮資料庫,裏面的功能的確可以收縮資料庫的日誌檔(.ldf)和資料檔案(.mdf),但都會發現同樣的問題,在收縮資料檔案”(.mdf)時根本收縮不了多少。最多截段自動增長部份的,沒有根本釋放在日常操作中刪除資料庫的沉冗空間。
上述應該是很多人遇到過的,筆者也千試萬試試出來的方法,為了確定您的資料庫安全,在執行下例的操作前,請先備份你的資料庫。

1.首先你要找到你的資料庫最大的表,一般是數目最大的表,如果不清楚,請在查詢分析器查詢:
DBCC SHOWCONTIG
接著用 sp_spaceused  來查詢reserved 的值和 data 的值 的差異可看來此表比較沉冗。

2.複製你的轉移舊表的資料到新表;
SELECT * INTO 新表 FROM 舊表
(如果你資料比較多,可能你會看到待壓縮的資料庫對應的mdfldf檔大小在猛增,沒事在複製錶)
 :此命令不能把資料庫結結構完全複製,需要您重新把舊表與新表對應的主鍵,自動增長值,索引,預設值等修改。

3.更新一下;
DBCC UPDATEUSAGE (0)
4.把舊表刪除,然後把新表的名字改成舊表的名字,這些可以到企業管理器裏操作(注意重命名名時的提示);
5.收縮mdf檔,也是最想要實現的一步;
DBCC SHRINKDATABASE('庫名')
DBCC shrinkfile(2,0) 
DBCC UPDATEUSAGE (0) 
/* 
2   ->   要收縮的檔的fileid,對應sysfiles中的fileid 
0   ->   收縮到初始大小
*/
(:紅字是收縮你的資料庫mdf,時間可能有點長;藍字是收縮ldf文件;紫字是更新一下,非重要)
完工,這時候你應該可以看到資料庫的mdf檔大小變化差異,不說幾十M,筆者的資料庫就從6G收縮到1G左右,再次執行查詢一些資料,明顯快多了。