`
逆风的香1314
  • 浏览: 1415908 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

压缩数据库日志

阅读更多

经常在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

分享到:
评论

相关推荐

    SQL_Server_2008删除或压缩数据库日志的方法.doc

    标题与描述均指向了一个具体的技术问题的解决方法——在SQL Server 2008中如何删除或压缩数据库日志。这一需求通常出现在日志文件占用过多磁盘空间,或者备份过程耗时过长,影响正常业务操作的情况下。下面将详细...

    sqlserver压缩数据库日志文件.txt

    sqlserver压缩数据库日志文件

    数据库日志压缩工具

    通过压缩数据库日志,可以显著减少文件的存储需求,从而节省硬盘空间,并可能提升系统读写效率。ProSqlLogClear.exe 是一个专为此目的设计的工具,它能够智能地处理SQL Server的日志文件,进行高效、安全的压缩,...

    sql server数据库-备份、压缩、清空日志语句

    SQL Server 提供了 `DBCC SHRINKDATABASE` 和 `DBCC SHRINKFILE` 两个命令来压缩数据库。 - **`DBCC SHRINKDATABASE`**:用于减少整个数据库所占用的空间。 - **`DBCC SHRINKFILE`**:用于减少指定文件(数据文件或...

    压缩sql server数据库日志的工具

    程序是在delphi6,win2000server,sql2000环境下编译的采用动态生成存储过程来压缩数据库日志,测试过基本没有问题.使用到的控件: 1stclass(做的label和image) dxPack2 (用里面的按钮控件做的按钮)可以用delphi自带的...

    AlwayOn集群数据库日志清理教程.doc

    AlwaysOn 集群数据库日志清理教程 在 AlwaysOn 集群环境中,数据库日志文件的疯狂扩张是一个常见的问题,该问题不仅占用大量的存储空间,还可能会影响数据库的性能和稳定性。因此,周期性的清理数据库日志文件是...

    压缩数据库(SQL)

    #### 描述:压缩数据库日志文件,可以省出很多空间哦,赶快下载吧,亲! - **关键信息**: - **目的**:节省磁盘空间。 - **对象**:数据库日志文件。 - **效果**:显著释放磁盘空间。 - **技术细节**: - **...

    SQL Server 2000/2005/2008删除或压缩数据库日志的方法

    本文将探讨如何在SQL Server 2000、2005和2008中有效地删除或压缩数据库日志。 首先,针对SQL Server 2000,可以使用以下方法来删除或压缩日志文件: 1. 使用`DUMP TRANSACTION`语句将数据库中的事务日志备份到...

    压缩SQL数据库和数据库日志命令

    ### 压缩SQL Server数据库及数据库日志详解 #### 一、压缩SQL Server数据库的重要性 在日常的数据库管理工作中,随着数据量的不断增加,数据库文件可能会变得非常庞大,这不仅会占用大量的磁盘空间,还可能会影响...

    MS SQL数据库日志压缩方法

    MS SQL性能是很不错的,但是数据库用了一段时间之后,数据库却变得很大,实际的数据量不大。一般都是数据库日志引起...网上的MSSQL虚拟主机价格也贵,要想不让数据库超容,只好压缩下数据库日志,或者删除数据库日志。

    sqlserver清理数据库日志

    "SQL Server 清理数据库日志" SQL Server 中的数据库日志是记录数据库所有操作的日志文件,这些日志文件会不断增长,占用大量的磁盘空间。如果不定期清理这些日志文件,可能会导致磁盘空间不足,影响数据库性能。...

    压缩sqlserver数据库日志的工具(含源代码)

    程序是在delphi6,win2000server,sql2000环境下编译的采用动态生成存储过程来压缩数据库日志,测试过基本没有问题.使用到的控件: 1stclass(做的label和image) dxPack2 (用里面的按钮控件做的按钮)可以用delphi自带的...

    MS SQL SERVER 数据库日志压缩方法与代码

    因此,压缩数据库日志成了许多数据库管理员的首要任务。 MS SQL Server 提供了多种方法来压缩数据库日志,下面我们就来介绍其中的一些方法。 第一种方法是使用 DUMP TRANSACTION 语句来清空日志。这个语句可以将...

    压缩SQL数据库日志文件.sql

    通过SQL语句,压缩SQL数据库的日志文件,最小可以将日志文件压缩到1k左右

    sql server数据库日志压缩

    本文将详细介绍SQL Server数据库日志压缩的相关知识点。 首先,理解SQL Server的日志文件结构和工作原理至关重要。日志文件(Log File)存储了所有事务的开始、修改和结束信息,包括回滚信息和检查点信息。当数据库...

    DBCC SHRINKDATABASEMS SQL数据库日志压缩方法

    DBCC SHRINKDATABASEMS SQL数据库日志压缩方法 DBCC SHRINKDATABASE是一种MS SQL数据库日志压缩方法,用于解决数据库日志文件不断...这些命令可以帮助您快速地压缩数据库日志,释放存储空间,并且提高数据库的性能。

    易语言压缩Access数据库

    在实际开发中,为了方便使用,你可能还会编写一些辅助函数,比如“压缩数据库”和“解压缩数据库”,这些函数可以封装上述步骤,提供更友好的接口给其他部分的代码调用。同时,为了确保数据安全,记得在操作数据库时...

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

    以下是一些关于如何压缩SQL Server 2005的日志和数据库文件的步骤以及注意事项: 1. **清空日志**: 使用`DUMP TRANSACTION 库名 WITH NO_LOG`命令可以清空日志,但请注意,这将丢弃未提交的事务,因此在执行前应...

    SQL 数据库2014 数据库事务日志截断配置

    ### SQL 数据库2014 数据库事务日志截断配置 #### 一、SQL数据库事务日志收缩 ##### 1.1 登陆SQL01数据库管理工具,将HA可用性组属性的备份首选项设置为-主副本 在进行事务日志收缩之前,首先需要确保SQL Server...

Global site tag (gtag.js) - Google Analytics