sql server 刪除大量數據的一次坑爹之旅


  數據庫有1kw數據不在使用了,影響讀寫速度,於是要刪除掉

  使用delete語句

  意外發生,持續了半個小時后,依然不見結束的跡象

  於是強行結束(停止了服務)

  再打開服務后,數據庫顯示 【正在恢復】

  百度一下我就知道了

  於是,停下服務,剪切了數據到別的文件夾

  恢復服務

  刪除數據庫

  啟動服務

  附加數據庫

  1個小時候,附件完成(剛好中午吃飯去了)

  無知的我再次使用delete語句刪除

  兩個小時候,實在無法忍受,停止刪除

  數據庫顯示 正在恢復

  數據庫文件增大,mdf達到31g,log問價達到109g

  再次剪切文件到別的文件夾,啟動服務,刪除數據庫,啟動服務,附加數據庫

  1h后,sql 附加數據庫窗口崩潰

  本人崩潰

  再次停止服務

  剪切數據庫文件,啟動服務,刪除數據庫,停止服務,附加mdf,不要log文件,報錯無法附加

  百度

  停止服務,剪切數據庫文件,恢復服務,創建同名數據庫,停止服務,刪除同名數據庫mdf文件,將原有數據庫mdf覆蓋同名數據mdf文件

  打開服務,看到數據,為掛起狀態

  百度

  執行如下代碼

  

USE master
GO
ALTER DATABASE test SET SINGLE_USER
GO
ALTER DATABASE test SET EMERGENCY
GO
DBCC CHECKDB(test,REPAIR_ALLOW_DATA_LOSS)
go
ALTER DATABASE test SET ONLINE
GO
ALTER DATABASE test SET MULTI_USER
GO


來自:http://blog.csdn.net/zxr85/article/details/51943011

  半個小時后依然在執行狀態

  本人崩潰

  停止執行,數據庫此時已經 成為 單個用戶模式 

  崩潰,百度

  執行如下代碼

USE master;  
GO  
DECLARE @SQL VARCHAR(MAX);  
SET @SQL=''  
SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID)  
FROM master..sysprocesses  
WHERE dbid=DB_ID('數據庫名');  

EXEC(@SQL);
ALTER DATABASE 數據庫名 SET MULTI_USER;

代碼來自:http://www.cnblogs.com/amadeuslee/p/6608076.html

  數據庫單人模式解除

  刷新數據,奇跡發生了

  數據庫表可以訪問了,由於只有一個表,實際要保留的數據只有8w多,於是使用

  select   into  語句,將數據保存至臨時表,由於磁盤空間不足

  收縮數據庫  

  執行select into語句

  執行 truncate table  ,數據庫文件大小未變化

  收縮數據庫

    執行insert into select  

  一切搞定

  本次一系列操作都不是生產環境,是本地服務器上的數據

  本文中一系列操作僅供參考,文中奇跡發生的那一段,我同樣很蒙蔽,僅供參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM