中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > 数据库综合
缩小数据库日志另类方法
作者:未知 时间:2004-05-11 12:12 出处:Blog 责编:chinaitpower
              摘要:暂无

--功能说明:缩小数据库日志文件
--作者:不详
--e.g:数据库名为abc
--------------------------------------------------------------
SET NOCOUNT ON
DECLARE @LOGICALFILENAME SYSNAME,
        @MAXMINUTES INT,
        @NEWSIZE INT
USE abc---要操作的数据库
SELECT @LOGICALFILENAME = 'abc_LOG',---日志文件名
       @MAXMINUTES = 10,---LIMIT ON TIME ALLOWED TO WRAP LOG.
       @NEWSIZE = 1---你想设定的日志文件大小(M)
--SETUP /INITIALIZE
DECLARE @ORIGINALSIZE INT
 SELECT @ORIGINALSIZE = SIZE
   FROM SYSFILES
  WHERE NAME = @LOGICALFILENAME

 SELECT 原日志大小='ORIGINAL SIZE OF ' + DB_NAME() + ' LOG IS ' +
        CONVERT(VARCHAR(30),@ORIGINALSIZE)+'8K PAGES OR '+
        CONVERT(VARCHAR(30),(@ORIGINALSIZE*8/1024))+'MB'
   FROM SYSFILES
  WHERE NAME = @LOGICALFILENAME

 CREATE TABLE DUMMYTRANS
              (DUMMYCOLUMN CHAR(8000) NOT NULL)

DECLARE @COUNT INT,
        @STARTTIME DATETIME,
        @TRUNCLOG VARCHAR(255)
 SELECT @STARTTIME = GETDATE(),
        @TRUNCLOG = 'BACKUP LOG '+DB_NAME()+' WITH TRUNCATE_ONLY'
   DBCC SHRINKFILE (@LOGICALFILENAME,@NEWSIZE)
EXEC(@TRUNCLOG)
--WRAP THE LOG IF NECESSARY
WHILE @MAXMINUTES >DATEDIFF(MI,@STARTTIME,GETDATE()) --TIME HAS NOE EXPIRED
  AND @ORIGINALSIZE =(SELECT SIZE FROM SYSFILES WHERE NAME = @LOGICALFILENAME)
  AND (@ORIGINALSIZE*8/1024)>@NEWSIZE
BEGIN --OUTER LOOP.
    SELECT @COUNT = 0
        WHILE((@COUNT<@ORIGINALSIZE/16) AND (@COUNT<50000))
        BEGIN -- UPDATE
            INSERT DUMMYTRANS VALUES ('FILL LOG')
            DELETE DUMMYTRANS
            SELECT @COUNT = @COUNT + 1
        END
EXEC (@TRUNCLOG)
END
SELECT 新日志大小='FINAL SIZE OF ' + db_NAME() +' LOG IS '+
CONVERT(VARCHAR(30),SIZE)+'8K PAGES OR '+
CONVERT(VARCHAR(30),(SIZE*8/1024))+'MB'
FROM SYSFILES
WHERE NAME = @LOGICALFILENAME
DROP TABLE DUMMYTRANS
SET NOCOUNT OFF

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有