压缩数据库日志(原作: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

压缩数据库及日志

压缩数据库及日志
  • jefftomjack
  • jefftomjack
  • 2016年11月09日 13:49
  • 843

sql server 2000收缩数据库【极简操作】

个人理解,数据库在平凡长期操作的过程中会数据的日志文件永远是按一定的比例在增加,数据文件在数据库删除大量的数据后不一定减小磁盘空间,反复操作会出现空间浪费,所以收缩数据库将会得以体现。 假设把数据库...
  • w200221626
  • w200221626
  • 2016年07月25日 15:26
  • 2455

邹建数据库加日期处理

if exists(select * from dbo.sysobjects where id = OBJECT_ID(N'[dbo].[f_DateADD]')  and xtype in (N'...
  • qiangwang799
  • qiangwang799
  • 2013年01月16日 14:40
  • 176

日志文件自动压缩

使用 log4j 记录日志,每天0点进行分隔,由于日志文件较大,为节省空间,需要将历史文件自动压缩。需要使用 Apache Extras™ for Apache log4j™  的 org.apach...
  • rootcn
  • rootcn
  • 2014年06月12日 12:43
  • 13661

hive数据压缩

转载:http://itindex.net/detail/47472-%E5%AD%A6%E4%B9%A0-programing-hive Hive使用的是Hadoop的文件系统和文件格式,比如TE...
  • An342647823
  • An342647823
  • 2015年04月17日 11:15
  • 4109

nginx日志相关和启用压缩,缓存的设置

nginx相关设置和优化,算是读书笔记吧~~,共勉^^
  • njys1
  • njys1
  • 2017年02月05日 22:12
  • 1503

通过python编写定时任务压缩日志文件

主要解决日志文件不断增加导致的占用空间过大问题
  • deepsea0716
  • deepsea0716
  • 2017年06月23日 13:22
  • 364

log4j滚动输出压缩格式的文件

log4j滚动输出压缩格式的文件
  • iamlihongwei
  • iamlihongwei
  • 2017年03月16日 17:43
  • 1085

Hive压缩说明

Hive压缩使用
  • xsdxs
  • xsdxs
  • 2016年11月13日 21:50
  • 2586

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

因为单位用的数据库名为svw,如果其他单位或个人想快捷方便无误的压缩数据库日志,就把数据库名更改为你们自己的数据库名,压缩数据库日志的操作步骤:   1、打开企业管理器 2、打开要处理的数据...
  • xyl295528322
  • xyl295528322
  • 2014年07月02日 17:21
  • 450
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:压缩数据库日志(原作:zjcxc(邹建))
举报原因:
原因补充:

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