縮小 SQL Server 2000 數據庫
我為這個冗長的問題道歉。當我成為事實上的 SQL 管理員時,我正在努力學習很多東西。我的任務是將生產數據庫移動到新伺服器。我的目標是進行完整備份並在新伺服器上恢復數據庫。我的問題集中在縮小數據庫的概念上。
我有一個近 3 TB 大小的生產數據庫。不再需要 5 張桌子。加起來 5 個表佔了將近 700GB。我的想法是在進行完整備份之前刪除 5 個表以節省大量空間(700gb)。我學得很快,這並不像聽起來那麼容易。我使用該
drop
命令刪除了 5 個表,但後來了解到刪除表實際上不會釋放任何空間。為了釋放空間,我必須縮小數據庫。這就是我遇到矛盾意見的地方。我正在閱讀您不想縮小數據庫,除非您必須這樣做。有人可以指出我正確的方向。既然我已經刪除了表,我應該在執行完整備份之前收縮數據庫嗎?縮小數據庫會有負面影響嗎?
讓我們通過幾個點。
1- 為什麼還要收縮?有什麼好處和壞處?
首先 700GB 的額外空間是否會導致任何問題?如果數據庫已經是 2.3TB,它可能會繼續增長,如果是這樣,那麼考慮只留下空間。事實上,如果數據庫仍在增長,您希望數據庫中有可用空間!您不希望它經常擴展,因為這會導致物理文件碎片並在它增長時導致阻塞/性能問題,除非您有Instant File Init。啟用,則阻塞/鎖定問題在很大程度上被否定。
當您進行備份時,那些空閒的 700GB 並沒有實際複製到備份中,只是指向空頁的指針,這些空頁將在還原時填充,因此這樣做不會減少備份時間、還原時間、備份空間,但會佔用還原空間。唯一會影響還原時間的情況是您沒有啟用即時文件初始化並且您的 SQL Server 服務使用者不是管理員。
再次重新索引將增加它的可用空間以保存臨時資訊等,但同樣,如果您最終增長並使用該可用空間,那麼就沒有問題了。
也許如果您要恢復到沒有那麼多空間的較小的開發伺服器,那麼這將是值得的。
2-收縮或不收縮
現在假設您絕對需要減小數據庫大小,然後閱讀Paul Randal 的關於移動到不同文件組而不是縮小的文章。這可確保您的收縮不會產生額外的可用空間。如果您有一個聚集鍵,它也會重新排序基本聚集索引。
縮小數據庫的負面影響是碎片。總的來說,我盡量避免因此而縮小。如果您確實縮小了數據庫,請確保您在之後重新索引整個想法。儲存很便宜,但如果你已經是 3TB,你可能沒有太多選擇。只要知道,在你這樣做之後,性能就會受到很大的影響,直到重建索引(順便說一句,它會讓它膨脹很多)。我同意@Norla 的觀點,http: //dba.stackexchange.com 上的人們將為您提供更好的答案