zoukankan      html  css  js  c++  java
  • 数据库日志文件很大,如何变小!

    *--压缩数据库的通用存储过程    
       
      压缩日志及数据库文件大小    
      因为要对数据库进行分离处理    
      所以存储过程不能创建在被压缩的数据库中    
       
      --邹建   2004.3--*/    
       
      /*--调用示例    
      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     
     

    出处:http://topic.csdn.net/t/20051110/17/4385245.html

  • 相关阅读:
    VMware下三种网络连接模式介绍
    Linux下tomcat的启动,关闭,以及shutdown失败杀死进程的方法
    C语言 寒假作业 01
    学期总结
    第十六周助教总结
    第十五周助教总结
    C语言I博客作业08
    first program
    第十四周助教总结
    前七章主要知识点
  • 原文地址:https://www.cnblogs.com/blsong/p/1684054.html
Copyright © 2011-2022 走看看