`
jiasongmao
  • 浏览: 645146 次
  • 性别: 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数据库日志文件.sql

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

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

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

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

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

    文件自动同步数据库管理工具

    如清除系统日志,数据同步,数据备份,整理数据库空间,调用存储过程等。已测试支持Oracle、SqlServer、MySql等数据库、及Access、Excel等OleDb数据库。 文件操作任务:同步服务器上的文件,或删除服务器上的日志...

    一次性压缩Sqlserver2005中所有库日志的存储过程

    通过下面这个可以执行单个数据库日志压缩,问题每次都要写数据库名字,日志大的话执行速度没有那么快

    数据库日常检测修复工具

    可以修复由于数据存储过程中导致的数据库中某个表错误,致使软件打不开,或者出现错误! 其功能有: 附加数据库 检测数据库 修复数据库 压缩数据库 压缩日志文件 …………

    ISA日志统计的整体方案及实施过程

    5、truncate表、delete记录,压缩数据库。 二、旧方案存在的问题 1、问题一:在追加月日志,有时访问某一网站的所有人员名单太长,会造成如下错误。 Warning: The table 'SITECLICKTOPSUM' has been created but ...

    SQL数据库备份恢复助手V2.6

    可自由组合的无限复合式备份任务,支持备份文件ZIP压缩后通过Lan/Ftp/Email传输存储,Email日志信息发送,自由删除指定周期与存储位置的备份文件,还具有安全可靠的SQL数据库恢复功能。 1. 完全免费、纯“绿色化”、...

    oracle数据库修复

    支持从ASM中直接抽取出数据文件和其他任意存储在ASM中的文件(包括控制文件、日志文件和归档日志等),即使相关的磁盘组不能成功mount 支持的Oracle数据库版本包括7,8i,9i,10g,11g 支持多种平台的数据库,包括AIX...

    SQL数据库备份恢复助手 V2.8.8 官方绿色安全版.zip

    用户可以自由组合的无限复合式备份任务,支持备份文件ZIP压缩后通过Lan/Ftp/Email传输存储,Email日志信息发送,让你的sql数据库永不丢失。 SQL数据库备份恢复助手 功能特点: 1、完全免费、纯“绿色化”、...

    自动备份MySQL数据库

    数据压缩:为了节省存储空间和提高备份效率,可以选择对备份文件进行压缩。压缩可以使用数据库管理系统的内置工具或第三方压缩工具来完成。 日志记录:自动备份过程应该有日志记录,以便检查备份的执行情况和出现的...

    Oracle数据库管理员技术指南

    1.2.1 怎样命名数据库文件 1.2.2 使用最佳灵活结构 1.2.3 怎样配置符合 OFA 的 Oracle 文件 系统 1.3 规划数据库文件布局 1.3.1 最大化可用性的规划 1.3.2 最小化磁盘争用的规划 1.4 建立参数文件 1.4.1 ...

    SQL数据库自动备份恢复助手 v2.6

    可自由组合的无限复合式备份任务,支持备份文件ZIP压缩后通过Lan/Ftp/Email传输存储,Email日志信息发送,自由删除指定周期与存储位置的备份文件,还具有安全可靠的SQL数据库恢复功能。 1)完全免费、纯“绿色化”、...

    SQL数据库备份恢复助手V2.6.0.1

    可自由组合的无限复合式备份任务,支持备份文件ZIP压缩后通过Lan/Ftp/Email传输存储,Email日志信息发送,自由删除指定周期与存储位置的备份文件,还具有安全可靠的SQL数据库恢复功能。 1. 完全免费、纯“绿色化”...

    Oracle数据库实验操作

    实验41:编写存储过程 83 实验42:编写包package 85 第三部分数据库的体系结构 88 实例的维护 88 实验43:数据库的最高帐号sys的操作系统认证模式 90 实验44:数据库的最高帐号sys的密码文件认证模式 92 实验45:...

    SQL数据库备份恢复助手 v2.7.5.zip

    可自由组合的无限复合式备份任务,支持备份文件ZIP压缩后通过Lan/Ftp/云(金山快盘)/Email传输存储,Email日志信息发送,自由删除指定周期与存储位置的备份文件,还具有安全可靠的SQL数据库恢复功能。   1)完全...

    SQL数据库自动备份&恢复助手V2.5

    4)通过ZIP模式压缩并加密数据库备份文件; 5)将备份文件通过LAN/FTP/EMAIL进行异地传输; 6)将相应的备份日志信息(可选择仅备份产生错误的日志信息)发送至指定的EMAIL; 7)自动删除指定周期内的本地/LAN/FTP所...

    SQL数据库备份恢复助手 v2.9.zip

    可自由组合的无限复合式备份任务,支持备份文件ZIP压缩后通过Lan/Ftp/云(金山快盘)/Email传输存储,Email日志信息发送,自由删除指定周期与存储位置的备份文件,还具有安全可靠的SQL数据库恢复功能。 SQL数据库...

    mysql面试题史上最强汇总:基础知识+性能优化+备份与恢复+ 数据库设计+数据库管理+高可用性与容灾+安全性+ 框架集成等

    1. 基础知识:包括 MySQL 数据库的基本概念、SQL 命令、数据类型、索引、视图、存储过程等。 2. 性能优化:包括 SQL 查询优化、索引优化、数据表分区、缓存机制等。 3. 备份与恢复:包括数据备份和恢复的方法、备份...

Global site tag (gtag.js) - Google Analytics