請按步驟對SQL Server進行操作,如果未進行前面的步驟時,請不要做后面的步驟,以免損壞你的數據庫。
一般不建議做第4,6兩步,第4步不安全,有可能損壞數據庫或丟失數據。第6步如果日志達到上限,則以后的數據庫處理會失敗,在清理日志后才能恢復。
1、清空日志
DUMP TRANSACTION 庫名 WITH NO_LOG
2、截斷事務日志
BACKUP LOG 數據庫名 WITH NO_LOG
3、收縮數據庫文件(如果不壓縮,數據庫的文件不會減小)
企業管理器--右鍵你要壓縮的數據庫--所有任務--收縮數據庫--收縮文件
--選擇日志文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了。
--選擇數據文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了。
也可以用SQL語句來完成:
使用DBCC SHRINKDATABASE 和DBCC SHRINKFILE 命令來壓縮數據庫。其中DBCC SHRINKDATABASE 命令對數據庫進行壓縮,DBCC SHRINKFILE 命令對數據庫中指定的文件進行壓縮。
-- 壓縮數據庫mytest 的未使用空間為數據庫大小的20%。
dbcc shrinkdatabase (mytest, 20)
DBCC SHRINKDATABASE 命令語法如下:
DBCC SHRINKDATABASE (database_name [, target_percent]
[, {NOTRUNCATE | TRUNCATEONLY}] )
各參數說明如下:
target_percent 指定將數據庫壓縮后,未使用的空間占數據庫大小的百分之幾。如果指定的百分比過大,超過了壓縮前未使用空間所占的比例,則數據庫不會被壓縮。並且壓縮后的數據庫不能比數據庫初始設定的容量小。 NOTRUECATE
將數據庫縮減后剩余的空間保留在數據庫,中不返還給操作系統。如果不選擇此選項,則剩余的空間返還給操作系統。
TRUNCATEONLY
將數據庫縮減后剩余的空間返還給操作系統。使用此命令時SQL Server 將文件縮減到最后一個文件分配,區域但不移動任何數據文件。選擇此項后,target_percent 選項就無效了。
--收縮指定數據文件,1是文件號,可以通過這個語句查詢到:
select * from sysfiles DBCC SHRINKFILE(1)
*********壓縮數據庫mydb 中的數據庫文件mydb_data2 的大小到1MB。
use mydb dbcc shrinkfile (mydb_data2, 1)
DBCC SHRINKFILE 命令壓縮當前數據庫中的文件。其語法如下:
DBCC SHRINKFILE ( {file_name | file_id }
{ [, target_size] |
[, {EMPTYFILE | NOTRUNCATE | TRUNCATEONLY}] } )
各參數說明如下:
file_id
指定要壓縮的文件的鑒別號(Identification number, 即ID)。文件的ID 號可以通過 FILE_ID()函數或如本章前面所講述的Sp_helpdb 系統存儲過程來得到。
target_size
指定文件壓縮后的大小。以MB 為單位。如果不指定此選項,SQL Server 就會盡最大可能地縮減文件。 EMPTYFILE
指明此文件不再使用,將移動所有在此文件中的數據到同一文件組中的其它文件中去。執行帶此參數的命令后,此文件就可以用ALTER DATABASE 命令來刪除了。
其余參數NOTRUNCATE 和TRUNCATEONLY 與DBCC SHRINKDATABASE 命令中的含義相同。
4、為了最大化的縮小日志文件(這一步慎做,我做過了的,如果原來的日志分離出來后想繼續與數據庫文件合起來使用的話行不通,我正在想其他辦法看能否解決)
a.分離數據庫:
企業管理器--服務器--數據庫--右鍵--分離數據庫
b.在我的電腦中刪除LOG文件
c.附加數據庫:
企業管理器--服務器--數據庫--右鍵--附加數據庫
此法將生成新的LOG,大小只有500多K
或用代碼:
下面的示例分離 pubs,然后將 pubs 中的一個文件附加到當前服務器。
a.分離
EXEC sp_detach_db @dbname = 'pubs'
b.刪除日志文件
c.再附加:
EXEC sp_attach_single_file_db @dbname = 'pubs', @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf'
5、為了以后能自動收縮,做如下設置:
企業管理器--服務器--右鍵數據庫--屬性--選項--選擇“自動收縮”
--SQL語句設置方式:
EXEC sp_dboption '數據庫名', 'autoshrink', 'TRUE'
6、如果想以后不讓它日志增長得太大。
企業管理器--服務器--右鍵數據庫--屬性--事務日志
--將文件增長限制為xM(x是你允許的最大數據文件大小)
--SQL語句的設置方式:
alter database 數據庫名 modify file(name=邏輯文件名,maxsize=20)
