SqlServer 数据库日志没法收缩处理过程

今天按经常使用方法收缩一个测试用的数据库日志,发现无法收缩!
[sql]  view plain  copy
 
 在CODE上查看代码片派生到个人代码片
  1. dbcc sqlperf(logspace)  


 
 
[sql]  view plain  copy
 
 在CODE上查看代码片派生到个人代码片
  1. USE [dbname]  
  2. GO  
  3.   
  4. ALTER DATABASE [dbname] SET RECOVERY SIMPLE WITH NO_WAIT  
  5. GO  
  6. DBCC SHRINKFILE (N'dbname_log' , 0, TRUNCATEONLY)  
  7. GO  
  8. DBCC SHRINKDATABASE(N'dbname' )  
  9. GO  

日志大小仍是同样。
 
 
 
 
DBCC OPENTRAN 查看是否打开的事务。发现有打开的事务,执行检查点再收缩,仍是不行!
[sql]  view plain  copy
 
 在CODE上查看代码片派生到个人代码片
  1. DBCC OPENTRAN (dbname)   
  2. CHECKPOINT   


 
 
参考: http://bbs.csdn.net/topics/350199751,将日志事务标志为已分发,再收缩,不行!
[sql]  view plain  copy
 
 在CODE上查看代码片派生到个人代码片
  1. --日志中全部复制的事务将标记为已分发  
  2. EXEC sp_repldone @xactid = NULL,@xact_segno = NULL,@numtrans = 0,@time = 0,@reset = 1  


 
 
如今查看虚拟日志文件,发现有不少,而且都处于活动状态
[sql]  view plain  copy
 
 在CODE上查看代码片派生到个人代码片
  1. dbcc loginfo  


 
最重要的语句居然忘了,这能够查看日志空间的重复使用正在等待最后一个检查点的描述.。发现是REPLICATION
[sql]  view plain  copy
 
 在CODE上查看代码片派生到个人代码片
  1. SELECT name,log_reuse_wait_desc FROM sys.databases where name='dbname'  

 
这个数据库以前有做为事物同步过,可是都删除了。分发库也不存在了,如今居然还有日志在等待?!
 
 
参考 http://bbs.csdn.net/topics/390674731?page=1 ,执行删除全部复制对象。

 

[sql]  view plain  copy
 
 在CODE上查看代码片派生到个人代码片
  1. --删除当前数据库中全部复制对象  
  2. EXEC sp_removedbreplication dbname  

 

 

再看日志重用状态,正常了!看来有效!sql



在收缩数据库,查看已经收缩了!其余也恢复正常!数据库

 

[sql]  view plain  copy
 
 在CODE上查看代码片派生到个人代码片
  1. DBCC SHRINKFILE (N'dbname_log' , 0, TRUNCATEONLY)  
  2. GO  
  3. DBCC LOGINFO  
  4. GO  
  5. DBCC OPENTRAN (dbname)   
  6. GO  
 


 

 
 
 
 
 
 http://blog.csdn.net/kk185800961/article/details/41865073
相关文章
相关标签/搜索