缩减TEMPDB
第 1 個方法
這個方法必須重新啟動 SQL Server
1.
停止 SQL Server。開啟命令提示 (DOS) 視窗,以 sqlservr -c -f
指令啟動 SQL Server。這些參數會使 SQL Server 以最基本的組態模式啟動,其中資料檔的 Tempdb 大小為 1 MB,記錄檔為 0.5 MB。
注意: 如果您所用的 SQL Server 名叫 instance,則必須變更為適當的目錄 (Program Files\Microsoft SQL Server\MSSQL$instance name\Binn\),並且使用 "-s" 參數 (-s%instance_name%)
2.
以 Query Analyzer 連接 SQL Server,並且執行下面這個 T-SQL 指令: ALTER DATABASE tempdb MODIFY FILE (NAME = 'tempdev', SIZE = target_size_in_MB) --Deisred target size for the data file ALTER DATABASE tempdb MODIFY FILE (NAME = 'templog', SIZE = target_size_in_MB) --Desired target size for the log file
3.
在命令提示視窗按 Ctrl-C,停止 SQL Server,將 SQLServer 重新啟動為服務,然後驗證實體檔案 tempdb.mdf 和 templog.ldf 的大小 不過這個方法只能在預設的 tempdb 邏輯檔案 tempdev 和 templog 上執行。如果 tempdb 加入了其他檔案,則可以在 SQL Server 重新啟動為服務之後,將它們縮減或移除。如果要縮減它們,請使用 DBCC SHRINKFILE ,這個指令是在個別的資料庫檔案上執行。我們將在第 3 個方法當中,提供更詳細的相關資訊。如果要移除它們,請使用附有 REMOVE FILE 選項的 ALTER DATABASE 指令來移除檔案,然後再使用附有 EMPTYFILE 選項的 DBCC SHRINKFILE 指令,來清除檔案。 第 2 個方法 您可以使用 DBCC SHRINKDATABASE 指令,縮減 tempdb 資料庫的整體大小。這個指令會收到參數 'target_percent',指定當資料庫縮減之後,您希望資料庫檔所剩下的可用空間比例。這個方法也可能需要重新啟動 SQL Server。 1.
以 sp_spaceused 指令判斷 tempdb 中目前用掉多少空間,然後計算剩下的可用空間比例,將它作為 DBCC SHRINKDATABASE 的參數,這項計算作業是以您所希望的資料庫大小為根據。 注意:在某些情況下,可能得執行 sp_spaceused @updateusage=true 來重算已經使用的空間,以產生最新報告。有關本指令的詳細資訊,請參閱 SQL Server Books On-Line。
現在讓我們參考一個範例。假設 tempdb 有兩個檔案,主要資料檔 (tempdb.mdf) 的大小是 100 MB,記錄檔 (tempdb.ldf) 是 30 MB。假設 sp_spaceused 報告主要資料檔當中含有 60 MB 的資料。現在我們要把主要資料檔縮減為 80 MB。我們先計算所要的剩餘可用空間比例,80 MB - 60 MB = 20 MB,然後把 20 MB 除以 100 MB = 20%,這就是我們的 'target_percent'。在資料庫縮減之後,交易記錄檔也會隨之縮減,留下 20% 的可用空間。
2.
以 Query Analyzer 連接 SQL Server,然後執行下列 T-SQL 指令: dbcc shrinkdatabase (tempdb, 'target percent') -- this command shrinks the tempdb database as a whole
在 tempdb 資料庫使用 DBCC SHRINKDATABASE 有幾項限制。資料檔和記錄檔的目標大小,不能小於資料庫最初建立時所指定的大小,或是以檔案大小變更作業 (例如,執行附帶 MODIFY FILE 選項的 ALTER DATABASE ,或是 DBCC SHRINKFILE ) 明確設定的前一個大小。 DBCC SHRINKDATABASE 的另一項限制是必須計算 'target_pecentage',而且必須以目前所用的空間為依據。 重要事項: 在執行這個指令時,tempdb 資料庫不得進行任何活動。為了確定在執行 DBCC SHRINKDATABASE 時,不讓其他處理使用 tempdb,必須以單使用者模式重新啟動 SQL Server。其他詳細資訊,請參閱本文最後一節〈在 Tempdb 使用時執行 DBCC SHRINKDATABASE 或 SHRINKFILE〉。
第 3 個方法
您可以使用 DBCC SHRINKFILE 指令來縮減個別的 tempdb 檔案。這個指令比 DBCC SHRINKDATABASE 更有彈性,因為它可以用在單資料庫檔案,而不會影響該相同資料庫的其他檔案。同時, DBCC SHRINKFILE 會收到 'target size' 參數,代表您所指定的資料庫檔案最終大小。 1.
決定您希望的主要資料檔 (tempdb.mdf) 和/或記錄檔 (templog.ldf) 大小。這兩個檔案所用的空間,必須小於或等於所要的目標大小才行。 2.
以 Query Analyzer 連接 SQL Server,然後針對必須縮減的特定資料庫檔案,執行下列 T-SQL 指令: use tempdb go dbcc shrinkfile (tempdev, 'target size in MB') go -- this command shrinks the primary data file dbcc shrinkfile (templog, 'target size in MB') go -- this command shrinks the log file, look at the last paragraph.
DBCC SHRINKFILE 可以把檔案縮減到最初建立的大小以下,而且您可以對任何一個資料檔或記錄檔發出這個指令。不過,這個指令無法讓資料庫小於模型資料庫的大小。 SQL Server 7.0 會延遲交易記錄縮減作業,因此您必須發出記錄截斷/備份,幫助縮減作業的進行。不過,一般在預設的情況下,Tempdb 都會開啟 'trunc log on chkpt' 選項,因此您也不必發出記錄截斷指令。有關如何在 SQL Server 7.0 縮減資料庫交易記錄的詳細資訊,請參閱下文:
256650 (http://support.microsoft.com/kb/256650/ZH-TW/) INF:如何將 SQL Server 交易記錄檔壓縮
重要事項: 在執行這個指令時,tempdb 資料庫不得進行任何活動。為了確定在執行 DBCC SHRINKFILE 時,不讓其他處理序使用 tempdb,必須以單使用者模式重新啟動 SQL Server。其他詳細資訊,請參閱本文最後一節〈在 Tempdb 使用時執行 DBCC SHRINKDATABASE 或 SHRINKFILE 〉。
在 Tempdb 使用時執行 DBCC SHRINKDATABASE 或 SHRINKFILE
當 tempdb 資料庫正在使用時,如果此時以 DBCC SHRINKDATABASE 或 SHRINKFILE 來縮減它,就會發生多個下述類型的一致性錯誤,致使縮減作業失敗: Server: Msg 2501, Level 16, State 1, Line 1 Could not find table named '1525580473'. Check sysobjects. (伺服器:訊息 2501,等級 16,狀態 1,第 1 行找不到名為 '1525580473' 的表格。請檢查系統物件。)
或
Server: Msg 8909, Level 16, State 1, Line 0 Table Corrupt: Object ID 1, index ID 0, page ID %S_PGID. The PageId in the page header = %S_PGID. (伺服器:訊息 8909,層級 16,狀態 1,第 0 行表格損毀:物件 ID 1,索引 ID 0,網頁 ID %S_PGID。頁首中的網頁 ID = %S_PGID。)
雖然錯誤 2501 不一定表示 tempdb 受到任何損毀,不過卻會使用縮減作業失敗。而錯誤 8909 就表示 tempdb 受損了。這時候只要重新啟動 SQL Server,即可重建 tempdb,並且清除其一致性錯誤。 |


kerryyu
博客统计信息
热门文章
最新评论
友情链接