您好,
您可以針對個別的資料庫檔案做壓縮.
節錄自線上說明,請參考:
壓縮資料庫
Microsoft® SQL Server™ 2000
可允許資料庫中的每個檔案被縮小或移除未使用的分頁。資料與交易紀錄檔都可以被縮小。資料庫檔案可以群組或個別的手動縮小,可以設定成每一指定時間間隔自動縮小。此一活動會發生在背景處,而不會影響資料庫中的任何使用者活動。
若您使用 ALTER DATABASE AUTO_SHRINK 選項 (或 sp_dboption 系統預存程序)
將資料庫設成自動縮小,縮小將會在資料庫有許多可用空間時才發生。但只能儘可能移除多餘的可用空間,並無法設定要移除的可用空間百分比,。若要設定移除的可用空間數量,例如要移除資料庫中目前可用空間的百分之五十,請使用 SQL Server Enterprise Manager 中的 [屬性] 對話方塊來縮小資料庫。
您不能將整個資料庫縮小到小於其建立時空間的大小。因此,如果一個資料庫建立時為 10 MB 而展開到 100 MB,則該資料庫最多
(假設該資料庫中的所有資料已經刪除) 可以縮小到 10 MB。.
但是,藉由使用 DBCC SHRINKFILE
敘述,您可以將個別的資料庫檔案縮小為小於它們初始建立時的大小。您必須個別縮小每個檔案,而不能企圖縮小整個資料庫。
交易紀錄檔有其可以被縮小的固定範圍,虛擬記錄檔的大小會決定可以縮小的大小。因此,記錄檔絕不會被壓縮到小於虛擬記錄檔的大小。此外,壓縮記錄檔時是以虛擬記錄檔的大小逐次遞增。例如,一個
1 十億位元組 (GB) 的交易紀錄檔可能由五個 200 MB
的虛擬記錄檔所組成。縮小交易紀錄檔將刪除未使用的虛擬記錄檔,但至少保留一個虛擬記錄檔。因此由於範例中的每個虛擬記錄檔為 200
MB,該交易紀錄檔最小只能縮小到 200 MB,且僅能以 200 MB
的遞增值縮小。若要允許交易紀錄檔縮小,請建立較小的交易紀錄檔而允許其自動擴展,而不要建立大的交易紀錄檔。
在 SQL Server 2000 中,DBCC SHRINKDATABASE 或 DBCC SHRINKFILE
作業會嘗試立即將交易記錄檔壓縮成要求的大小
(受制於進位):您應該在壓縮記錄檔之前,先截斷檔案,以減少邏輯記錄的大小,並標記為不包含邏輯記錄檔任何部分的非現用虛擬記錄檔。如需詳細資訊,請參閱壓縮交易記錄檔。
附註 您不能在資料庫或交易記錄檔正進行備份時,縮小資料庫或交易記錄檔。相對的,資料庫或交易記錄檔進行縮小的過程中,不可能建立該資料庫或交易記錄檔的備份。
一、使用Enterprise Manager壓縮資料庫及資料庫檔案
1.展開伺服器群組,然後展開伺服器。
2.展開 [資料庫],以滑鼠右鍵按一下要壓縮的資料庫,指向 [所有工作],然後按一下 [壓縮資料庫]。
3.若要指定資料庫壓縮程度,請選取下列選項:
在 [壓縮後檔案的最大可用空間] 輸入壓縮後您要在資料庫保留的空間。使用 [資料庫大小] 及 [可用空間] 值做為指引。
選取 [壓縮前先將頁面移到檔案的起始處] 使釋放的檔案空間保留在資料庫檔案,並將包含資料的頁面移動到資料庫檔案的起始處。
4.按一下 [排程] 來建立或變更資料庫自動壓縮的頻率或時間。
5.如果您想壓縮個別的資料庫檔案,請按一下 [壓縮檔案]。
附註 您無法將資料庫壓縮得比 model 資料庫還小。
二、使用T-SQL壓縮資料庫
語法
DBCC SHRINKDATABASE
( database_name [ , target_percent ]
[ , { NOTRUNCATE | TRUNCATEONLY } ]
)
引數
database_name
是要壓縮的資料庫名稱。資料庫名稱必須與識別項的規則(Rule)一致。若需相關資訊,請參閱使用識別項。
target_percent
是資料庫壓縮後,資料庫檔案中希望得到的剩餘空間百分比。
NOTRUNCATE
讓已釋放的檔案空間保留在資料庫檔案內。若未指定,會釋放檔案空間給作業系統。
TRUNCATEONLY
讓資料檔中任何未使用的空間釋放給作業系統,並將檔案縮到上一次配置的範圍,在未移動任何資料的情形下壓縮檔案的大小。它不會試圖將資料列重新配置到未配置的分頁上。若使用 TRUNCATEONLY,則 target_percent 會被忽略。
備註
Microsoft® SQL Server™ 能夠壓縮:
特定資料庫的所有資料檔與記錄檔。請執行 DBCC SHRINKDATABASE。
為特定資料庫一次壓縮一個資料檔或記錄檔。請執行 DBCC SHRINKFILE。
三、使用T-SQL縮小資料庫檔案
語法
DBCC SHRINKFILE
( { file_name | file_id }
{ [ , target_size ]
| [ , { EMPTYFILE | NOTRUNCATE | TRUNCATEONLY } ]
}
)
引數
file_name
是被壓縮的檔案之邏輯名稱。檔案名稱必須符合識別項的規則 (Rule)。若需相關資訊,請參閱使用識別項。
file_id
是要壓縮檔案的識別 (ID) 碼。若要獲得檔案 ID,請使用 FILE_ID 函數,或在目前資料庫中搜尋 sysfiles。
target_size
是以 MB 為單位的需要大小,以整數表示。若未指定,DBCC SHRINKFILE 會將大小壓縮為預設的檔案大小。
若指定了 target_size,DBCC SHRINKFILE
會將檔案壓縮為指定大小。釋放的檔案部份已使用分頁會被重新配置到保留檔案部分的可用空間。例如,當資料檔大小為 10 MB,target_size 設定為 8
的 DBCC SHRINKFILE 會讓位於檔案最後 2 MB 的所有已使用分頁被重新配置到前面 8 MB 的可用插槽中。DBCC SHRINKFILE
不會壓縮超出檔案中儲存資料所需的大小。例如,如果一個 10 MB 資料檔中有 7 MB 已使用,target_size 設為 6 的 DBCC
SHRINKFILE 陳述式只會將檔案壓縮為 7 MB,而非 6 MB。
EMPTYFILE
將所有資料從指定的檔案移轉到同一個檔案群組的其它檔案內。Microsoft® SQL Server™ 不再允許資料被置於使用 EMPTYFILE
選項的檔案中。這個選項允許檔案使用 ALTER DATABASE 陳述式卸除。
NOTRUNCATE
讓已釋放的檔案空間保留在檔案中。
若 NOTRUNCATE 指定時加上 target_size,可用的空間便不會釋放給作業系統。DBCC SHRINKFILE
唯一的效果,是將已使用的分頁依照上述的 target_size 重新配置到檔案前端。若未指定 NOTRUNCATE,所有可用檔案空間均會還回作業系統。
TRUNCATEONLY
讓檔案中任何未使用的空間釋放到作業系統,並將檔案壓縮至最後一個配置的範圍,在不移動任何資料的情形下縮減檔案大小。它不會嘗試將資料列重新配置到未配置的分頁上。若使用 TRUNCATEONLY,則 target_size 會被忽略。
備註
DBCC SHRINKFILE 會套用到目前資料庫的檔案上。請將範圍切換到資料庫,以發出參考位於該特定資料庫中某個檔案的 DBCC SHRINKFILE
陳述式。如需有關變更目前資料庫的詳細資訊,請參閱 USE。
資料庫無法縮到小於 model 資料庫的大小。
使用 DBCC SHRINKFILE 可將檔案壓縮成小於原始建立時的大小。然後檔案最小大小便會被重設為新指定的大小。
若想移除可能位於某個檔案的任何資料,請在執行 ALTER DATABASE之前,先執行 DBCC SHRINKFILE('file_name',
EMPTYFILE)。
被壓縮的資料庫不需要處於單一使用者模式;當壓縮檔案時,其它使用者還是可以在資料庫中工作。在壓縮系統資料庫時,您不需要以單一使用者模式執行 SQL
Server。
對於記錄檔來說,SQL Server 會使用 target_size 計算整個記錄檔的目標大小,因此 target_size
即為壓縮作業完成之後,記錄檔中可用空間的數量。所以整個記錄檔的目標大小會被視為每個記錄檔的目標大小。 DBCC SHRINKDATABASE
立即嘗試將實體記錄檔案縮減為目標大小。 如果位於虛擬記錄中的邏輯記錄每一個部份都沒有超過記錄檔案的目標大小,則可以成功地截斷檔案,並且完成 DBCC
SHRINKDATABASE 而不會顯示任何訊息。若部分的邏輯記錄檔位於超過 target_size 標記的虛擬記錄檔中,SQL Server 2000
將儘可能釋出最多的空間,並顯示資訊性的訊息。此訊息將告訴您需要執行什麼動作,才能從檔案結尾的虛擬記錄檔取得邏輯記錄檔。當您執行此動作之後,可重新提出
DBCC 陳述式來釋出剩餘的空間。如需壓縮記錄檔的詳細資訊,請參閱〈壓縮交易記錄檔〉。
由於記錄檔只能壓縮至某一虛擬記錄檔界限,因此不可能將記錄檔壓縮至比虛擬記錄檔還小,即使它未被使用。例如,具有 1 GB 記錄檔的資料庫只能將記錄檔壓縮成
128 MB。如需有關截斷的詳細資訊,請參閱截斷交易記錄檔。如需有關決定虛擬記錄檔大小的詳細資訊,請參閱虛擬記錄檔。
"SAKURA" 來函:
Post by SAKURA各位大師好~~
小女子有個小疑問,就是我的資料庫AA復原模型為"簡易"模式,昨晚清除完資料表的資料後,今晨有作過資料庫完整備份,今早有做一次最佳化的"從資料庫檔案移除未使用空間"的動作了,壓縮後保持可用空間量10%而已,但我去看實際的資料檔(AA_DATA.MDF)資料大小一樣沒變為"20253312KB",但我備份後的BAK檔由未刪除資料前的18.5G變為現在的12.5G左右,請問為什麼會這樣呢?
另外,我有從ENTERPRISE
MANNAGER看AA資料庫的屬性,大小為19779.88MB,可用空間為7769.17MB,請問我有做最佳化的壓縮動作了,怎麼可用空間還那麼多呢?
麻煩各位大師不吝解答小女子的疑問,感激不盡,謝謝~