`
jiasongmao
  • 浏览: 670568 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

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

 
阅读更多
USE master
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--建立人:    高升
--建立日期:2007/05/18
--修改日期:2007/06/02
--功能目的:收缩数据库的日志文件
--参数:    要执行收缩的数据库名称,如果参数为'',则收缩所有的非系统数据库,这个参数是为了应付临时--情况的,根据特殊情况临时针对某个数据库执行可以写上这个数据库的名称
--注意:    修改了恢复模式,注意备份    
--流程说明:1.转到需要收缩的数据库
--            2.更改数据库恢复模式为简单
--            3.指定收缩大小
--            4.更改数据库恢复模式为完整
CREATE PROCEDURE [dbo].[DB_Shrink_Log]
  @dbName varchar(50)                --要执行收缩的数据库名称
AS
DECLARE @exec_shrink varchar(500)    --存储所有的执行语句
DECLARE @sno int                    --执行的数据库临时编号
DECLARE @old_size decimal(18,2)        --收缩前ldf文件大小
DECLARE @new_size decimal(18,2)        --收缩后ldf文件大小
DECLARE @mdf_size decimal(18,2)        --数据库mdf文件的大小
DECLARE @shrink_DB table(            --存储待执行的数据库名称
            sno int identity(1,1),name sysname)

BEGIN try

if (@DBName = '')    --记录需要收缩的数据库名称
  INSERT @shrink_DB SELECT name FROM sys.databases WHERE database_id > 4
else
  INSERT @shrink_DB SELECT name FROM sys.databases WHERE name = @DBName

--开始循环收缩数据库Log文件
SET @sno = 1
while(@sno <= (SELECT COUNT(sno) FROM @shrink_DB))
BEGIN 
  SELECT @dbName = name FROM @shrink_DB WHERE sno = @sno

  --取出数据库mdf和ldf文件的大小
  SELECT @mdf_size = size * 8 / 1024 FROM sys.master_files WHERE database_id = DB_ID(@DBName) and file_id = 1
  SELECT @old_size = size * 8 / 1024 FROM sys.master_files WHERE database_id = DB_ID(@DBName) and file_id = 2

--如果数据库的ldg文件大于mdf/10文件则收缩,否则不需要收缩
if (@old_size > @mdf_size/10) 
BEGIN
  --1.将数据库上下文更改为需要收缩的数据库
  SET @exec_shrink = 'USE ' + @dbName + ';' + char(13)

  --2.将恢复模式改为'简单'
  set @exec_shrink = @exec_shrink +
    'ALTER DATABASE ' + @dbName +
    ' SET RECOVERY SIMPLE;' + char(13)

  --3.取当前数据库所有的ldf文件,文件将压缩到数据库mdf文件大小的1/10
  DECLARE @shrink varchar(200)
  SET @shrink = ''
  SELECT @shrink = @shrink + 'DBCC SHRINKFILE('+rtrim(file_id)+','+rtrim(Ceiling(@mdf_size/10))+');' +char(13) FROM sys.database_files WHERE type = 1
  set @exec_shrink = @exec_shrink + @shrink

  --如果数据库只有一个ldf文件则可以写简单点,ldf文件的file_id通常为2
  --SET @exec_shrink = @exec_shrink + 'DBCC SHRINKFILE(2,' + rtrim(Ceiling(@mdf_size/10)) + ');'+ char(13)

  --4.将恢复模式改为'完整'
  set @exec_shrink = @exec_shrink +
    'ALTER DATABASE ' + @dbName +
    ' SET RECOVERY FULL;'

  exec (@exec_shrink)
  --print @exec_shrink

  SELECT @new_size = size * 8 / 1024 FROM sys.master_files WHERE database_id = DB_ID(@DBName) and file_id = 2
  print (@dbName +'收缩完成,压缩前 ' +rtrim(@old_size) + ' MB,收缩后 '+ rtrim(@new_size) + ' MB')
END
else
BEGIN
  print(@dbName + '暂时不需要收缩。')
END

SET @sno = @sno + 1
END    --while
END try
BEGIN catch
  print ERROR_MESSAGE()
END catch
GO
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO

 

转载与CSDN,地址:http://blog.csdn.net/hb_gx/article/details/1616550

分享到:
评论

相关推荐

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

    在SQL Server 2008中删除或压缩数据库日志是一项重要的数据库维护工作,尤其是在日志文件过大或备份时间过长的情况下。通过改变恢复模式、执行日志清理、文件收缩以及设置自动收缩和文件增长限制等操作,可以有效地...

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

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

    数据库日志压缩工具

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

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

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

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

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

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

    随着数据库的使用,日志和数据文件可能会不断增长,占用大量磁盘空间,这可能导致性能下降甚至存储不足的问题。以下是一些关于如何压缩SQL Server 2005的日志和数据库文件的步骤以及注意事项: 1. **清空日志**: ...

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

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

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

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

    SQL 数据日志文件压缩

    "SQL 数据日志文件压缩"是一种针对这种情况的解决方案,旨在有效地减小数据库日志文件(通常是.LDF文件)的体积,从而优化存储空间的使用。 SQL Server的事务日志用于记录所有事务的详细信息,包括事务开始、修改...

    sql server数据库日志压缩

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

    SQL Server无法收缩日志文件的原因分析及解决办法

    总之,理解SQL Server日志文件的工作原理以及如何管理和收缩日志文件对于优化数据库性能和管理存储空间至关重要。在进行任何日志文件操作时,应确保对业务的影响最小,并遵循最佳实践,以避免可能的数据丢失或性能...

    Sqlserver2000深度压缩数据库文件

    总之,SQL Server 2000中的深度压缩数据库文件是一个涉及多个DBCC命令的过程,旨在释放被删除数据占用的空间,提高存储效率。然而,这种操作应谨慎进行,并与数据库的日常管理和维护相结合,以保持系统的健康和高效...

    易语言压缩Access数据库

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

    压缩数据库(SQL)

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

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

    在事务日志传送配置过程中,需要指定日志备份文件的保存路径、备份时间以及是否启用压缩等功能。例如,可以将日志备份文件的路径设置为E盘下的Log-Backup文件夹,并设置定时备份策略,如每小时备份一次,并启用压缩...

    数据库清除日志文件.doc

    #### 二、数据库日志文件概述 **日志文件的作用:** - 记录所有数据修改操作。 - 用于故障恢复,确保数据一致性。 - 支持事务的原子性和持久性。 **日志文件的问题:** - 日志文件过大可能导致磁盘空间不足。 - ...

    C# sql数据库自动备份并压缩(源码)

    标题 "C# sql数据库自动备份并压缩(源码)" 提供了一个关键的IT知识点,即如何使用C#编程语言来创建一个SQL数据库的自动备份功能,并且这个备份过程还包含了数据压缩的步骤。这个工具对于数据库管理员或者软件开发者...

    Sql Server数据库自动全备份的脚本(带7z压缩)

    在脚本中,你需要指定要备份的数据库名称、备份文件的位置以及备份类型(全备份、差异备份或日志备份)。 5. **7-Zip 压缩**: 7-Zip是一款开源的压缩软件,其压缩率高且支持多种格式。在备份脚本完成后,可以调用...

Global site tag (gtag.js) - Google Analytics