請按步驟進行 未進行前面的步驟時 請不要做後面的步驟 以免損壞你的資料庫
一般不建議做第 兩步 第 步不安全 有可能損壞資料庫或丟失數據 第 步如果日誌達到上限 則以後的資料庫處理會失敗 在清理日誌後才能恢復
清空日誌
DUMP TRANSACTION 庫名 WITH NO_LOG
截斷事務日誌
BACKUP LOG 資料庫名 WITH NO_LOG
收縮資料庫文件(如果不壓縮 資料庫的文件不會減小
企業管理器 右鍵你要壓縮的資料庫 所有任務 收縮資料庫 收縮文件
選擇日誌文件 在收縮方式里選擇收縮至XXM 這里會給出一個允許收縮到的最小M數 直接輸入這個數 確定就可以了
選擇數據文件 在收縮方式里選擇收縮至XXM 這里會給出一個允許收縮到的最小M數 直接輸入這個數 確定就可以了
也可以用SQL語句來完成
收縮資料庫
DBCC SHRINKDATABASE(客戶資料)
收縮指定數據文件 是文件號 可以通過這個語句查詢到:
select * from sysfiles
DBCC SHRINKFILE( )
為了最大化的縮小日誌文件(如果是sql 這步只能在查詢分析器中進行)
a 分離資料庫:
企業管理器 伺服器 資料庫 右鍵 分離資料庫
b 在我的電腦中刪除LOG文件
c 附加資料庫:
企業管理器 伺服器 資料庫 右鍵 附加資料庫
此法將生成新的LOG 大小隻有 多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
為了以後能自動收縮 做如下設置
企業管理器 伺服器 右鍵資料庫 屬性 選項 選擇 自動收縮
SQL語句設置方式:
EXEC sp_dboption 資料庫名
autoshrink TRUE
如果想以後不讓它日誌增長得太大
企業管理器 伺服器 右鍵資料庫 屬性 事務日誌
將文件增長限制為xM(x是你允許的最大數據文件大小)
SQL語句的設置方式:
lishixin/Article/program/SQLServer/201311/22266
『貳』 如何壓縮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);
請參考:http://msdn.microsoft.com/zh-cn/vs2008/ms190488(SQL.90).aspx
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
如若滿意,請點擊右側【採納答案】,如若還有問題,請點擊【追問】
希望我的回答對您有所幫助,望採納!
~ O(∩_∩)O~
『叄』 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資料庫日誌文件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中如何收縮資料庫日誌文件
打開企業管理器SQL ServerManagement Studio,先備份資料庫,然後有兩個方法壓縮資料庫日誌文件:
方法一、
選擇資料庫,新建查詢,順序輸入語句並執行
1、ALTER DATABASE database_name SET RECOVERY SIMPLE
DBCC SHRINKDATABASE(database_name, 0)
2、ALTER DATABASE database_name SET RECOVERY FULL
方法二、
1、選擇資料庫
2、右鍵資料庫選屬性=》選項,將恢復模式改為簡單,確定
3、右鍵資料庫選任務=》收縮=》文件,文件類型選日誌,確定
4、回到第2步,恢復模式改為完整
『陸』 SQL SERVER 2000 怎麼壓縮log文件
方法1:
第一步:
backup log DATABASE_NAME with no_log
第二步:
收縮特定資料庫的所有數據和日誌文件,執行 dbcc shrinkdatabase (DATABASE_NAME)
方法2:
另一種方法有一定的風險性,因為SQL SERVER的日誌文件不是即時寫入資料庫主文件的,如處理不當,會造成數據的損失。
1: 刪除LOG
分離資料庫 企業管理器->伺服器->資料庫->右鍵->分離資料庫
2:刪除LOG文件
附加資料庫 企業管理器->伺服器->資料庫->右鍵->附加資料庫
此法會提示"重新創建log"生成新的LOG,大小隻有500多K。
注意:建議使用第一種方法。
如果以後,不想要它變大。
SQL2000下使用:
在資料庫上點右鍵->屬性->選項->故障恢復-模型-選擇-簡單模型。
或用SQL語句:
alter database 資料庫名 set recovery simple
方法3:
如果資料庫使用的是簡單恢復模式,直接執行CHECKPOINT之後,再收縮一次資料庫,則刪除新的 MinLSN 之前的所有日誌記錄。