sqlserver日志文件太大解決方法


當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 的庫,簡易一點判斷的話, 一般日志文件的大小超過 數據文件 的一半, 就應該查看為什么會日志過大?

  1.  
    SELECT d.name AS dbName,d.log_reuse_wait_desc
  2.  
    FROM sys.databases AS d WHERE d.name NOT IN ('master','model','msdb','tempdb')

查看了 日志不能復用的原因, 就得采取相關的措施去解決。 當然, 你采取了完整模式, 你就得定期去備份日志, 收縮日志, 這是必備的功底。哪怕沒有任何的異常, 你不這樣處理, 日志一樣會變得非常大。

  1.  
    use [dbName]
  2.  
    declare @bakfile nvarchar(100)--@bakfile備份文件名
  3.  
    set @bakfile='d:\database_bak\log_bak_'+convert(nvarchar(8),getdate(),112)+'.log'
  4.  
    BACKUP LOG [dbName] TO DISK= @bakfile WITH RETAINDAYS= 1,COMPRESSION --dbName為數據庫名
  5.  
     
  6.  
    dbcc shrinkfile(dbName_log, 100) --dbName_log為數據庫文件邏輯名稱,100為希望日志收縮到的MB數

日志不能重用有多種可能, 就不一一展開了, 但你能做好上面的, 一般情況下不必操那么多的心了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM