MSSQL2000(2005)數(shù)據(jù)庫日志清理方式(命令)

[重要通告]如您遇疑難雜癥,本站支持知識付費業(yè)務,掃右邊二維碼加博主微信,可節(jié)省您寶貴時間哦!

MSSQL數(shù)據(jù)庫日志清理
日志文件滿而造成SQL數(shù)據(jù)庫無法寫入文件時,可用兩種方法:
一種方法:清空日志。
1.打開查詢分析器,輸入命令
DUMP TRANSACTION 數(shù)據(jù)庫名 WITH NO_LOG
2.再打開企業(yè)管理器--右鍵你要壓縮的數(shù)據(jù)庫--所有任務--收縮數(shù)據(jù)庫--收縮文件--選擇日志文件--在收縮方式里選擇收縮至XXM,這里會給出一個允許收縮到的最小M數(shù),直接輸入這個數(shù),確定就可以了。

另一種方法有一定的風險性,因為SQL SERVER的日志文件不是即時寫入數(shù)據(jù)庫主文件的,如處理不當,會造成數(shù)據(jù)的損失。
1、備份數(shù)據(jù)庫(以防萬一)
2、分離數(shù)據(jù)庫 企業(yè)管理器->服務器->數(shù)據(jù)庫->右鍵->分離數(shù)據(jù)庫
3、刪除LOG文件
4、附加數(shù)據(jù)庫 企業(yè)管理器->服務器->右鍵->附加數(shù)據(jù)庫
此法生成新的LOG,大小只有500多K。

另外的幾點建議:

--縮小SQL日志

-- exec 'test'

create proc p_compdb

@dbname sysname, --要壓縮的數(shù)據(jù)庫名

@bkdatabase bit=1, --因為分離日志的步驟中,可能會損壞數(shù)據(jù)庫,所以你可以選擇是否自動數(shù)據(jù)庫

@bkfname nvarchar(260)=' --備份的文件名,如果不指定,自動備份到默認備份目錄,備份文件名為:數(shù)據(jù)庫名+日期時間

as

--1.清空日志

exec('DUMP TRANSACTION ['+@dbname+'] WITH NO_LOG')

--2.截斷事務日志:

exec('BACKUP LOG ['+@dbname+'] WITH NO_LOG')

--3.收縮數(shù)據(jù)庫文件(如果不壓縮,數(shù)據(jù)庫的文件不會減小

exec('DBCC SHRINKDATABASE(['+@dbname+'])')

--4.設置自動收縮

exec('EXEC sp_dboption ''+@dbname+'','autoshrink','TRUE'')

--后面的步驟有一定危險,你可以可以選擇是否應該這些步驟

--5.分離數(shù)據(jù)庫

if @bkdatabase=1

begin

if isnull(@bkfname,')='

set @bkfname=@dbname+'_'+convert(varchar,getdate(),112)

+replace(convert(varchar,getdate(),108),':',')

select 提示信息='備份數(shù)據(jù)庫到SQL 默認備份目錄,備份文件名:'+@bkfname

exec('backup database ['+@dbname+'] to disk=''+@bkfname+'')

end

--進行分離處理

create table #t(fname nvarchar(260),type int)

exec('insert into #t select filename,type=status&0x40 from ['+@dbname+']..sysfiles')

exec('sp_detach_db ''+@dbname+'')

--刪除日志文件

declare @fname nvarchar(260),@s varchar(8000)

declare tb cursor local for select fname from #t where type=64

open tb

fetch next from tb into @fname

while @@fetch_status=0

begin

set @s='del "'+rtrim(@fname)+'"'

exec master..xp_cmdshell @s,no_output

fetch next from tb into @fname

end

close tb

deallocate tb

--附加數(shù)據(jù)庫

set @s='

declare tb cursor local for select fname from #t where type=0

open tb

fetch next from tb into @fname

while @@fetch_status=0

begin

set @s=@s+',''+rtrim(@fname)+''

fetch next from tb into @fname

end

close tb

deallocate tb

exec('sp_attach_single_file_db ''+@dbname+''+@s)

GO

注意:建議使用第一種方法。

如果以后,不想要它變大。
SQL2000下使用:
在數(shù)據(jù)庫上點右鍵->屬性->選項->故障恢復-模型-選擇-簡單模型。
或用SQL語句:
alter database 數(shù)據(jù)庫名 set recovery simple

另外,Truncate log on checkpoint(此選項用于SQL7.0,SQL 2000中即故障恢復模型選擇為簡單模型)當執(zhí)行CHECKPOINT 命令時如果事務日志文件超過其大小的70% 則將其內(nèi)容清除在開發(fā)數(shù)據(jù)庫時時常將此選項設置為True Auto shrink定期對數(shù)據(jù)庫進行檢查當數(shù)據(jù)庫文件或日志文件的未用空間超過其大小的25%時,系統(tǒng)將會自動縮減文件使其未用空間等于25% 當文件大小沒有超過其建立時的初始大小時不會縮減文件縮減后的文件也必須大于或等于其初始大小對事務日志文件的縮減只有在對其作備份時或?qū)runcate log on checkpoint 選項設為True 時才能進行。

注意:一般立成建立的數(shù)據(jù)庫默認屬性已設好,但碰到意外情況使數(shù)據(jù)庫屬性被更改,請用戶清空日志后,檢查數(shù)據(jù)庫的以上屬性,以防事務日志再次充滿

具體的操作我還沒有實驗過,如果你要使用請在使用前backup好的你數(shù)據(jù)庫.

問題未解決?付費解決問題加Q或微信 2589053300 (即Q號又微信號)右上方掃一掃可加博主微信

所寫所說,是心之所感,思之所悟,行之所得;文當無敷衍,落筆求簡潔。 以所舍,求所獲;有所依,方所成!

支付寶贊助
微信贊助

免責聲明,若由于商用引起版權糾紛,一切責任均由使用者承擔。

您必須遵守我們的協(xié)議,如您下載該資源,行為將被視為對《免責聲明》全部內(nèi)容的認可->聯(lián)系老梁投訴資源
LaoLiang.Net部分資源來自互聯(lián)網(wǎng)收集,僅供用于學習和交流,請勿用于商業(yè)用途。如有侵權、不妥之處,請聯(lián)系站長并出示版權證明以便刪除。 敬請諒解! 侵權刪帖/違法舉報/投稿等事物聯(lián)系郵箱:service@laoliang.net
意在交流學習,歡迎贊賞評論,如有謬誤,請聯(lián)系指正;轉載請注明出處: » MSSQL2000(2005)數(shù)據(jù)庫日志清理方式(命令)

發(fā)表回復

本站承接,網(wǎng)站推廣(SEM,SEO);軟件安裝與調(diào)試;服務器或網(wǎng)絡推薦及配置;APP開發(fā)與維護;網(wǎng)站開發(fā)修改及維護; 各財務軟件安裝調(diào)試及注冊服務(金蝶,用友,管家婆,速達,星宇等);同時也有客戶管理系統(tǒng),人力資源,超市POS,醫(yī)藥管理等;

立即查看 了解詳情