none
可否單獨釋放TABLE的可用空間? RRS feed

  • 問題

  • 請教各位先進:

     

    資料庫:SQL SERVER 2000 SP4

    OS:WINDOWS SERVER 2003

     

    TABLE NAME=ABC 

    我執行:exec sp_spaceused  ABC 

    結果為:

    name       rows          reserved             data            index_size         unused

    ABC      188794    968840 KB      195632 KB    32736 KB        740472 KB

     

    其中 unused (未使用空間?剩餘空間?)就佔據了723MB

    不知道有沒有什麼方法可以把這些空間釋放出來還給作業系統?

     

    我試過 DBCC SHRINKDATABASE

    可是這應該只能釋放出頁尾的空間,而無法釋放出分頁中的空間?

    所以沒有效

     

    我之前的處理方式都是:

    1.將此TABLE匯出至另一個資料庫

    2.再將此TABLE DROP掉

    3.再重新匯入

     

    可是想請問各位先進有沒有其他更好的方法?

    因為這樣就必須在離鋒時間才能做處理,謝謝!

     

     

    小腸

    96.5.15

    2007年5月15日 上午 04:06

解答

  • 資料庫維護工作本來就多是在離峰時才處理。

    不然若干擾使用者的工作,你會被罵到比朱元璋(臭頭皇帝)還臭 ...

     

    回到你的問題。

    如果是要釋放在分頁中的 table space,目前看文件好像沒有辦法。

    你可以把你的工作用 JOB 來做週期執行,這樣你就不必手動去跑。

    可考慮使用 SSIS Package 方式來做。

    2007年5月15日 上午 04:13
    版主
  • 您好:
    如果該資料表擁有叢集索引(Clustered Index),可以考慮使用 DBCC DBREINDEX 。不過此時將會保留獨佔資料表鎖定,這會防止任何資料表存取作業。如果是 SQL Server 2005 可以改用 ALTER INDEX 搭配 ONLINE = ON 選項來規避這項限制。

    請注意:
    只有 SQL Server 2005 Enterprise Edition 能夠進行線上索引作業。
    2007年5月15日 下午 04:30
    版主

所有回覆

  • 資料庫維護工作本來就多是在離峰時才處理。

    不然若干擾使用者的工作,你會被罵到比朱元璋(臭頭皇帝)還臭 ...

     

    回到你的問題。

    如果是要釋放在分頁中的 table space,目前看文件好像沒有辦法。

    你可以把你的工作用 JOB 來做週期執行,這樣你就不必手動去跑。

    可考慮使用 SSIS Package 方式來做。

    2007年5月15日 上午 04:13
    版主
  • 您好:
    如果該資料表擁有叢集索引(Clustered Index),可以考慮使用 DBCC DBREINDEX 。不過此時將會保留獨佔資料表鎖定,這會防止任何資料表存取作業。如果是 SQL Server 2005 可以改用 ALTER INDEX 搭配 ONLINE = ON 選項來規避這項限制。

    請注意:
    只有 SQL Server 2005 Enterprise Edition 能夠進行線上索引作業。
    2007年5月15日 下午 04:30
    版主