工作用使用sqlserver數據庫常遇到數據庫和日誌wenj文件過大,簡單記錄下手動收縮文件大小:
執行代碼:
use [master] go --alter database dw set recovery simple with no_wait --go alter database dw set recovery simple --簡單模式 go use dw --當前數據庫日記的邏輯名列表 select name,* from sys.database_files -- where type=1 代表是日記文件 go --把DW_log日記文件收縮到5M dbcc ShrinkFile(DW_log,5) --減小 DW 用戶數據庫中數據文件和日誌文件的大小,以便在數據庫中留出 10% 的可用空間。 dbcc SHRINKDATABASE(DW,10) go use [master] --go --alter database dw set recovery full with no_wait --go --alter database dw set recovery full --還原爲完全模式 GO |
SHRINKDATABASE 參數解析
語法
SQL複製
DBCC SHRINKDATABASE
( database_name | database_id | 0
[ , target_percent ]
[ , { NOTRUNCATE | TRUNCATEONLY } ]
)
[ WITH NO_INFOMSGS ]
參數
database_name | database_id | 0
要收縮的數據庫名稱或 ID。 0 指定使用當前數據庫。
target_percent
數據庫收縮後的數據庫文件中所需的剩餘可用空間百分比。
NOTRUNCATE
將分配的頁面從文件的末尾移動到文件前面的未分配頁面。 此操作會壓縮文件中的數據。 target_percent 是可選的。 Azure SQL 數據倉庫不支持此選項。
文件末尾的可用空間不會返回給操作系統,並且文件的物理大小也不會更改。 因此,指定 NOTRUNCATE 時,數據庫似乎不會收縮。
NOTRUNCATE 只適用於數據文件。 NONTRUNCATE 不會影響日誌文件。
TRUNCATEONLY
將文件末尾的所有可用空間釋放給操作系統。 不移動文件內的任何頁面。 數據文件僅收縮到最後指定的盤區。 如果使用 TRUNCATEONLY 指定,則會忽略 target_percent。 Azure SQL 數據倉庫不支持此選項。
TRUNCATEONLY 將影響日誌文件。 若要僅截斷數據文件,請使用 DBCC SHRINKFILE。
WITH NO_INFOMSGS
取消嚴重級別從 0 到 10 的所有信息性消息。
示例:
SHRINKFILE 參數解析:
語法SQL複製
參數file_name file_id target_size 備註 可以使用 DBCC SHRINKFILE target_size 縮小空文件的默認大小。 例如,如果創建一個 5 MB 的文件,然後在文件仍然爲空的時候將文件收縮爲 3 MB,默認文件大小將設置爲 3 MB。 這隻適用於永遠不會包含數據的空文件。 FILESTREAM 文件組容器不支持此選項。 EMPTYFILE 對於 FILESTREAM 文件組容器,無法使用 ALTER DATABASE 刪除文件,除非 FILESTREAM 垃圾回收器已運行,並刪除了 EMPTYFILE 已複製到另一個容器的所有不必要文件組容器文件。 有關詳細信息,請參閱 sp_filestream_force_garbage_collection (Transact-SQL) 備註 有關刪除 FILESTREAM 容器的信息,請參閱 ALTER DATABASE 文件和文件組選項 (Transact-SQL) 中的相應章節 NOTRUNCATE TRUNCATEONLY WITH NO_INFOMSGS |
示例:
示例: