當SQL數據庫日志文件已滿,或者日志很大,怎么辦
當SQL數據庫日志文件已滿,或者日志很大,就需要壓縮日志及數據庫文件:
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.分離
E X E C sp_detach_db @dbname = "pubs"
b.刪除日志文件
c.再附加
E X E C sp_attach_single_file_db @dbname = "pubs",
@physname = "c:Program FilesMicrosoft SQL ServerMSSQLDatapubs.mdf"
5.為了以后能自動收縮,做如下設置:
企業管理器--服務器--右鍵數據庫--屬性--選項--選擇"自動收縮"
--SQL語句設置方式:
E X E C sp_dboption "數據庫名", "autoshrink", "TRUE"
6.如果想以后不讓它日志增長得太大
企業管理器--服務器--右鍵數據庫--屬性--事務日志
--將文件增長限制為xM(x是你允許的最大數據文件大小)
--SQL語句的設置方式:
alter database 數據庫名 modify file(name=邏輯文件名,maxsize=20)
特別注意:
請按步驟進行,未進行前面的步驟,請不要做后面的步驟
否則可能損壞你的數據庫.
一般不建議做第4,6兩步
第4步不安全,有可能損壞數據庫或丟失數據
第6步如果日志達到上限,則以后的數據庫處理會失敗,在清理日志后才能恢復.
SQL Server 如何設置數據庫的默認初始大小和自動增長大小
sqlserver2008日志已滿解決方法,SQL Server 如何設置數據庫的默認初始大小和自動增長大小
1、數據庫右鍵屬性-選項-恢復模式-下拉選擇簡單-最后點擊確定
2、右鍵數據庫-任務-收縮-文件類型-下拉選擇日志-收縮操作-在釋放未使用…(默認收縮到1MB)-最后點擊確定
3、最后別忘了回到第一步驟把恢復模式改為完整!
我們在SQL Server中新建數據庫的時候,可以選擇數據庫文件及日志文件的初始大小、自動增長大小和最大大小,如下圖所示:
可以通過設置更改數據庫初始大小、自動增長大小和最大大小:
但是其實在SQL Server中新建數據庫時,數據庫的初始大小、自動增長大小和最大大小的默認值,是可以在model這個系統數據庫上預設的。
比如現在我們將model系統數據庫的初始大小設置為50MB,數據庫文件增量設置為90MB,數據庫文件最大大小設置為1024MB,如下圖所示:
然后現在我們再在SQL Server中新建一個數據庫:
然后我們可以看到新建數據庫的初始大小默認為50MB,數據庫文件增量默認為90MB,數據庫文件最大大小默認為1024MB,和系統數據庫model的文件設置完全相同。
所以這就是model這個系統數據庫的作用,它實際上是SQL Server中新建數據庫的一個模板,SQL Server中新建的數據庫會套用model這個系統數據庫上的設置作為默認值。所以我們可以在model系統數據庫上設置文件初始大小、文件增量和文件最大大小,從而作為新建數據庫的預設默認值。
是否使用恢復模式設置為“完整”還是“簡單”
1. 如果不是特別重要的庫(關系到錢), 一般不推薦恢復模式設置為“完整”,而如果你設置恢復模式為“簡單”,基本不會發生日志過大 2. 如果你設置為了完整模式,整個數據庫的大小超過 1GB 的庫,簡易一點判斷的話, 一般日志文件的大小超過 數據文件 的一半, 就應該查看為什么會日志過大?
-
SELECT d.name AS dbName,d.log_reuse_wait_desc
-
FROM sys.databases AS d WHERE d.name NOT IN ('master','model','msdb','tempdb')
查看了 日志不能復用的原因, 就得采取相關的措施去解決。 當然, 你采取了完整模式, 你就得定期去備份日志, 收縮日志, 這是必備的功底。哪怕沒有任何的異常, 你不這樣處理, 日志一樣會變得非常大。
-
use [dbName]
-
declare @bakfile nvarchar(100)--@bakfile備份文件名
-
set @bakfile='d:\database_bak\log_bak_'+convert(nvarchar(8),getdate(),112)+'.log'
-
BACKUP LOG [dbName] TO DISK= @bakfile WITH RETAINDAYS= 1,COMPRESSION --dbName為數據庫名
-
-
dbcc shrinkfile(dbName_log, 100) --dbName_log為數據庫文件邏輯名稱,100為希望日志收縮到的MB數
日志不能重用有多種可能, 就不一一展開了, 但你能做好上面的, 一般情況下不必操那么多的心了。