我需要使用T-SQL在SQL Server 2005中刪除一個特定的數據庫。我知道刪除數據庫不能在數據庫trnsaction中完成。那麼,如果刪除一個真正巨大的數據庫時會發生一些意外的異常。超時例外。它會使我的數據庫處於不穩定狀態嗎?如果是的話,我該如何避免這種情況?什麼是以編程方式刪除大型數據庫的最佳方法
回答
取決於您如何運行t-sql,您可以在運行命令之前更改超時。 SSMS默認沒有超時,但可以將SqlCommand的CommandTimeout更改爲0(無超時)或較大的值。根據我個人的經驗,「drop database」失敗的運行並沒有阻止它成功的後續運行,所以雖然你可能會讓數據庫進入一個糟糕的狀態,但我不認爲它會在那裏仍然存在,但不可丟棄(但這只是我的經驗,誠然)
根據是否要刪除數據文件,我建議將數據庫設置爲single_user模式(如果要刪除文件)或脫機(不要刪除文件)並立即回滾,以防止其他連接阻止丟棄或導致失敗。
所以:
- ALTER DATABASE [富]集SINGLE_USER與回滾立即
- 或
- ALTER DATABASE [富]與回滾立即
- DROP DATABASE [富]設置爲脫機
請務必檢查drop database的各種行爲(如上所示)@http://msdn.microsoft.com/en-us/library/ms178613.aspx
刪除所有記錄在數據庫中,同時使數據庫結構到位,最好的辦法是:
- 使數據庫脫機;
- 禁用所有外鍵約束(如果強制執行參照完整性);
- 依次截斷每個表;
- 啓用所有外鍵約束(如果需要引用完整性);
- 刷新任何物化視圖;
- 重新分析數據庫(因爲之前的統計數據不再相關);
- 使數據庫重新聯機。
這一切都可以通過編程方式完成,但會根據您的數據庫供應商和版本而有所不同。對於SQL Server 2005(您的請求版本),請嘗試How to: Truncate Multiple Tables In SQL Server and the magic of sp_MSforeachtable。
這不應該讓數據庫處於無法使用的狀態,如果它失敗了,因爲它是以這樣的方式完成的,如果它意外停止,您可以重新運行它,它會繼續。
如果您嘗試使用數據庫,如果腳本過早完成,那麼您的數據庫完全有可能處於不一致的狀態(這是您脫機執行它的一半原因;另一個原因是爲了避免鎖定) 。
更新:如果您只是想完全刪除數據庫,請參閱How do I drop a SQL Server database?。它涉及到一個DROP DATABASE
命令,但有時您需要有效地使數據庫脫機。
分離數據庫,然後刪除文件。
重新連接之前,您無法訪問分離的SQL Server數據庫。 – 2009-12-29 09:11:42
正確,這不會有幫助,因爲它需要以編程方式完成。您無法訪問分離的SQL Server數據庫。可能會給你一個運輸級別的錯誤。 – 2009-12-29 09:33:28
- 1. 什麼是以編程方式使用Gmail的最佳方式?
- 2. 以非編程方式處理SQL Server數據的最佳方式是什麼?
- 3. 處理大型數據表的最佳方式是什麼?
- 4. 編寫訪問數據庫的方法的最佳方式是什麼?
- 5. 什麼是重構數據庫程序的最佳方式?
- 6. 訪問超大型數據庫的.Net的最佳方法是什麼?
- 7. 差異大數據列表的最佳方式,算法和方法是什麼?
- 8. 以編程方式添加和刪除視圖及其控制器的最佳方式是什麼?
- 9. 大量數據 - 發送它們的最佳方式是什麼?
- 10. 創建大量虛擬數據的最佳方式是什麼?
- 11. 什麼是全球同步大量數據的最佳方式?
- 12. 建立我的數據庫的最佳方式是什麼
- 13. 什麼是使用Delphi的Web數據庫的最佳方式?
- 14. 以編程方式測試SQL Server連接的最佳方式是什麼?
- 15. 以編程方式「塗抹」圖像的最佳方式是什麼?
- 16. 編輯XML文件數據的最佳方式是什麼?
- 17. 翻譯大量文本數據的最佳方法是什麼?
- 18. 什麼是製作字典數據庫的最佳方式
- 19. 什麼是「洗牌」數據庫記錄表的最佳方式?
- 20. 在Rails中建立數據庫的最佳方式是什麼?
- 21. 連接android和oracle數據庫的最佳方式是什麼?
- 22. 記錄mysql數據庫的最佳方式是什麼?
- 23. 什麼是歸檔postgres數據庫的最佳方式?
- 24. 用PHP搜索MySQL數據庫的最佳方式是什麼?
- 25. 從silverlight訪問oracle數據庫的最佳方式是什麼?
- 26. 什麼是保護數據庫查詢的最佳方式?
- 27. 處理SQLite數據庫的最佳方式是什麼?
- 28. 什麼是更新數據庫列表的最佳方式?
- 29. 保持數據庫版本的最佳方式是什麼?
- 30. 什麼是刪除模型對象數組的最快方法?
如果在使用TRUNCATE TABLE時存在引用鍵,則只需禁用(或刪除)約束,在這種情況下,如果表是關係中的父表,則重新啓用/添加約束的嘗試將失敗。 – 2009-12-29 09:09:48
@OMG:澄清了約束部分。 – cletus 2009-12-29 09:11:45
我甚至不想在服務器上留下數據庫結構,需要完全刪除數據庫。 – 2009-12-29 09:34:58