压缩数据库日志
来源:互联网 发布:苹果背单词软件 编辑:程序博客网 时间:2024/05/17 08:35
经常在CSDN上看到网友发帖说,压缩日志文件处理不当,导致数据库损坏,甚至不能恢复数据,于是就写了一个通用的数据库日志文件压缩的存储过程来解决此问题:
/*--压缩数据库的通用存储过程
压缩日志及数据库文件大小
因为要对数据库进行分离处理
所以存储过程不能创建在被压缩的数据库中
--邹建 2004.03(引用请保留此信息)--*/
/*--调用示例
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
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=20097
- 压缩数据库日志
- 压缩数据库日志
- 压缩sql数据库日志
- 压缩数据库日志
- 压缩数据库日志
- 压缩数据库日志
- 压缩数据库日志
- 压缩数据库日志
- 压缩数据库日志
- 压缩数据库日志
- 压缩数据库日志
- 压缩数据库日志
- 压缩数据库日志
- 压缩数据库日志
- 压缩数据库日志
- 压缩数据库日志文件
- 压缩数据库日志
- 压缩数据库日志
- 多版本软件构建策略分析
- 呼拉拉一片陈一舟和王兴PK声
- 创建作业的通用存储过程
- 估计表大小(三)--估计无聚集索引的表的大小
- 比较两个数据库的表结构差异
- 压缩数据库日志
- ::细细品味ASP.NET (五)::
- 数据库备份与还原处理
- 树形数据的处理
- 互联网大鳄的"打"、"着实打"、"用心打"
- 移动互联网人丁凋零的苦果早已种下
- 普及一下酒桌上的规矩
- 估计表的大小(二)--估计带有聚集索引的表的大小
- SQL BUG集之"随机排序中的newid()问题"