當前位置:首頁 » 編程語言 » sql2005壓縮日誌

sql2005壓縮日誌

發布時間: 2022-07-08 21:42:49

『壹』 怎樣壓縮資料庫的日誌文件

具體方法有3種。
方法一:
第一步:
backup
log
database_name
with
no_log
或者
backup
log
database_name
with
truncate_only
--
no_log和truncate_only是在這里是同義的,隨便執行哪一句都可以。
第二步:
1.收縮特定資料庫的所有數據和日誌文件,執行:
dbcc
shrinkdatabase
(database_name,[,target_percent])
--
database_name是要收縮的資料庫名稱;target_percent是資料庫收縮後的資料庫文件中所要的剩餘可用空間百分比。
2.收縮一次一個特定資料庫中的數據或日誌文件,執行
dbcc
shrinkfile(file_id,[,target_size])
--
file_id是要收縮的文件的標識
(ID)
號,若要獲得文件
ID,請使用
FILE_ID
函數或在當前資料庫中搜索
sysfiles;target_size是用兆位元組表示的所要的文件大小(用整數表示)。如果沒有指定,dbcc
shrinkfile
將文件大小減少到默認文件大小。兩個dbcc都可以帶上參數notruncate或truncateonly,具體意思查看聯機幫助.
方法二:
第一步:
先備份整個資料庫以備不測

第二步:
備份結束後,在Query
Analyzer中執行如下的語句:
exec
sp_detach_db
yourDBName,true
--卸除這個DB在MSsql中的注冊信息
第三步:
到日誌的物理文件所在的目錄中去刪除該日誌文件或者將該日誌文件移出該目錄
第四步:
在Query
Analyzer中執行如下的語句:
exec
sp_attach_single_file_db
yourDBName,'
d:\mssql\data\yourDBName_data.mdf
'
--以單文件的方式注冊該DB,如果成功則MSSQL將自動為這個DB生成一個500K的日誌文件。
方法三:
1.
進入企業管理器,選中資料庫,比如demo
2.
所有任務->分離資料庫
3.
到資料庫文件的存放目錄,將MuOnline_log.LDF文件刪除,以防萬一,你可以拷出去
4.
企業管理器->附加資料庫,選muonline,這個時候你會看見日誌文件這項是一個叉,不要緊,繼續,此時資料庫就會提示你該資料庫無日誌是否創建一個新的,確定就是了。
5.
記得資料庫重新附加後用戶要重新設置一下。
如果以後,不想要它變大:
SQL2000下使用:
在資料庫上點右鍵->屬性->選項->故障恢復-模型-選擇-簡單模型。
或用SQL語句:
alter
database
資料庫名
set
recovery
simple

『貳』 sql2005資料庫日誌,該怎麼處理

步驟/方法

選中要清除日誌的資料庫,點擊右鍵從彈出菜單中選擇「屬性」命令:

在彈出的對話框中,選擇「選項」,切換到「選項」選項卡:

在「選項」選項中的「故障還原」中,單擊「模型」,從彈出的下拉列表菜單中選擇「簡單」,如上圖;
最後單擊對話框最下邊「確定」按鈕保存設置並退出;
然後再再選中這個資料庫並單擊右鍵,從彈出菜單中選擇「任務」,再選擇「收縮」,再從子菜單中選擇「資料庫」命令,壓縮DB:

6
然後再重新在這個資料庫上右擊並選擇「屬性」,同樣切換到對話框中的「選項」選項卡中,將「模型」改回「大容量日誌記錄的」。同步驟2;
7
清理日誌後其相應的資料庫數據文件會變小,但不會丟失

『叄』 sql2005 日誌文件初始設置太大,如何縮小

下面的代碼,就可以將日誌文件縮小到自己
想要的大小了.把代碼COPY到查詢 分析器里,
然後修改其中的3個參數(資料庫名,日誌文件名,和目標日誌文件的大
小),運行即可
SET NOCOUNT _disibledevent= @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF
呵呵,希望能有幫助,^_^

『肆』 sql server 資料庫怎樣壓縮資料庫日誌文件

具體方法有3種。
方法一:
第一步:
backup log database_name with no_log
或者 backup log database_name with truncate_only
-- no_log和truncate_only是在這里是同義的,隨便執行哪一句都可以。
第二步:
1.收縮特定資料庫的所有數據和日誌文件,執行:
dbcc shrinkdatabase (database_name,[,target_percent])
-- database_name是要收縮的資料庫名稱;target_percent是資料庫收縮後的資料庫文件中所要的剩餘可用空間百分比。
2.收縮一次一個特定資料庫中的數據或日誌文件,執行
dbcc shrinkfile(file_id,[,target_size])
-- file_id是要收縮的文件的標識 (ID) 號,若要獲得文件 ID,請使用 FILE_ID 函數或在當前資料庫中搜索 sysfiles;target_size是用兆位元組表示的所要的文件大小(用整數表示)。如果沒有指定,dbcc shrinkfile 將文件大小減少到默認文件大小。兩個dbcc都可以帶上參數notruncate或truncateonly,具體意思查看聯機幫助.

方法二:
第一步:
先備份整個資料庫以備不測 。
第二步:
備份結束後,在Query Analyzer中執行如下的語句:
exec sp_detach_db yourDBName,true
--卸除這個DB在MSSQL中的注冊信息
第三步:
到日誌的物理文件所在的目錄中去刪除該日誌文件或者將該日誌文件移出該目錄
第四步:
在Query Analyzer中執行如下的語句:
exec sp_attach_single_file_db yourDBName,'
d:\mssql\data\yourDBName_data.mdf '
--以單文件的方式注冊該DB,如果成功則MSSQL將自動為這個DB生成一個500K的日誌文件。

方法三:
1. 進入企業管理器,選中資料庫,比如demo
2. 所有任務->分離資料庫
3. 到資料庫文件的存放目錄,將MuOnline_log.LDF文件刪除,以防萬一,你可以拷出去
4. 企業管理器->附加資料庫,選muonline,這個時候你會看見日誌文件這項是一個叉,不要緊,繼續,此時資料庫就會提示你該資料庫無日誌是否創建一個新的,確定就是了。
5. 記得資料庫重新附加後用戶要重新設置一下。
如果以後,不想要它變大:
SQL2000下使用:
在資料庫上點右鍵->屬性->選項->故障恢復-模型-選擇-簡單模型。
或用SQL語句:
alter database 資料庫名 set recovery simple

『伍』 SQL2005日誌文件 400多G怎麼清理 求解決方法 謝謝急

把日誌文件清理掉咯!會跟你節省一大半的空間
我給你參考幾個方案
1.清空日誌
DUMP TRANSACTION 庫名 WITH NO_LOG

2.截斷事務日誌:
BACKUP LOG 庫名 WITH NO_LOG

3.收縮資料庫文件(如果不壓縮,資料庫的文件不會減小
企業管理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮文件
--選擇日誌文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了
--選擇數據文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數,直接輸入這個數,確定就可以了

也可以用SQL語句來完成
--收縮資料庫
DBCC SHRINKDATABASE(庫名)

--收縮指定數據文件,1是文件號,可以通過這個語句查詢到:select * from sysfiles
DBCC SHRINKFILE(1)

4.為了最大化的縮小日誌文件(如果是sql 7.0,這步只能在查詢分析器中進行)
a.分離資料庫:
企業管理器--伺服器--資料庫--右鍵--分離資料庫

b.在我的電腦中刪除LOG文件

c.附加資料庫:
企業管理器--伺服器--資料庫--右鍵--附加資料庫

此法將生成新的LOG,大小隻有500多K

或用代碼:
下面的示例分離 pubs,然後將 pubs 中的一個文件附加到當前伺服器。

a.分離
EXEC sp_detach_db @dbname = '庫名'

b.刪除日誌文件

c.再附加
EXEC sp_attach_single_file_db @dbname = '庫名',
@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\庫名.mdf'

5.為了以後能自動收縮,做如下設置:
企業管理器--伺服器--右鍵資料庫--屬性--選項--選擇"自動收縮"

--SQL語句設置方式:
EXEC sp_dboption '庫名', 'autoshrink', 'TRUE'

6.如果想以後不讓它日誌增長得太大
企業管理器--伺服器--右鍵資料庫--屬性--事務日誌
--將文件增長限制為xM(x是你允許的最大數據文件大小)

--SQL語句的設置方式:
alter database 庫名 modify file(name=邏輯文件名,maxsize=20)

--清除 SQL Server 錯誤日誌文件 存檔
EXEC sp_cycle_errorlog
sql2005的error一共有6個,從errorlog,errlog.1一直到errorlog.6貌似是7個。。
執行一次EXEC sp_cycle_errorlog就會產生一個新的errorlog,然後把errorlog.6給刪掉。就是先進先出(隊列類似的情況)這樣循環6次就可以把errorlog都刷新一遍。老的那個就被刪掉了。

『陸』 sql server 2005日誌壓縮到多大合適

您好,很高興為您解答。

下面有兩個SQL語句可以達到在SQL Server 2005/2008壓縮指定資料庫文件和日誌的大小的效果:
1、DBCC SHRINKDATABASE (Transact-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 是可選參數。 文件末尾的可用空間不會返回給操作系統,文件的物理大小也不會更改。因此,指定 NOTRUNCATE 時,資料庫看起來未收縮。 NOTRUNCATE 只適用於數據文件。日誌文件不受影響。
TRUNCATEONLY 將文件末尾的所有可用空間釋放給操作系統,但不在文件內部執行任何頁移動。數據文件只收縮到最近分配的區。如果與 TRUNCATEONLY 一起指定,將忽略 target_percent。 TRUNCATEONLY 只適用於數據文件。日誌文件不受影響。
WITH NO_INFOMSGS 取消嚴重級別從 0 到 10 的所有信息性消息。

結果集
列名 說明
DbId 資料庫引擎試圖收縮的文件的資料庫標識號。
FileId 資料庫引擎嘗試收縮的文件的文件標識號。
CurrentSize 文件當前佔用的 8 KB 頁數。
MinimumSize 文件最低可以佔用的 8 KB 頁數。這與文件的最小大小或最初創建時的大小相對應。
UsedPages 文件當前使用的 8 KB 頁數。
EstimatedPages 資料庫引擎估計文件能夠收縮到的 8 KB 頁數。

備注
若要收縮特定資料庫的所有數據和日誌文件,請執行 DBCC SHRINKDATABASE 命令。若要一次收縮一個特定資料庫中的一個數據或日誌文件,請執行 DBCC SHRINKFILE 命令。
若要查看資料庫中當前的可用(未分配)空間量,請運行 sp_spaceused。
可在進程中的任一點停止 DBCC SHRINKDATABASE 操作,任何已完成的工作都將保留。
收縮後的資料庫不能小於資料庫的最小大小。最小大小是在資料庫最初創建時指定的大小,或是使用文件大小更改操作(如 DBCC SHIRNKFILE 或 ALTER DATABASE)顯式設置的最後大小。例如,如果資料庫最初創建時的大小為 10 MB,後來增長到 100 MB,則該資料庫最小隻能收縮到 10 MB,即使已經刪除資料庫的所有數據也是如此。
運行 DBCC SHRINKDATABASE 而不指定 NOTRUNCATE 選項或 TRUNCATEONLY 選項等價於帶 NOTRUNCATE 運行 DBCC SHRINKDATABASE 操作,然後再帶 TRUNCATEONLY 運行 DBCC SHRINKDATABASE 操作。
要收縮的資料庫不必在單用戶模式下;其他的用戶仍可以在資料庫收縮時對其進行工作。這也包括系統資料庫。
不能在備份資料庫時收縮資料庫。反之,也不能在資料庫執行收縮操作時備份資料庫。

DBCC SHRINKDATABASE 的工作原理
DBCC SHRINKDATABASE 以每個文件為單位對數據文件進行收縮。然而,DBCC SHRINKDATABASE 在對日誌文件進行收縮時,它將視為所有的日誌文件都存在於一個連續的日誌池中。文件始終從末尾開始收縮。
假設名為 mydb 的資料庫有一個數據文件和兩個日誌文件。數據文件和日誌文件分別是 10 MB,並且數據文件包含 6 MB 數據。
Microsoft SQL Server 2005 資料庫引擎對每個文件計算一個目標大小。這就是文件將要收縮到的大小。將 target_percent 與 DBCC SHRINKDATABASE 一起指定時,資料庫引擎計算的目標大小是收縮後文件中的 target_percent 可用空間大小。例如,如果在收縮 mydb 時將 target_percent 指定為 25,則資料庫引擎將此文件的目標大小計算為 8 MB(6 MB 數據加上 2 MB 可用空間)。因此,資料庫引擎將任何數據從數據文件的後 2 MB 中移動到數據文件前 8 MB 的可用空間中,然後對該文件進行收縮。
假設 mydb 的數據文件包含 7 MB 的數據。將 target_percent 指定為 30,以允許將此數據文件收縮到可用空間為 30%。但是,將 target_percent 指定為 40 卻不會收縮數據文件,因為資料庫引擎收縮文件的目標大小不能小於數據當前佔用空間大小。您還可以用另一種方法來考慮此問題:所要求的 40% 可用空間加上整個數據文件大小的 70%(10 MB 中的 7 MB),超過了 100%。因為所要求的可用百分比加上數據文件佔用的當前百分比大於 100%(多出 10%),所以任何大於 30 的 target_size 都不會收縮此數據文件。
對於日誌文件,資料庫引擎使用 target_percent 來計算整個日誌的目標大小;因此,target_percent 是收縮操作後日誌中的可用空間大小。之後,整個日誌的目標大小轉換為每個日誌文件的目標大小。
DBCC SHRINKDATABASE 嘗試立即將每個物理日誌文件收縮到其目標大小。如果虛擬日誌中的所有邏輯日誌部分都沒有超出日誌文件的目標大小,則該文件將成功截斷,DBCC SHRINKDATABASE 完成且不顯示任何消息。但是,如果部分邏輯日誌位於超出目標大小的虛擬日誌中,則資料庫引擎將釋放盡可能多的空間,並發出一條信息性消息。該消息說明需要執行哪些操作來將邏輯日誌移出位於文件末尾的虛擬日誌。執行該操作以後,DBCC SHRINKDATABASE 可用於釋放剩餘空間。有關詳細信息,請參閱收縮事務日誌。
因為日誌文件只能收縮到虛擬日誌文件邊界,所以不可能將日誌文件收縮到比虛擬日誌文件更小(即使現在沒有使用該文件)。虛擬日誌文件的大小在創建或擴展這些日誌文件時由資料庫引擎動態選擇。有關虛擬日誌文件的詳細信息,請參閱事務日誌物理體系結構。

許可權
要求具有 sysadmin 固定伺服器角色或 db_owner 固定資料庫角色的成員身份。、

示例
A. 收縮資料庫並指定可用空間的百分比
以下示例將減小 UserDB 用戶資料庫中數據文件和日誌文件的大小,以便在資料庫中留出 10% 的可用空間。
DBCC SHRINKDATABASE (UserDB, 10);
GO

B. 截斷資料庫
以下示例使 AdventureWorks 示例資料庫中的數據文件收縮到最後分配的區。
DBCC SHRINKDATABASE (AdventureWorks, TRUNCATEONLY);

2、DBCC SHRINKFILE (Transact-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
用兆位元組表示的文件大小(用整數表示)。如果未指定,則 DBCC SHRINKFILE 將文件大小減少到默認文件大小。默認大小是創建文件時指定的大小,或者是使用 ALTER DATABASE 所設置的最後大小。
如果指定了 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
將指定文件中的所有數據遷移到同一文件組中的其他文件。由於資料庫引擎不再允許將數據放在空文件內,因此可以使用 ALTER DATABASE 語句來刪除該文件。
NOTRUNCATE
在指定或不指定 target_percent 的情況下,將已分配的頁從數據文件的末尾移動到該文件前面的未分配頁。文件末尾的可用空間不會返回給操作系統,文件的物理大小也不會更改。因此,指定 NOTRUNCATE 時,文件看起來未收縮。
NOTRUNCATE 只適用於數據文件。日誌文件不受影響。
TRUNCATEONLY
將文件末尾的所有可用空間釋放給操作系統,但不在文件內部執行任何頁移動。數據文件只收縮到最後分配的區。
如果隨 TRUNCATEONLY 指定了 target_size,則會忽略該參數。
TRUNCATEONLY 只適用於數據文件。
WITH NO_INFOMSGS
取消顯示所有信息性消息。

結果集
列名 說明
DbId 資料庫引擎試圖收縮的文件的資料庫標識號。
FileId 資料庫引擎試圖收縮的文件的文件標識號。
CurrentSize 文件當前佔用的 8 KB 頁數。
MinimumSize 文件最低可以佔用的 8 KB 頁數。這與文件的最小大小或最初創建時的大小相對應。
UsedPages 文件當前使用的 8 KB 頁數。
EstimatedPages 資料庫引擎估計文件能夠收縮到的 8 KB 頁數。

收縮日誌文件
對於日誌文件,SQL Server 2005 資料庫引擎使用 target_size 來計算整個日誌的目標大小;因此,target_size 是收縮操作後日誌中的可用空間大小。之後,整個日誌的目標大小轉換為每個日誌文件的目標大小。DBCC SHRINKFILE 嘗試立即將每個物理日誌文件收縮到其目標大小。但是,如果部分邏輯日誌位於超出目標大小的虛擬日誌中,則資料庫引擎將釋放盡可能多的空間,並發出一條信息性消息。該消息說明需要執行哪些操作來將邏輯日誌移出位於文件末尾的虛擬日誌。執行這些操作以後,DBCC SHRINKFILE 可用於釋放剩餘空間。

如果文件不收縮
如果收縮操作運行時未出現錯誤,但文件大小看起來沒有發生更改,則請執行下列操作之一以驗證文件是否有足夠的可用空間可供刪除:
運行以下查詢。
SELECT name ,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB
FROM sys.database_files;

許可權
要求具有 sysadmin 固定伺服器角色或 db_owner 固定資料庫角色的成員身份。

示例
A. 將數據文件收縮到指定的目標大小
以下示例將 UserDB 用戶資料庫中名為 DataFile1 的數據文件的大小收縮到 7MB。
USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO

B. 將日誌文件收縮到指定的目標大小
以下示例將 AdventureWorks 資料庫中的日誌文件收縮到 1 MB。若要允許 DBCC SHRINKFILE 命令收縮文件,首先需要通過將資料庫恢復模式設置為 SIMPLE 來截斷該文件。
USE AdventureWorks;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE AdventureWorks
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (AdventureWorks_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE AdventureWorks
SET RECOVERY FULL;
GO

C. 截斷數據文件
以下示例將截斷 AdventureWorks 資料庫中的主數據文件。需要查詢 sys.database_files 目錄視圖以獲得數據文件的 file_id。
USE AdventureWorks;
GO
SELECT file_id, name
FROM sys.database_files;
GO
DBCC SHRINKFILE (1, TRUNCATEONLY);

D. 清空文件
以下示例演示了清空文件以便從資料庫中將其刪除的步驟。針對此示例,首先創建一個數據文件,並假設該文件包含數據。
USE AdventureWorks;
GO
-- Create a data file and assume it contains data.
ALTER DATABASE AdventureWorks
ADD FILE (
NAME = Test1data,
FILENAME = 'C:\t1data.ndf',
SIZE = 5MB
);
GO
-- Empty the data file.
DBCC SHRINKFILE (Test1data, EMPTYFILE);
GO
-- Remove the data file from the database.
ALTER DATABASE AdventureWorks
REMOVE FILE Test1data;
GO

『柒』 SQL資料庫如何壓縮

1、首先從開始菜單著手,打開開始菜單欄,在菜單欄上找到我們已經安裝的SQL server 2008,單擊打開它。

『捌』 SQL2005資料庫日誌文件LOG太大怎麼辦

Sqlserver2005下,日誌文件太大,使其減小的方法。
在打開SQL Server Management Studio並正常聯接SQL伺服器後,運行下面的三行:
( 注意將dbName代換為你的資料庫名。)
backup log dbName with NO_LOG
backup log dbName with TRUNCATE_ONLY
DBCC SHRINKDATABASE(dbName)

注意,在SQL 2008之後的版本以上方法無效,需將資料庫設為簡單模式後再進行收縮。

此外,在SQL Server Management Studio中,以視窗方法操作也可以,操作步驟:
第一步:截斷資料庫日誌,運行代碼:
BACKUP LOG 要收縮的資料庫名 WITH NO_LOG
第二步:收縮資料庫日誌文件:
1. 選擇要收縮的資料庫,點右鍵選擇任務-收縮-文件

2. 在彈出的頁面中,選擇文件類型為日誌

3.點確定。

『玖』 sql2008中如何收縮資料庫日誌文件

解決方法:
方法一
右鍵選擇資料庫-》任務-》收縮-》文件-》文件類型-》日誌-》在釋放未使用的空間前重新組織頁

方法二(不推薦)
1 必須先改成簡單模式
2 然後用
----Logical Files :
--CMS1.5_Data
--CMS1.5_Log
DBCC SHRINKFILE (N'CMS1.5_Log' , 1)
GO

註:Data是數據文件,Log是日誌文件

『拾』 如何壓縮SQL Server 2005指定資料庫文件和日誌的大小

下面有兩個SQL語句可以達到在SQL Server 2005/2008壓縮指定資料庫文件和日誌的大小的效果:
1、DBCC SHRINKDATABASE (Transact-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 是可選參數。 文件末尾的可用空間不會返回給操作系統,文件的物理大小也不會更改。因此,指定 NOTRUNCATE 時,資料庫看起來未收縮。 NOTRUNCATE 只適用於數據文件。日誌文件不受影響。
TRUNCATEONLY 將文件末尾的所有可用空間釋放給操作系統,但不在文件內部執行任何頁移動。數據文件只收縮到最近分配的區。如果與 TRUNCATEONLY 一起指定,將忽略 target_percent。 TRUNCATEONLY 只適用於數據文件。日誌文件不受影響。
WITH NO_INFOMSGS 取消嚴重級別從 0 到 10 的所有信息性消息。

結果集
列名 說明
DbId 資料庫引擎試圖收縮的文件的資料庫標識號。
FileId 資料庫引擎嘗試收縮的文件的文件標識號。
CurrentSize 文件當前佔用的 8 KB 頁數。
MinimumSize 文件最低可以佔用的 8 KB 頁數。這與文件的最小大小或最初創建時的大小相對應。
UsedPages 文件當前使用的 8 KB 頁數。
EstimatedPages 資料庫引擎估計文件能夠收縮到的 8 KB 頁數。

備注
若要收縮特定資料庫的所有數據和日誌文件,請執行 DBCC SHRINKDATABASE 命令。若要一次收縮一個特定資料庫中的一個數據或日誌文件,請執行 DBCC SHRINKFILE 命令。
若要查看資料庫中當前的可用(未分配)空間量,請運行 sp_spaceused。
可在進程中的任一點停止 DBCC SHRINKDATABASE 操作,任何已完成的工作都將保留。
收縮後的資料庫不能小於資料庫的最小大小。最小大小是在資料庫最初創建時指定的大小,或是使用文件大小更改操作(如 DBCC SHIRNKFILE 或 ALTER DATABASE)顯式設置的最後大小。例如,如果資料庫最初創建時的大小為 10 MB,後來增長到 100 MB,則該資料庫最小隻能收縮到 10 MB,即使已經刪除資料庫的所有數據也是如此。
運行 DBCC SHRINKDATABASE 而不指定 NOTRUNCATE 選項或 TRUNCATEONLY 選項等價於帶 NOTRUNCATE 運行 DBCC SHRINKDATABASE 操作,然後再帶 TRUNCATEONLY 運行 DBCC SHRINKDATABASE 操作。
要收縮的資料庫不必在單用戶模式下;其他的用戶仍可以在資料庫收縮時對其進行工作。這也包括系統資料庫。
不能在備份資料庫時收縮資料庫。反之,也不能在資料庫執行收縮操作時備份資料庫。

DBCC SHRINKDATABASE 的工作原理
DBCC SHRINKDATABASE 以每個文件為單位對數據文件進行收縮。然而,DBCC SHRINKDATABASE 在對日誌文件進行收縮時,它將視為所有的日誌文件都存在於一個連續的日誌池中。文件始終從末尾開始收縮。
假設名為 mydb 的資料庫有一個數據文件和兩個日誌文件。數據文件和日誌文件分別是 10 MB,並且數據文件包含 6 MB 數據。
Microsoft SQL Server 2005 資料庫引擎對每個文件計算一個目標大小。這就是文件將要收縮到的大小。將 target_percent 與 DBCC SHRINKDATABASE 一起指定時,資料庫引擎計算的目標大小是收縮後文件中的 target_percent 可用空間大小。例如,如果在收縮 mydb 時將 target_percent 指定為 25,則資料庫引擎將此文件的目標大小計算為 8 MB(6 MB 數據加上 2 MB 可用空間)。因此,資料庫引擎將任何數據從數據文件的後 2 MB 中移動到數據文件前 8 MB 的可用空間中,然後對該文件進行收縮。
假設 mydb 的數據文件包含 7 MB 的數據。將 target_percent 指定為 30,以允許將此數據文件收縮到可用空間為 30%。但是,將 target_percent 指定為 40 卻不會收縮數據文件,因為資料庫引擎收縮文件的目標大小不能小於數據當前佔用空間大小。您還可以用另一種方法來考慮此問題:所要求的 40% 可用空間加上整個數據文件大小的 70%(10 MB 中的 7 MB),超過了 100%。因為所要求的可用百分比加上數據文件佔用的當前百分比大於 100%(多出 10%),所以任何大於 30 的 target_size 都不會收縮此數據文件。
對於日誌文件,資料庫引擎使用 target_percent 來計算整個日誌的目標大小;因此,target_percent 是收縮操作後日誌中的可用空間大小。之後,整個日誌的目標大小轉換為每個日誌文件的目標大小。
DBCC SHRINKDATABASE 嘗試立即將每個物理日誌文件收縮到其目標大小。如果虛擬日誌中的所有邏輯日誌部分都沒有超出日誌文件的目標大小,則該文件將成功截斷,DBCC SHRINKDATABASE 完成且不顯示任何消息。但是,如果部分邏輯日誌位於超出目標大小的虛擬日誌中,則資料庫引擎將釋放盡可能多的空間,並發出一條信息性消息。該消息說明需要執行哪些操作來將邏輯日誌移出位於文件末尾的虛擬日誌。執行該操作以後,DBCC SHRINKDATABASE 可用於釋放剩餘空間。有關詳細信息,請參閱收縮事務日誌。
因為日誌文件只能收縮到虛擬日誌文件邊界,所以不可能將日誌文件收縮到比虛擬日誌文件更小(即使現在沒有使用該文件)。虛擬日誌文件的大小在創建或擴展這些日誌文件時由資料庫引擎動態選擇。有關虛擬日誌文件的詳細信息,請參閱事務日誌物理體系結構。

熱點內容
牛貝微信淘客源碼 發布:2024-04-28 19:09:16 瀏覽:33
傳奇裝備強化腳本 發布:2024-04-28 18:34:29 瀏覽:328
QQ如何撤銷以儲存的密碼 發布:2024-04-28 18:32:13 瀏覽:321
ttsandroid中文 發布:2024-04-28 18:30:38 瀏覽:766
修改密碼後為什麼連接不了 發布:2024-04-28 18:16:48 瀏覽:743
cfm安卓轉蘋果在哪個買 發布:2024-04-28 18:07:15 瀏覽:161
編譯器錯誤都是什麼意思 發布:2024-04-28 17:31:30 瀏覽:74
伺服器不能復制粘貼到本機是怎麼回事 發布:2024-04-28 17:24:50 瀏覽:15
房產中介管理系統源碼 發布:2024-04-28 17:23:53 瀏覽:77
文件傳輸java 發布:2024-04-28 17:19:24 瀏覽:195