收缩数据库文件,咨询一下,立即给分
我现在正在收缩数据库文件,以前也收缩过文件,因为这次收缩文件比较大,该文件大约有400G,所以想知道收缩这么大的文件需要多少时间,问题很简单,希望知道的能告诉我一声,还有需要注意的事项。 
       谢谢了,我在线上,很快就会给分!:(
------解决方案--------------------顶 
 好大的文件哦
------解决方案--------------------  --先备份数据库   
 --截断事务日志 
 backup log 数据库名 with no_log 
 go   
 --收缩数据库 
 dbcc shrinkdatabase(数据库名) 
 go   
------解决方案--------------------  一定要先备份数据库。   
 时间长短,与很多因素有关,如:机器性能等
------解决方案--------------------啊,这么大的文件啊~没有玩过 
 楼主收缩完了  记得来说一下花了多久哦 
 机器配置和文件结构都会影响时间吧~不好估计
------解决方案--------------------时间基本上没有办法预估, 一般这样大的文件应该可以在1小时内, 10分钟以上收缩完成(根据笔者的经验)   
 具体的时间取决于当前服务器的压力/事务数量/日志文件内活动事务的情况等等.   
 收缩的时候, 建议在断开用户连接的情况下进行.
------解决方案--------------------学习!
------解决方案--------------------先把所有的连接断开,再收缩
------解决方案--------------------400G?   
 日志文件太大?清除他.   
 清除日志:      
 DECLARE @LogicalFileName sysname, 
         @MaxMinutes INT, 
         @NewSize INT 
 USE     szwzcheck             -- 要操作的数据库名 
 SELECT  @LogicalFileName =  'szwzcheck_Log ',  -- 日志文件名 
 @MaxMinutes = 10,               -- Limit on time allowed to wrap log. 
         @NewSize = 20                  -- 你想设定的日志文件的大小(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 @Counter   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  
       AND @OriginalSize = (SELECT size FROM sysfiles WHERE name =  
 @LogicalFileName)   
       AND (@OriginalSize * 8 /1024) >  @NewSize   
   BEGIN -- Outer loop. 
     SELECT @Counter = 0 
     WHILE  ((@Counter  < @OriginalSize / 16) AND (@Counter  < 50000)) 
       BEGIN -- update 
         INSERT DummyTrans VALUES ( 'Fill Log ')   
         DELETE DummyTrans 
         SELECT @Counter = @Counter + 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    
 把szwzcheck换成你数据库的名字即可,在查询分析器里面运行。  
 有全角的空格(为了显示好看),你自己把他换一下.      
 收缩日志:   
 企业管理器--所有任务--收缩数据库--文件--选日志文件收缩 
------解决方案--------------------最好在使用不是很繁忙的情况下收缩,而且,最好是重起服务器后收缩,会比较快点
------解决方案--------------------