資源描述:
《解析sqlserver事務(wù)日志壓縮與刪除的方法》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、解析SQLServer事務(wù)日志壓縮與刪除的方法???做項目的時候拿到一個只有280M的數(shù)據(jù)庫備份,可是在SQLServer2000下恢復(fù)的時候等了半天才都沒有恢復(fù)完畢,感覺很不可思議,于是懷疑有什么貓膩。到了數(shù)據(jù)文件的目錄下一看,果不其然竟然聲稱了一個接近10G的數(shù)據(jù)庫日志文件!以前從來沒有做過那么多數(shù)據(jù)的數(shù)據(jù)庫,而且更沒有做過有3年數(shù)據(jù)庫日志記錄的數(shù)據(jù)庫。???這對于硬盤空間不是很充裕的我來說已經(jīng)超過了能夠忍受的極限,而且另一個80M的數(shù)據(jù)庫回復(fù)之后生成的日志文件更是夸張的達到了5G+!這是不能忍受的,也是不能被原諒的。???剛開始的時候不太懂,直接把數(shù)據(jù)庫日志刪除了,發(fā)現(xiàn)這樣數(shù)據(jù)
2、庫就不能用了,于是百度了一下,發(fā)現(xiàn)網(wǎng)上很多提到了日志的壓縮和刪除技術(shù),正是我想要掌握的內(nèi)容。仔細整理了一下,大致有這么幾種方法解決。------------------------方法一:?這是對數(shù)據(jù)庫和日志進行收縮,比較麻煩,也不是我想要的。第一步:?backup?log?database_name?with?no_log或者?backup?log?database_name?with?truncate_onlyno_log和truncate_only是在這里是同義的,隨便執(zhí)行哪一句都可以。?第二步:?1.收縮特定數(shù)據(jù)庫的所有數(shù)據(jù)和日志文件,執(zhí)行:?dbcc?shrinkdatab
3、ase?(database_name,[,target_percent])?database_name是要收縮的數(shù)據(jù)庫名稱;target_percent是數(shù)據(jù)庫收縮后的數(shù)據(jù)庫文件中所要的剩余可用空間百分比。2.收縮一次一個特定數(shù)據(jù)庫中的數(shù)據(jù)或日志文件,執(zhí)行dbcc?shrinkfile(file_id,[,target_size])file_id是要收縮的文件的標識?(ID)?號,若要獲得文件?ID,請使用?FILE_ID?函數(shù)或在當前數(shù)據(jù)庫中搜索?sysfiles;target_size是用兆字節(jié)表示的所要的文件大?。ㄓ谜麛?shù)表示)。如果沒有指定,dbcc?shrinkfile?將文
4、件大小減少到默認文件大小。兩個dbcc都可以帶上參數(shù)notruncate或truncateonly,具體意思查看聯(lián)機幫助.?-----------------------------------方法二:?這個正是我想要的,刪除原來的日志文件。但是在操作的時候總是提示我數(shù)據(jù)庫正在使用當中,如果我停掉數(shù)據(jù)庫管理器有進不去企業(yè)管理器找到要收縮的數(shù)據(jù)庫,沒辦法只好放棄,改試第三種。第一步:?先備份整個數(shù)據(jù)庫以備不測?。?第二步:?備份結(jié)束后,在Query?Analyzer中執(zhí)行如下的語句:?exec?sp_detach_db?yourDBName,true卸除這個DB在MSSQL中的注冊信息
5、?第三步:?到日志的物理文件所在的目錄中去刪除該日志文件或者將該日志文件移出該目錄第四步:?在Query?Analyzer中執(zhí)行如下的語句:exec?sp_attach_single_file_db?yourDBName,'d:mssqldatayourDBName_data.mdf?'以單文件的方式注冊該DB,如果成功則MSSQL將自動為這個DB生成一個500K的日志文件。?---------------------------------------方法三:?完美解決!1.?進入企業(yè)管理器,選中數(shù)據(jù)庫,比如demo?2.?所有任務(wù)->分離數(shù)據(jù)庫?3.?到數(shù)據(jù)庫文件的存放目錄
6、,將demo_log.LDF文件刪除,以防萬一,你可以拷出去,或者是給它改名4.?企業(yè)管理器->附加數(shù)據(jù)庫,選demo,這個時候你會看見日志文件這項是一個叉,不要緊,繼續(xù),此時數(shù)據(jù)庫就會提示你該數(shù)據(jù)庫無日志是否創(chuàng)建一個新的,確定就是了。?5.?記得數(shù)據(jù)庫重新附加后用戶要重新設(shè)置一下。?如果以后,不想要它變大:?SQL2000下使用:?在數(shù)據(jù)庫上點右鍵->屬性->選項->故障恢復(fù)-模型-選擇-簡單模型。?或用SQL語句:?alter?database?數(shù)據(jù)庫名?set?recovery?simple----------------------------------------???第
7、三種辦法完美解決了我的問題,真是令人愉快的一天??!而且安裝好了數(shù)據(jù)庫之后很順利的能夠?qū)椖窟M行部署了,希望接下來一切順利。