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
相關文章
相關標籤/搜索