SQL 2000/2005/2008 的收縮日誌方法和清理日誌圖文教程

 

sql 在使用中每次查詢都會生成日誌,可是若是你長久不去清理,可能整個硬都堆滿哦,846.cc筆者就遇到這樣的狀況,直接網站後臺都進不去了。下面咱們一塊兒來學習一下如何清理這個日誌吧。javascript

如今有:sql server 2008 v10官方版sql server 2000我的版SQL Server 2005完整版html

講解一下sql 2005日誌怎麼清理。通常狀況下,SQL數據庫的收縮並不能很大程度上減少數據庫大小,其主要做用是收縮日誌大小,應當按期進行此操做以避免數據庫日誌過大。
一、設置數據庫模式爲簡單模式:打開SQL企業管理器,在控制檯根目錄中依次點開Microsoft SQL Server-->SQL Server組-->雙擊打開你的服務器-->雙擊打開數據庫目錄-->選擇你的數據庫名稱(如論壇數據庫Forum)-->而後點擊右鍵選擇屬性-->選擇選項-->在故障還原的模式中選擇「簡單」,而後按肯定保存
二、在當前數據庫上點右鍵,看全部任務中的收縮數據庫,通常裏面的默認設置不用調整,直接點肯定
三、收縮數據庫完成後,建議將您的數據庫屬性從新設置爲標準模式,操做方法同第一點,由於日誌在一些異常狀況下每每是恢復數據庫的重要依據。
 java

最簡單直接具體以下:web

1、下載:日誌清理收縮工具sql

sql 日誌清理收縮方法講解:數據庫

一、天然是下載日誌清理軟件。服務器

二、在服務器上運行trunc.exe,打開軟件。oracle

這裏用戶名必定是sa 密碼你必須記得sa 的密碼,這個很重要,否則就會查詢不到相應的數據庫了。輸入密碼後就點數據庫。你的服務器數據庫就呈現出來了。ide

你想收縮哪個就選哪個吧。你應該懂了吧!好用簡單方便哦。(以下圖:)函數

2、SQL2008 的收縮日誌 因爲SQL2008對文件和日誌管理進行了優化,因此如下語句在SQL2005中能夠運行但在SQL2008中已經被取消: (SQL2005) Backup Log DNName with no_log go dump transaction DNName with no_log go USE DNName DBCC SHRINKFILE (2)

Go -------------------------------------------------------------- (SQL200: 在SQL2008中清除日誌就必須在簡單模式下進行,等清除動做完畢再調回到徹底模式。 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'DNName_Log' , 11, TRUNCATEONLY) GO USE [master] GO ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY FULL --還原爲徹底模式 GO 優勢:此清除日誌所運行消耗的時間短,90GB的日誌在分鐘左右便可清除完畢,作完以後作個徹底備份在分鐘內便可完成。缺點: 不過此動做最好不要常用,由於它的運行會帶來系統碎片。普通狀態下LOG和DIFF的備份便可截斷日誌。此語句使用的恰當環境:當系統的日誌文件異常增大或者備份LOG時間太長可能影響生產的狀況下使用。

2005方法1: 
第一步: 
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,具體意思看幫助。 

方法2 
(這個方法在sqlserver2000的環境下作通常能成功,在sqlserver7及如下版本就不必定了): 
第一步: 
先備份整個數據庫以備不測 
第二步: 
備份結束後,在Query Analyzer中執行以下的語句: 
exec sp_detach_db yourDBName,true --卸除這個DB在MSSQL中的註冊信息 
第三步: 
到日誌的物理文件所在的目錄中去刪除該日誌文件或者將該日誌文件移出該目錄 
第四步: 
在Query Analyzer中執行以下的語句: 
exec sp_attach_single_file_db yourDBName,'d:\mssql7\data\yourDBName_data.mdf' 
--以單文件的方式註冊該DB,若是成功則MSSQL將自動爲這個DB生成一個500K的日誌文件。 

以上方法在清除log日誌中均有效。 
但,可否讓sql server 不產生log日誌呢?以上方法好像均無效。 
我這兒正好有個case: 
我客戶的sql server天天都會產生4,500M的log日誌,天天都清除一下,很是不便。有沒有辦法實現不產生log日誌呢? 

我分析了一下客戶產生log日誌的緣由,而且作了相應測試。 
客戶是天天將數據庫清空,從總系統中將數據導入到sql server裏。我感決sqlserver在插入時產生log不大,在delete整個庫時產生log極大。 
好比: 
SELECT * into test_2 from b_bgxx 
共45000條記錄,產生十幾M log,若是 
delete from test_2 
產生80多M log ,這明顯存在問題。 

雖然能夠換成: 
truncate table test_2 
但我仍是但願能找到不產生log的方法。就如oracle不產生歸檔同樣。

3、Server 2005 : 清空數據庫日誌 日誌文件滿而形成SQL數據庫沒法寫入文件時,可用兩種方法: 方法一:清空日誌。 1.打開查詢分析器,輸入命令 DUMP TRANSACTION 數據庫名 WITH NO_LOG 2.再打開企業管理器--右鍵你要壓縮的數據庫--全部任務--收縮數據庫--收縮文件--選擇日誌文件--在收縮方式裏選擇收縮至XXM,這裏會給出一個容許收縮到的最小M數,直接輸入這個數,肯定就能夠了。 另外一種方法有必定的風險性,由於SQL SERVER的日誌文件不是即時寫入數據庫主文件的,如處理不當,會形成數據的損失。 方法二: 1: 刪除LOG 分離數據庫 企業管理器->服務器->數據庫->右鍵->分離數據庫 2:刪除LOG文件 附加數據庫 企業管理器->服務器->數據庫->右鍵->附加數據庫 此法生成新的LOG,大小隻有500多K。 注意:建議使用第一種方法。 若是想之後不讓它增加 企業管理器--服務器--右鍵數據庫--屬性--事務日誌--將文件增加限制爲xM(x是你容許的最大數據文件大小) --SQL語句的設置方式: alter database 數據庫名 modify file(name=邏輯文件名,maxsize=20)

相關文章
相關標籤/搜索