您的位置:首页 > 数据库

压缩、收缩、备份、删除SQL数据库日志

2011-05-12 14:09 204 查看
清除SQL数据库日志文件+ a- o! o. [/ s9 |, d

有两种方式: 一、是压缩日志,二、是删除日志。lfty.5d6d.com2 ?) D6 D- [, Z/ {0 z1 W8 X

一、压缩日志及数据库文件大小

因为要对数据库进行分离处理,所以存储过程不能创建在被压缩的数据库中

/*--调用示例听雨轩# ~% F. Q5 M6 U* @- ?3 [

exec p_compdb 'test'听雨轩) x( Z1 E9 f/ _) a

--*/听雨轩/ `( O _( ]& U4 R. u4 Q

use master --注意:该存储过程要建在master数据库中

go

lfty.5d6d.com$ M' g4 R1 _( t7 n

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_compdb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)( A0 t! d8 C$ v+ ^ y/ _( j

drop procedure [dbo].[p_compdb]听雨轩& d" c W/ h b/ i8 z- E }$ F ?

GO+ C* V3 }! Z3 X; _8 `

create proc p_compdb

@dbname sysname, --要压缩的数据库名

@bkdatabase bit=1, --在分离日志的步骤中,可能会损坏数据库,可以选择是否自动备份数据库听雨轩7 \' `9 M. R2 w/ U

@bkfname nvarchar(260)='' --备份的文件名,如果不指定,自动备份到默认备份目录,备份文件名为:数据库名+日期时间; F; X0 R/ J' K# @' K( B

as8 S8 r3 E0 L0 E. m

--1.清空日志lfty.5d6d.com( w* A) E2 R8 m1 [6 L U

exec('DUMP TRANSACTION ['+@dbname+'] WITH NO_LOG')lfty.5d6d.com8 C) V7 l3 D4 {1 {8 U; f5 Q

+ |- ^% }% b8 G8 |4 N6 ~! o. z

--2.截断事务日志:+ e% n# a$ u& A; N( Z2 U( J

exec('BACKUP LOG ['+@dbname+'] WITH NO_LOG')) n7 m, v# Q% e0 }

# N' D/ n! j: P" b6 H* a) B; U

--3.收缩数据库文件(如果不压缩,数据库的文件不会减小

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

9 n: D6 Z& p6 x/ |' p/ k

--4.设置自动收缩听雨轩! u% @! j9 P" ]& L

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

听雨轩) T* y" `* r5 ^3 C0 i2 L' C

--后面的步骤有一定危险,请确保做好了数据库备份再选择下列的步骤

--5.分离数据库

if @bkdatabase=1听雨轩% _$ x9 k3 Q3 [

begin

if isnull(@bkfname,'')='' : p& Z2 y. ~# l) X9 L

set @bkfname=@dbname+'_'+convert(varchar,getdate(),112)lfty.5d6d.com3 W0 F' I/ @1 w

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

select 提示信息='备份数据库到SQL 默认备份目录,备份文件名:'+@bkfname

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

end* v f$ B% f0 ]) ]* x: X

; t6 r1 K4 x1 W' P8 X

--进行分离处理8 M; _! \4 Y t! |

create table #t(fname nvarchar(260),type int)% M! l# [0 l7 c- X @" x# g4 ^4 ?

exec('insert into #t select filename,type=status&0x40 from ['+@dbname+']..sysfiles'), I2 K; y: R% h( A( J4 G* U* {/ j

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

--删除日志文件lfty.5d6d.com2 k; H" G" m* Y

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) k$ k+ `/ N% o

while @@fetch_status=0. O: @9 {, [& v h# _

begin

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

exec master..xp_cmdshell @s,no_output. O" T8 w) e3 d

fetch next from tb into @fname. y" i9 z0 D& }0 |* l; i

end

close tb

deallocate tb

6 u, C& p7 h% q

--附加数据库

set @s=''( f, B! I; e! k$ o- c

declare tb cursor local for select fname from #t where type=0听雨轩- e, v5 s$ Z6 _7 V- p3 b; `: g/ ?

open tb

fetch next from tb into @fname+ R$ C/ h0 k+ i9 E

while @@fetch_status=0% M4 B4 y+ M9 G1 [* i4 X* f

begin

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

fetch next from tb into @fnamelfty.5d6d.com% o* u; F$ x, N) O! ^: v4 Z/ { w

end- y5 Z9 w1 a- |' Q3 k2 K F8 Q

close tb' F3 k0 P9 Q7 m

deallocate tblfty.5d6d.com5 v$ v! p$ K( F; s9 h9 X& h2 o

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

go
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 日志 数据库