壓縮資料庫日誌

2022-03-02 05:58:02 字數 3272 閱讀 1976

轉自:

/*--壓縮資料庫的通用儲存過程

壓縮日誌及資料庫檔案大小

因為要對資料庫進行分離處理

所以儲存過程不能建立在被壓縮的資料庫中

--鄒建 2004.03--

*//*

--呼叫示例

exec p_compdb 'test'

--*/

usemaster  

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

goif

exists

(select

*from

dbo.sysobjects 

where

id =

object_id(n'

[dbo].[p_compdb]') 

andobjectproperty

(id, n

'isprocedure') 

=1)drop

procedure

[dbo].

[p_compdb]go

create

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

ifisnull

(@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 

forselect

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

tbdeallocate

tb--

附加資料庫

set@s=''

declare

tb cursor

local 

forselect

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

tbdeallocate

tbexec('

sp_attach_single_file_db 

'''+

@dbname

+''''+@s

)go

壓縮資料庫日誌

經常在csdn上看到發帖說,壓縮日誌檔案處理不當,導致資料庫損壞,甚至不能恢復資料,於是就寫了乙個通用的資料庫日誌檔案壓縮的儲存過程來解決此問題 壓縮資料庫的通用儲存過程 壓縮日誌及資料庫檔案大小 因為要對資料庫進行分離處理 所以儲存過程不能建立在被壓縮的資料庫中 鄒建 2004.03 引用請保留此...

壓縮資料庫日誌

經常在csdn上看到發帖說,壓縮日誌檔案處理不當,導致資料庫損壞,甚至不能恢復資料,於是就寫了乙個通用的資料庫日誌檔案壓縮的儲存過程來解決此問題 壓縮資料庫的通用儲存過程 壓縮日誌及資料庫檔案大小 因為要對資料庫進行分離處理 所以儲存過程不能建立在被壓縮的資料庫中 鄒建 2004.03 引用請保留此...

壓縮資料庫日誌

經常在csdn上看到發帖說,壓縮日誌檔案處理不當,導致資料庫損壞,甚至不能恢復資料,於是就寫了乙個通用的資料庫日誌檔案壓縮的儲存過程來解決此問題 壓縮資料庫的通用儲存過程 壓縮日誌及資料庫檔案大小 因為要對資料庫進行分離處理 所以儲存過程不能建立在被壓縮的資料庫中 鄒建 2004.03 引用請保留此...