當前位置:首頁 » 編程語言 » sql2008收縮日誌

sql2008收縮日誌

發布時間: 2023-09-09 10:47:49

資料庫日誌文件過大如何收縮

網頁鏈接我是用這個方法收縮的,可以將日誌收縮到1MB

守得雲開見月明,花了一個上午結合前輩的博客,終於弄好了sqlserver2008的資料庫日誌收縮到1MB,分享給大家

# 方法步驟

1、執行SQL語句改成「簡單模式」

2、收縮資料庫

3、執行SQL語句改回「完全模式」

## 第一步:執行SQL語句改成「簡單模式」


USE [master]
GO
ALTER DATABASE SlowXWebDB (改成你需要進行收縮的資料庫名) SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE SlowXWebDB (改成你需要進行收縮的資料庫名) SET RECOVERY SIMPLE --改成簡單模式
GO

## 第二步:進行資料庫操作
相關界面截圖和操作
假定:
資料庫名:SlowXWebDB
日誌文件名:SlowXWebDB_Log

## 第三步:執行SQL語句改成「完全模式」

USE [master]
GO
ALTER DATABASE SlowXWebDB (改成你需要進行收縮的資料庫名)SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE datebaseName(改成你需要進行收縮的資料庫名)SET RECOVERY FULL --還原為完全模式
GO
==最後不要忘記實測下資料庫是否能夠正常使用==

網頁鏈接

⑵ sqlserver2008和sqlserver2012日誌文件過大,有什麼方法清理嗎

清理sql server 2008日誌步驟如下:
1.將資料庫設置成 簡單 模式

選擇要收縮的資料庫,點右鍵 屬性->選項,選擇 簡單模式
2.選擇任務->收縮->文件
3.選擇日誌
或者用如下語句
代碼
USE [master]
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY SIMPLE
GO
USE DNName
GO
DBCC SHRINKFILE (N'LogFileName' , 0,TRUNCATEONLY)
GO
USE [master]
GO
ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE DNName SET RECOVERY FULL
GO
SQL Server 2000要清理日誌使用的是mp語句,但是在SQL Server2008里,這個語句不管用了,如果日誌文件很大,比如超過1G,就需要截斷一下日誌文件以加快sqlserver的運行速度,在SQL Server2008里,方法改為:
有資料庫 xxdb 在 SQL Server 2008 下,日誌文件已經超過1G。
以往使用BACKUP語句-BACKUP LOG xxdb WITH NO_LOG 已經失效,在查閱 MSDN 之後發現 MS 提供的標准截斷日誌語句已經變為了 「BACKUP LOG 語句不指定 WITH COPY_ONLY」
使用語句 BACKUP LOG xxdb to disk='x:\work\1.bak' 成功將日誌文件備份,並截斷日誌文件。這里x:代表你想要備份文件的盤符。
然後使用 DBCC SHRINKFILE (xxdb_log,10) 收縮日誌文件到 10M
總結:
完整的收縮日誌文件的 T-SQL 語句:
BACKUP LOG xxdb to disk='x:\work\1.bak'
DBCC SHRINKFILE (xxdb_log,10)
GO
--
BACKUP LOG <db_name> to disk=<'backupfilename'>
DBCC SHRINKFILE (<log_filename>,10)
GO
裡面的x:\work是隨意設置的。當然也可以收縮到比如5M或1M。
在用的:
USE[master]
GO
_WAIT
GO
--簡單模式
GO
USEYHDB
GO
DBCCSHRINKFILE(N'YHDB_log', 11,TRUNCATEONLY)
GO
USE[master]
GO
_WAIT
GO
--還原為完全模式
GO

⑶ sql server 2008 r2如何收縮資料庫和文件

1、右擊資料庫選擇,打開Files窗口

2、Files窗口,File type 選擇 Log,單擊OK完成日誌收縮。

按以上方法操作沒有效果,原因是資料庫的恢復模式不是簡單模式,只需要將恢復模式改為簡單模式即可用以上操作來收縮日誌,方便又好用。

將資料庫恢復模式改為簡單模式方法:
1、右擊資料庫選擇屬性,彈出窗口如下圖,選擇Options選項,將 Recovery Model 改為 Simple 即可。

按如下方法操作也可收縮日誌:

1、當資料庫恢復模式為簡單時。使用dbcc shrinkfile (logfile_name,target_size)命令來完成。如

use mydb
dbcc shrinkfile (mydb_log,10) --將mydb_log收縮至10m

2、當資料庫恢復模式為完全時。可以先將資料庫模式改為簡單模式,再使用上述方法來進行。

use master
alter database mydb set recovery simple
dbcc shrinkfile (mydb_log,10) --將mydb_log收縮至10m

也可以直接備份事務日誌文件後再收縮:

use master
backup log mydb to disk='d:/dd.bak'
use mydb
dbcc shrinkfile (mydb_log,10) --將mydb_log收縮至10m;

3、通過分離資料庫,然後再刪除事務日誌文件,再附加mdf數據文件,也可以達到某種意義上的事務日誌收縮。

以下是有關日誌文摘

對於每一個資料庫來講,都需要至少一個事務日誌文件。事務日誌文件是整個資料庫的血液,如果沒有事務日誌的話,那麼將無法進行任何操作。
事務日誌有什麼東西?
事務日誌記錄著在相關資料庫上的操作,同時還存儲資料庫恢復(recovery)的相關信息。

事務日誌與資料庫恢復(recovery)是密切相關的,其實資料庫在啟動時,便會進行相關的恢復(recovery)操作,如下所示。當然,在資料庫還原時,也可以指定手工恢復(recovery).任何在資料庫上的改變,如果在事務日誌內被標記為已提交,並用一個LSN(LOG SEQUENCE NUMBER)來標識,同時相關改變就會體現在數據文件上,而被標記為未提交的改變將不會體現在數據文件上。

2010-01-12 18:31:48.72 spid7s Recovery is complete. This is an informationa message only. No user action is required.

事務日誌文件還存儲著資料庫需要回滾的相關信息。在SQL Server資料庫上,默認是隱式提交的,也就是說在查詢分析器裡面進行的每一個操作,在操作完成後,都是默認已經commit,但如果通過指定begin tran 和rollback tran的命令來標識事務時,rollback tran就需要使用事務日誌內的相關信息才可以回滾。當然,如果SQL Server遇到相關錯誤時,如死鎖,那麼也會產生一個內部回滾,這些都需要用到事務日誌文件。
為什麼要收縮事務日誌?

收縮日誌的原因有很多種,有些則是考慮空間不足,有些則是應用程序限制導致的,一般情況下,是不建議對事務日誌進行其他改變的,如需要控制事務日誌的大小,則可以通過安排事務日誌備份來解決。如果確定事務日誌包含將不再使用的未使用空間,則可以通過減少事務日誌的大小,以便回收過多空間。但這種情況對於一個DBA來講,應該要盡量避免。

僅當資料庫處於聯機狀態,而且至少一個虛擬日誌文件可用時,收縮才會發生。在某些情況下,直到下一個日誌截斷後,才能收縮日誌。

事務日誌收縮的原理:
每個事務日誌由多個虛擬日誌文件組成(virtual log file).虛擬日誌文件沒有固定的大小,也沒有固定的個數。在創建事務日誌文件或者擴展事務日誌文件時,SQL SERVER便會自動創建合適大小的虛擬日誌文件,DBA無法控制虛擬日誌文件的大小和個數。在擴展日誌文件後,虛擬文件的大小是現有日誌大小和新文件增量大小之和。因此,如果在創建資料庫時,對資料庫指定了比較小的初始大小,又指定了比較小的日誌增長量,隨著事務日誌的自動擴展,虛擬日誌文件個數會越來越多,從而影響了資料庫性能。因此,在創建資料庫時,盡量指定比較合適的初始事務日誌大小,同時指定合理的事務日誌增長量,這點可以參考數據文件的標准。如果大於10G或者更大的話,則指定固定的增長量,如果比較小,則指定按百分比的增長量來進行。

詳情參考
http://hi..com/lxiangshanyu/item/7057ce04081efae9fe240d64

⑷ 如何查看sql2008資料庫的事務日誌文件

在SQL Server 7.0和SQL Server2000中,可以用下面的命令查看: DBCC log ( {dbiddbname}, [, type={01234}] ) 參數: Dbid or dbname - 任一資料庫的ID或名字 type - 輸出結果的類型: 0 - 最少信息(operation, context, transaction id) 1 - 更多信息(plus flags, tags, row length) 2 - 非常詳細的信息(plus object name, index name,page id, slot id) 3 - 每種操作的全部信息 4 - 每種操作的全部信息加上該事務的16進制信息 默認 type = 0 要查看MSATER資料庫的事務日誌可以用以下命令: DBCC log (master) 釋放日誌空間 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 Files\Microsoft SQL Server\MSSQL\Data\pubs.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步如果日誌達到上限,則以後的資料庫處理會失敗,在清理日誌後才能恢復. 另外提供一種更簡單的方法,建議大家使用。 更簡單的方法: 1。右建資料庫屬性窗口--故障還原模型--設為簡單 2。右建資料庫所有任務--收縮資料庫 3。右建資料庫屬性窗口--故障還原模型--設為大容量日誌記錄

⑸ sql收縮資料庫日誌的幾種辦法

在SQL Server 2000/2005中可以快速壓縮日誌log文件,通過SQL,

方法一:

--BigData為資料庫名
DUMPTRANSACTIONBigDataWITHNO_LOG
BACKUPLOGBigDataWITHNO_LOG
DBCCSHRINKDATABASE(BigData)

執行以上語句可以快速壓縮日誌文件到1M。

但是以上語句中前兩行在SQL Server 2008下無法執行 ,

第一行提示「Incorrect syntax near the keyword 'TRANSACTION'.」

第二行提示「One or more of the options (no_log) are not supported for this statement. Review the documentation for supported options. 」

第三行可以執行。但日誌log文件沒有任何變化。

原來SQL Server 2008已經不再支持DUMPTRANSACTION和BACKUP LOG WITH NO_LOG,

sql Server 2005說明中明確:包含 DUMP 語句是為了向後兼容。而 後續版本的 Microsoft SQL Server 將刪除該功能。請避免在新的開發工作中使用該功能,並著手修改當前還在使用該功能的應用程序。 使用 BACKUP。

SQL Server 2008說明:BACKUP LOG WITH NO_LOG 和 WITH TRUNCATE_ONLY 選項已廢止。使用完整恢復模式或大容量日誌恢復模式時,如果必須刪除資料庫中的日誌備份鏈,請切換至簡單恢復模式。有關詳細信息,請參閱有關從完整恢復模式或大容量日誌恢復模式切換的注意事項。

方法二:

useDB_NAME
sp_dboptionDB_NAME,"trunc.logonchkpt.",true
checkpoint
sp_dboptionDB_NAME,"autoshrink",true

方法三:(請提前備份文件!!)

  1. Detach資料庫。

  2. 刪除log文件。

  3. 附加資料庫,選移除log文件,此時SQL Server 會自動重新建立一個512K 的Log 文件。

方法四:

USEBigData;
GO
BACKUPLOGDATABASENAMETODISK='d: est.bak'
--.
DBCCSHRINKFILE(Bigdata_Log,1);
GO

⑹ 如何清空sql資料庫的日誌文件

SQLSERVER的資料庫日誌佔用很大的空間,下面提供三種方法用於清除無用的資料庫日誌文件x0dx0a方法一: x0dx0a1、打開查詢分析器,輸入命令 x0dx0aBACKUP LOG database_name WITH NO_LOG x0dx0a2、再打開企業管理器--右鍵要壓縮的資料庫--所有任務--收縮資料庫--收縮文件--選擇日誌文件--在收縮方式里選擇收縮至xxm,這里會給出一個允許收縮到的最小m數,直接輸入這個數,確定就可以了。 x0dx0ax0dx0a方法二: x0dx0a設置檢查點,自動截斷日誌 x0dx0ax0dx0a一般情況下,SQL資料庫的收縮並不能很大程度上減小資料庫大小,其主要作用是收縮日誌大小,應當定期進行此操作以免資料庫日誌過大 x0dx0a1、設置資料庫模式為簡單模式:打開SQL企業管理器,在控制台根目錄中依次點開Microsoft SQL Server-->SQL Server組-->雙擊打開你的伺服器-->雙擊打開資料庫目錄-->選擇你的資料庫名稱(如用戶資料庫cwbase1)-->然後點擊右鍵選擇屬性-->選擇選項-->在故障還原的模式中選擇「簡單」,然後按確定保存 x0dx0a2、在當前資料庫上點右鍵,看所有任務中的收縮資料庫,一般裡面的默認設置不用調整,直接點確定 x0dx0a3、收縮資料庫完成後,建議將您的資料庫屬性重新設置為標准模式,操作方法同第一點,因為日誌在一些異常情況下往往是恢復資料庫的重要依據 x0dx0ax0dx0a方法三:通過SQL收縮日誌 x0dx0ax0dx0a把代碼復制到查詢分析器里,然後修改其中的3個參數(資料庫名,日誌文件名,和目標日誌文件的大小),運行即可 x0dx0ax0dx0aSET NOCOUNT ON x0dx0aDECLARE @LogicalFileName sysname, x0dx0a@MaxMinutes INT, x0dx0a@NewSize INT x0dx0ax0dx0aUSE tablename -- 要操作的資料庫名 x0dx0aSELECT @LogicalFileName = 'tablename_log', -- 日誌文件名 x0dx0a@MaxMinutes = 10, -- Limit on time allowed to wrap log. x0dx0a@NewSize = 1 -- 你想設定的日誌文件的大小(M) x0dx0ax0dx0a-- Setup / initialize x0dx0aDECLARE @OriginalSize int x0dx0aSELECT @OriginalSize = size x0dx0aFROM sysfiles x0dx0aWHERE name = @LogicalFileName x0dx0aSELECT 'Original Size of ' + db_name() + ' LOG is ' + x0dx0aCONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + x0dx0aCONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB' x0dx0aFROM sysfiles x0dx0aWHERE name = @LogicalFileName x0dx0aCREATE TABLE DummyTrans x0dx0a(DummyColumn char (8000) not null) x0dx0ax0dx0aDECLARE @Counter INT, x0dx0a@StartTime DATETIME, x0dx0a@TruncLog VARCHAR(255) x0dx0aSELECT @StartTime = GETDATE(), x0dx0a@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY' x0dx0ax0dx0aDBCC SHRINKFILE (@LogicalFileName, @NewSize) x0dx0aEXEC (@TruncLog) x0dx0a-- Wrap the log if necessary. x0dx0aWHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired x0dx0aAND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) x0dx0aAND (@OriginalSize * 8 /1024) > @NewSize x0dx0aBEGIN -- Outer loop. x0dx0aSELECT @Counter = 0 x0dx0aWHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000)) x0dx0aBEGIN -- update x0dx0aINSERT DummyTrans VALUES ('Fill Log') x0dx0aDELETE DummyTrans x0dx0aSELECT @Counter = @Counter + 1 x0dx0aEND x0dx0aEXEC (@TruncLog) x0dx0aEND x0dx0aSELECT 'Final Size of ' + db_name() + ' LOG is ' + x0dx0aCONVERT(VARCHAR(30),size) + ' 8K pages or ' + x0dx0aCONVERT(VARCHAR(30),(size*8/1024)) + 'MB' x0dx0aFROM sysfiles x0dx0aWHERE name = @LogicalFileName x0dx0aDROP TABLE DummyTrans x0dx0aSET NOCOUNT OFF x0dx0ax0dx0a方法四:刪除日誌文件。 x0dx0ax0dx0a此方法有一定的風險性,因為sql server的日誌文件不是即時寫入資料庫主文件的,如處理不當,會造成數據的損失。1、操作前請斷開所有資料庫連接。 x0dx0a2、分離資料庫 x0dx0a分離資料庫:企業管理器->伺服器->資料庫->cwbase1->右鍵->分離資料庫 x0dx0a分離後,cwbase1資料庫被刪除,但保留了數據文件和日誌文件 x0dx0a3、刪除log物理文件 x0dx0a刪除LOG物理文件,然後附加資料庫: 企業管理器->伺服器->資料庫->右鍵->附加資料庫 x0dx0a此法生成新的log,大小隻有500多k。 x0dx0ax0dx0a注意:建議使用第一種方法。操作前請確保所有操作員都已經推出系統,斷開資料庫的連接。 x0dx0ax0dx0a以上操作前,請務必做好數據備份!x0dx0ax0dx0a1.sql server 2005 清除日誌語句 x0dx0ax0dx0amp transaction 資料庫名稱 with no_log x0dx0abackup log 資料庫名稱 with no_log x0dx0adbcc shrinkdatabase(資料庫名稱)

⑺ sql2008下的鏡像資料庫怎樣做日誌收縮

這個問題我前幾天正好碰上,所以,相關的關鍵點告訴你

**********特別提示:《在操作之前請備份》************:
1、SQL SERVER 2008 的日誌會越來越大,如果是用於生產的,可能會大到可怕,反正我的資料庫,前幾天一看,不到1個月就十多個G的日誌文件。
2、要收縮、清除其實很簡單,關鍵點就一個:先把資料庫的恢復模式從默認的「完整」改為「簡單」。具體做法:對資料庫點 右鍵 -》屬性-》左邊 選擇頁 中 點 「選項」-》找到 「恢復模式」,改成「簡單」。
3、然後對資料庫點 右鍵 -》任務-》收縮 -》文件 -》出來的界面中,文件類型 選 「日誌」,點「確定」鈕-》OK了。
4、再次提示,在操作之前請備份,雖然我在操作中沒有碰上任務問題,但不保證你不出問題。
5、至於日誌文件縮完了,你是否要把它改回「完整」模式,你自個看著辦,我是讓它一直簡單,因為,以我的技術,要真的資料庫崩潰了,有日誌問題也是「然並卵」,反正我是一天自動兩次異盤備份,加每二小時增量備份,最後再加雙機熱備(用軟體實現的,那個軟體據說要賣幾萬一套,具體叫什麼就不說了,省得別人說我打廣告,呵呵)。
6、看了一下微軟的資料庫鏡像實現方案相關的東西,感覺太難了,不靠譜,有興趣你可以去試試。
7、最後,順便說,資料庫的恢復模式的選擇,對當前資料庫的運行應該是沒有什麼影響的,也許對於會用日誌文件進行數據查看和調整的人有用。

⑻ SQL SERVER2008 R2 求教,故障日誌不斷增大,撐爆

一、簡單回答:

1、改你的SQL SERVER2008 R2中的工作資料庫的模式為簡單。(打開SQL的管理器,對相關資料庫點右鍵,點 屬性 -》選項-》「恢復模式」右邊的下拉,改為「簡單」)。

2、對相關資料庫點右鍵,點「任務」-》「收縮」-》「文件」-》文件類型 那兒 改 日誌,然後點「確定」。

3、如果需要每天讓SQL SERVER2008 R2自個清理,請編寫SQL的定時任務SQL Server代理 里的(作業)。關鍵語句:

DBCCSHRINKFILE(N'你的資料庫的Log文件的名稱',宏禪0,TRUNCATEONLY)

---------------------------------------------------------

4、特別提示,如果你的資料庫需要高級別的安全,那就不要隨意改動蔽頌塵「恢復模式」,或在收縮清理完日誌後改回「恢復模式」為「完全」。在「完全」模式下,SQL SERVER2008 R2的日誌文件無法被清理收縮。日誌文件一但收縮,以前的日誌記錄就不在了,超級高手也無法對資料庫中數據近期的改動進行分析。

二、相關知識:

1、SQL SERVER2008 R2沒有故障日誌,它有的只是日誌,默認情況下,SQL SERVER2008 R2會記錄資料庫的所有變化到日誌中。所以,請不說它是故障日誌。

2、對於絕大多普通級別的數人來說,這個日誌基本上沒什麼用。僅少數超級高手在特定情況下可以用這些日誌還原早先的數據。比如資料庫某個表被人惡意改動了,要找回到沒有改動前的狀態。特別說明,這櫻緩只是理論上說可行,實際上,要視具體情況,因為不是你問的話題在這里就不進一步討論。

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:432
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:743
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:146
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:235
java駝峰 發布:2025-02-02 09:13:26 瀏覽:651
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:538
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726