压缩数据库日志(原作:zjcxc(邹建))

转载 2004年07月28日 14:17:00

经常在CSDN上看到网友发帖说,压缩日志文件处理不当,导致数据库损坏,甚至不能恢复数据,于是就写了一个通用的数据库日志文件压缩的存储过程来解决此问题:

/*--压缩数据库的通用存储过程
 
 压缩日志及数据库文件大小
 因为要对数据库进行分离处理
 所以存储过程不能创建在被压缩的数据库中

--邹建 2004.3--*/

/*--调用示例
 exec p_compdb 'test'
--*/

use master  --注意,此存储过程要建在master数据库中
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_compdb]') and OBJECTPROPERTY(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
 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
end
close 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
end
close tb
deallocate tb
exec('sp_attach_single_file_db '''+@dbname+''''+@s)
go

Java日志实战及解析

介绍Java日志相关内容。从理论到实战,从实战到源码,都有涉及,全面快速搞定Java日志及相关库或框架。 前置知识:Java基础。 学习效果:全面系统掌握Java日志及相关框架。 课程内容:日志介绍,日志记录过程解析,Log4j,LogBack,SLF等实战,日志Filter和JMX等高级内容实战和讲解,其他。 学了此课程,可以说Java日志不求人。 免费Q群:557373922。
  • 2016年08月24日 15:16

压缩数据库日志(原作:zjcxc(邹建))

经常在CSDN上看到网友发帖说,压缩日志文件处理不当,导致数据库损坏,甚至不能恢复数据,于是就写了一个通用的数据库日志文件压缩的存储过程来解决此问题:/*--压缩数据库的通用存储过程  压缩日志及数据...
  • ReViSion
  • ReViSion
  • 2006-03-12 10:25:00
  • 732

zjcxc(邹建)的专栏

http://blog.csdn.net/zjcxc/
  • zhangjian01361
  • zhangjian01361
  • 2006-02-20 14:19:00
  • 1243

zjcxc(邹建)的Blog

http://blog.csdn.net/zjcxc
  • kldx5092
  • kldx5092
  • 2009-06-04 09:54:00
  • 373

zjcxc(邹建) 的个性化书签

依次是正反面
  • ghj1976
  • ghj1976
  • 2005-10-24 17:05:00
  • 2167

VB实现SQL Server数据库备份/恢复(原作:zjcxc(邹建))

***************************************************************************模 块 名:fBackupDatabase_a**...
  • griefforyou
  • griefforyou
  • 2004-07-28 14:20:00
  • 1395

邹建《中文版SQL Server2000开发与管理应用实例》完全源代码

  • 2011年05月05日 08:25
  • 342KB
  • 下载

SQL Server 2008压缩数据库日志文件

 ALTER DATABASE 数据
  • jjhua
  • jjhua
  • 2014-08-22 16:59:28
  • 2302

邹建 - 中文版SQL SERVER 2000开发与管理应用实例 1

  • 2011年05月05日 08:20
  • 35MB
  • 下载

压缩数据库日志文件(存储过程)

最近数据库日志文件增加太快,其中一个数据库的日志文件在短短一个星期居然从600多MB增加到40多G,为了偷懒所以写了这个存储过程压缩日志文件,不然30多个数据库每天光点收缩就要10几分钟,想想还是很值...
  • hb_gx
  • hb_gx
  • 2007-05-19 16:48:00
  • 3644
收藏助手
不良信息举报
您举报文章:压缩数据库日志(原作:zjcxc(邹建))
举报原因:
原因补充:

(最多只允许输入30个字)