杂七杂八!

C# .Net Sql AD Flash Javascript Ajax
從網上整理的Sql 2005減少日誌文件的方法

方法一:粗暴型:

1.进入企业管理器,选中数据库,
2、所有任务->分离数据库
3、到数据库文件的存放目录,将***_log.LDF文件删除,你怕S的话可以拷出去
4、企业管理器->附加数据库,选mdf,这个时候你会看见日志文件这项是一个叉,不要紧继续,此时数据库就会提示你该数据库无日志是否创建一个新的,确定就是了。
5、记得数据库重新附加后用户要重新设置一下

方法二:一般型

建立作业,每天运行一次以下代码,缩小日志文件
backup log xxx with NO_LOG
backup log xxx with TRUNCATE_ONLY
DBCC SHRINKDATABASE(xxx)

方法三:持久型

修改数据库属性,恢复模式选为“简单”
修改日志文件属性,自动增长设为1MB,不设最大大小
执行收缩数据库

 --SQL语句的设置方式:  
  alter   database   数据库名   modify   file(name=逻辑文件名,maxsize=20)

 

方法四:如果我们以前没有注意,现在日志已经很大, 但是日志对我们又没有什么用的话,此时可以使用两种方法来减少日志文件所占有的空间

   1.直接删除日志文件

 

exec sp_helpdb 'pubs'

 

Name        filename

pubs         d:"Program Files"Microsoft SQL Server"MSSQL"data"pubs.mdf          

pubs_log    d:"Program Files"Microsoft SQL Server"MSSQL"data"pubs_log.ldf   

 

EXEC SP_DETACH_DB 'PUBS'

 

EXEC MASTER.DBO.XP_CMDSHELL 'DEL "d:"Program Files"Microsoft SQL Server"MSSQL"data"pubs_log.ldf"'

 

 

EXEC MASTER.DBO.XP_CMDSHELL 'DIR "d:"Program Files"Microsoft SQL Server"MSSQL"data"PUBS*.LDF"'

THE RESULT IS:

File Not Found

 

EXEC SP_ATTACH_SINGLE_FILE_DB N'PUBS',

        @PHYSNAME=N'd:"Program Files"Microsoft SQL Server"MSSQL"data"pubs.mdf'

 

SQL SERVER PRINT THE FOLLOW MESSAGE:

Device activation error. The physical file name 'd:"Program Files"Microsoft SQL Server"MSSQL"data"pubs_log.ldf' may be incorrect.

New log file 'd:"Program Files"Microsoft SQL Server"MSSQL"data"PUBS_log.LDF' was created.

 

NOW YOU CAN USE PUBS NORMALLY.

 

   2.截断日志,然后收缩日志文件.可以把这引步骤放在一个存储过程中,请先执行下面的存储过程创建语句:

 

CREATE PROC Up_shrinkfile

 @LogicalFileName sysname,---- Use sp_helpfile to identify the logical filename that you want to shrink.

           @MaxMinutes INT,--Limit on time allowed to wrap log.

           @NewSize INT -- in MB

as

Begin

   DECLARE @OriginalSize int

   SELECT @OriginalSize = size -- in 8K pages

     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)

 

   -- Wrap log and truncate it.

   DECLARE 

           @StartTime DATETIME,

           @TruncLog VARCHAR(255)

   SELECT @StartTime = GETDATE(),

           @TruncLog = 'BACKUP LOG ['+ db_name() + '] WITH TRUNCATE_ONLY'

   -- Try an initial shrink.

   DBCC SHRINKFILE (@LogicalFileName, @NewSize)

 

   EXEC (@TruncLog)

 

   -- Wrap the log if necessary.

   WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired

         AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) -- the log has not shrunk

         AND (@OriginalSize * 8 /1024) > @NewSize -- The value passed in for new size is smaller than the current size.

      BEGIN -- Outer loop.

         WAITFOR DELAY '00:00:30'

         EXEC (@TruncLog) -- See if a trunc of the log shrinks it.

      END   -- outer loop

   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

   

   PRINT '*** Perform a full database backup ***'

   SET NOCOUNT OFF

End

 

然后执行此存储过程,:

 

exec sp_helpdb 'pubs'

 

EXEC Up_shrinkfile 'pubs_log',10,1


 

posted on 2008-10-25 16:25  acheng  阅读(323)  评论(0编辑  收藏  举报