壓縮SQLServer資料庫日誌的乙個儲存過程

2021-09-05 14:15:56 字數 2157 閱讀 7535

use master  --注意,此儲存過程要建在master資料庫中

goif exists (select * from dbo.sysobjects where id = object_id(n'[dbo].[p_compdb]') and objectproperty(id, n'isprocedure') = 1)

drop procedure [dbo].[p_compdb]

gocreate proc p_compdb

@dbname sysname,   --要壓縮的資料庫名

@bkdatabase bit=1,   --因為分離日誌的步驟中,可能會損壞資料庫,所以你可以選擇是否自動資料庫

@bkfname nvarchar(260)='' --備份的檔名,如果不指定,自動備份到預設備份目錄,備份檔案名為:資料庫名+日期時間

as--1.清空日誌

exec('dump transaction ['+@dbname+'] with  no_log')

--2.截斷事務日誌:

exec('backup log ['+@dbname+'] with no_log')

--3.收縮資料庫檔案(如果不壓縮,資料庫的檔案不會減小

exec('dbcc shrinkdatabase(['+@dbname+'])')

--4.設定自動收縮

exec('exec sp_dboption '''+@dbname+''',''autoshrink'',''true''')

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

--5.分離資料庫

if @bkdatabase=1

begin

if isnull(@bkfname,'')=''

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

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

select 提示資訊='備份資料庫到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

endclose tb

deallocate tb

--附加資料庫

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

endclose tb

deallocate tb

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

go/*--呼叫示例

exec p_compdb 'test'

--*/

如何壓縮SQL Server資料庫

特別注意 請按步驟進行,未進行前面的步驟,請不要做後面的步驟 否則可能損壞你的資料庫.一般不建議做第4,6兩步 第4步不安全,有可能損壞資料庫或丟失資料 第6步如果日誌達到上限,則以後的資料庫處理會失敗,在清理日誌後才能恢復.下面的所有庫名都指你要處理的資料庫的庫名 1.清空日誌 dump tran...

SQLSERVER 2008資料庫壓縮

壓縮資料庫 dbcc shrinkdatabase cqgpublic prd 1 壓縮資料庫檔案 declare name varchar 500 select name name from sys.database files print name dbcc shrinkfile name,1 ...

壓縮SqlServer資料庫日誌的指令碼

操作步驟和方法 依次執行以下1 3步驟的指令碼檔案,資料庫日誌檔案最小將被壓縮為1m大小。其中 dbname 代表你要壓縮的資料庫名稱。1 清空日誌 exec dump transaction dbname with no log 2 截斷事務日誌 exec backup log dbname wi...