sqlserver 日誌文件收縮

工作用使用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複製

  
DBCC SHRINKFILE   
(  
    { file_name | file_id }   
    { [ , EMPTYFILE ]   
    | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]  
    }  
)  
[ WITH NO_INFOMSGS ]  

參數

file_name
要收縮的文件的邏輯名稱。

file_id
要收縮的文件的標識 (ID) 號。 若要獲取文件 ID,請使用 FILE_IDEX 系統函數,或查詢當前數據庫中的 sys.database_files 目錄視圖。

target_size
整數,文件的新大小(以 MB 爲單位)。 如果未指定,DBCC SHRINKFILE 縮小到文件創建大小。

 備註

可以使用 DBCC SHRINKFILE target_size 縮小空文件的默認大小。 例如,如果創建一個 5 MB 的文件,然後在文件仍然爲空的時候將文件收縮爲 3 MB,默認文件大小將設置爲 3 MB。 這隻適用於永遠不會包含數據的空文件。

FILESTREAM 文件組容器不支持此選項。
如果 target_size 已指定,DBCC SHRINKFILE 會嘗試將文件收縮到目標大小。 要釋放的文件區域中的已用頁移到文件保留區域中的可用空間。 例如,對於 10MB 數據文件,target_size 爲 8 的 DBCC SHRINKFILE 操作會將文件最後 2MB 中的所有已用頁移到文件前 8MB 中的任何未分配頁區域中。 DBCC SHRINKFILE 不會收縮已超過所需存儲數據大小的文件。 例如,如果使用 10 MB 數據文件中的 7 MB,則帶有 target_size 爲 6 的 DBCC SHRINKFILE 語句只能將該文件收縮到 7 MB,而不能收縮到 6 MB。

EMPTYFILE
將指定文件中的所有數據遷移到同一文件組中的其他文件。 也就是說,EMPTYFILE 將指定文件中的數據遷移到同一文件組中的其他文件。 ENPTYFILE 確保不會將任何新數據添加到文件中(儘管此文件不是隻讀文件)。 可以使用 ALTER DATABASE 語句刪除文件。 如果你使用 ALTER DATABASE 語句更改文件大小,只讀標誌會重置,並能添加數據。

對於 FILESTREAM 文件組容器,無法使用 ALTER DATABASE 刪除文件,除非 FILESTREAM 垃圾回收器已運行,並刪除了 EMPTYFILE 已複製到另一個容器的所有不必要文件組容器文件。 有關詳細信息,請參閱 sp_filestream_force_garbage_collection (Transact-SQL)

 備註

有關刪除 FILESTREAM 容器的信息,請參閱 ALTER DATABASE 文件和文件組選項 (Transact-SQL) 中的相應章節

NOTRUNCATE
無論是否指定 target_percent,將數據文件末尾中的已分配頁移到文件開頭的未分配頁區域中。 操作系統不會回收文件末尾的可用空間,文件的物理大小也不會改變。 因此,如果指定 NOTRUNCATE,文件看起來就像沒有收縮一樣。 NOTRUNCATE 只適用於數據文件。 日誌文件不受影響。 FILESTREAM 文件組容器不支持此選項。

TRUNCATEONLY
將文件末尾的所有可用空間釋放給操作系統,但不在文件內部移動任何頁。 數據文件只收縮到最後分配的區。 如果使用 TRUNCATEONLY 指定,則會忽略 target_size。
TRUNCATEONLY 選項不會移動日誌中的信息,但會刪除日誌文件末尾的失效 VLF。 FILESTREAM 文件組容器不支持此選項。

WITH NO_INFOMSGS
取消顯示所有信息性消息。

示例:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

示例:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章