30

30. Microsoft SQL伺服器管理

SQL Server自動設定功能

資料庫維護計劃

本章總結

使用適當的設定，並在資料庫中執行例行的維護任務，是讓伺服器最佳化的關鍵。本章中將學到 SQL Server 2000 中關於動態設定的特別功能，這些功能可簡化設定資料庫的程序。同時我們也將使用資料庫維護精靈（Database Maintenance Plan Wizard）製作資料庫的系統自動維護計劃，使資料庫保持在最佳狀態。

SQL Server 自動設定功能

SQL Server 內含自動化的功能，用於減少與設定和調節關聯式資料庫管理系統（RDBMS）有關的負荷。由於這些功能是從 SQL Server 7.0 發展出來的，SQL Server 7.0 的使用者對這些功能應該不陌生。本章我們會學習這些功能的運作、如何利用它們降低資料庫的工作量，以及在必要時消除自動化的功能設定。

動態記憶體管理

動態記憶體管理 （dynamic memory management）可讓 SQL Server 依據系統的規模分配記憶體大小，以便動態的管理緩衝快取區和程序快取區。由於 SQL Server 具動態記憶體管理功能，DBA 就不必手動控制快取區的大小。但在某些情況下，可能需要限制 SQL Server 所能使用的記憶體大小。

動態記憶體管理的運作

動態記憶體管理以不斷監視系統中可用實體記憶體的大小以達到管理的功能。SQL Server 依需要以及可使用記憶體的量，決定增加或減少 SQL Server 記憶體共用區（將在下個部分說明）。當記憶體大小還算固定時，這個功能就很實用；但是當記憶體被用於處理系統中 SQL Server 以外的其他程序時，就會因為 SQL Server 不斷改變記憶體的配置而產生問題。

如果一台電腦的系統主要就是用來作為 SQL Server 資料庫伺服器，就很適合使用動態記憶體管理。在這類系統中，在 SQL Server 處理範圍之外的動作，所用到的記憶體大小較固定，因此 SQL Server 會不斷的自動配置記憶體，使工作有效率地進行，這樣的配置會一直持續到沒有再多的實體記憶體可供配置。如果現有的處理程序不需要更多的記憶體，系統就會一直保持這樣的狀態。若另一個程序又需要用到記憶體，SQL Server 就會解除新程序所需的記憶體大小，並配置讓新的程序順利使用。

用來處理作業程序的電腦系統就不適合使用動態記憶體。由於記憶體的需求不斷改變，處理程序就必需時常增減記憶體。在這樣的系統下，記憶體的用量經常改變，SQL Server 就必須不斷地設定和撤銷記憶體的配置，增加系統的負擔，也使處理過程缺乏效率。如果能在 SQL Server 中以手動方式配置固定的記憶體大小，或是預設 SQL Server 可配置的最大與最小的記憶體容量，可使這類系統運作得更好，稍後在本章會有更詳細的說明。

不論使用的是動態或是手動來管理記憶體，系統運作的好壞要看記憶體的運用是否能發揮最大的效果。透過監視 SQL Server 的記憶體配置，可以確定記憶體的使用量是否固定的變更，或者一直保持在穩定的狀態。使用 Windows 2000 的效能監視器（Performance Monitor）可以監視記憶體，如 SQL Server 中的 Total Server Memory（KB效能計數器）。記憶體管理員（Memory Manager）物件會顯示 SQL Server 最近消耗的記憶體大小（KB）。

記憶體共用區

SQL Server 動態地配置和撤銷集區中的記憶體。記憶體共用區由下列元件的記憶體組成：

- 緩衝快取區 保留資料庫中已被記憶體讀取的資料頁面，緩衝快取區通常佔用了大部分的記憶體共用區。
- 連接記憶體 用在每個 SQL Server 的連接點。連接記憶體由可以持續追蹤每個使用者內容的資料結構所組成，包含了游標位置資訊、查詢參數值、以及預存程序資訊。
- 資料結構 含有關於鎖定和資料庫描述的全域資訊，包括有關鎖定擁有者、被鎖定的類型、和各種不同的檔案及檔案群的資訊。
- 紀錄快取區 用來保存被寫在交易紀錄中的交易資訊，也用在讀取當前寫入紀錄快取區的紀錄資訊。紀錄快取區提昇了紀錄寫入的效能，和緩衝快取區是不同的。
- 程序快取區 用來儲存 Transact-SQL 陳述式的執行計劃，並儲存程序執行時的所有步驟。

因為記憶體配置是動態的，如果可以以動態記憶體管理，記憶體共用區會不斷地增加或減少，而且記憶體共用區的五個區域也可以動態地改變各自的大小。這個功能是由 SQL Server 控制的。舉例來說，若記憶體的需求較多，就會有較多的 T-SQL 陳述式被儲存在程序快取區中，SQL Server 就會從緩衝快取區拿走一些記憶體給程序快取區使用。

使用附加記憶體

SQL Server 可以存取的記憶體大小要看 Windows 作業系統的使用量。Windows NT Server 4 支援 4GB 的記憶體，其中 2GB 用在使用者程序上，另外的 2GB 留給系統使用。這表示在 NT 4 中，SQL Server 可配置的記憶體限量在 2GB 之內。但是在 Windows NT Server 4 企業版中，每個程序處理所配置的虛擬記憶體空間比原先大了 50%（3GB）。可以做這樣的擴充是因為系統本身的配置減少到 1GB。用在程序處理的虛擬記憶體增加，因此可以將記憶體共用區的大小擴充到將近 3GB。要使用這個 Windows NT 4 企業版中的支援，您必須在 Boot.ini 的檔案啟動資料行中加入 / 3GB的標記，這可以透過控制台的系統圖示來完成。

對於 Windows 2000 作業系統的兩個版本，SQL Server 2000 企業版都可以用Windows 2000 Address Windowing Extensions（AWE）API 來提供更大的記憶體空間。在 Windows 2000 高階伺服器版中支援將近 8GB，而在 Windows 2000 Datacenter Server 中支援將近 64GB 的記憶體。AWE 只支援這兩種作業系統，無法支援 Windows 2000 專業版。（詳見本書

第二章 和< 線上叢書 >中的「在Windows 2000中使用AWE記憶體」。）

記憶體設定選項

下面 SQL Server 組態設定和記憶體配置有關。可以透過 SQL Server Enterprise Manager 或者 sp_configure 預存程序來設定組態。若要使用 sp_configure 來檢視這些組態，必須將 show advanced options 的選項設定成 1。

- awe enabled　讓 SQL Server 使用延伸記憶體（之前提過的 AWE 記憶體）。這選項只能在 SQL Server 企業版中使用，而且只能用 sp_configure 來設定。
- index create memory　限制在索引建立過程中排序的記憶體大小。index create memory 選項是自設的，大部分情況下它不需要調整。但是如果建立索引時遇到困難，可能要試著在預設值上增加選項的值。
- max server memory　設定 SQL Server 可以分配給記憶體共用區的最大記憶體空間。如果 SQL Server 要動態地配置和撤銷記憶體，就留下預設值設定；如果要靜態地配置記憶體（因此使用空間不變），可將這個選項和 min server memory 設定成相同的值。
- min memory per query　指定分配給執行查詢的最小記憶體空間（KB）。
- min server memory　設定 SQL Server 可以分配給記憶體共用區的最小記憶體空間，留下預設值給動態記憶體配置。如果要靜態地分配記憶體，可將這個選項設成和 max server memory 相同的值。
- set working set size　指定 SQL Server 分配的記憶體不能交換，即使其他程序可以更有效地使用記憶體。當 SQL Server 可以動態配置記憶體時，不應該使用 set working set size 選項。它應該只用於 min server memory 和 max server memory 設成相同數值時。這樣一來，SQL Server 將分配無法變更的靜態記憶體大小。

  說明

  要發揮 AWE 的記憶體選項的優勢，必須將 SQL Server 2000 企業版與 Windows 2000 高階伺服器版或 Windows 2000 資料中心伺服器版一起執行。

  其他動態設定選項

  有些動態設定選項並不屬於伺服器記憶體，在 SQL Server 中也可使用。若保留這些選項的預設值，SQL Server 將動態地設定所有選項。預設值可以覆寫，雖然這並非必要，但您仍應該知道使用手動設定時這些選項如何運作。

  使用 SQL Server Enterprise Manager 或 sp_configure 來設定選項（並不是所有的選項都可以透過 Enterprise Manager 來設定）。用 sp_configure 設定選項，在命令提示視窗中開啟 Query Analyzer或 osql 連線，用參數執行預存程序如下：

      sp_configure "option name", value

  參數 option name 就是設定選項的名稱，而 value 就是要設定的數值。如果執行命令時沒有包含參數值，SQL Server 會回傳給指定選項當前的值。要看所有選項的清單和它們的值，直接執行 sp_configure，不需任何參數。有些選項被視為進階選項。為了用 sp_configure 來檢視和設定這些選項，您必須先將 show advanced options 設定為1，語法如下：

      sp_configure "show advanced options", 1

  透過 Enterprise Manager 設定的選項不受 show advanced options 的影響。

  在 Enterprise Manager 中，選擇伺服器後按下滑鼠右鈕，在快顯功能表中選擇 內容 進入 SQL Server屬性（組態） 視窗，如圖30-1所示。

  圖30-1　Enterprise Manager 中屬性視窗的一般頁籤

  在視窗的頁籤可存取某些動態選項。接下來的章節中將描述 SQL 和記憶體無關的動態選項，並說明這些選項是否可在 Enterprise Manager 上設定，以及在哪裡找到這些選項。

  鎖定選項

  SQL Server 根據當前的需求來動態地設定系統中使用鎖定的數量大小。您可以設定可用數量的最大值，限制 SQL Server 用在鎖定上的記憶體數量。預設設定為 0，這允許 SQL Server 根據系統需求，動態地要求分配和撤銷鎖定。SQL Server 允許記憶體最高有 40% 用在鎖定上。保持 locks 參數為預設值 0，並允許 SQL Server 根據需要分配鎖定。這個選項是進階選項，並且只能用 sp_configure 設定。

  復原間隔選項

  復原間隔表示 SQL Server 回復資料庫所需要的每資料庫最大分鐘數。（請參閱本章中 < 自動檢查點 > 一節。）SQL Server 回復資料庫需要的時間要看最後一次的檢查點何時發生。因此復原間隔（recovery interval）的值是 SQL Server 用來動態地決定何時執行自動檢查點。

  舉例來說，每次 SQL Server 關閉時，檢查點會在所有資料庫中執行，因此當SQL Server 再度啟動，只需一點點時間復原。但如果 SQL Server 被強制停止（由於電源中斷或其他失誤），SQL Server 要再啟動時，它將退回那些沒有提交的交易來回復資料庫，進行那些已經提交但在 SQL Server 停機時還沒寫入到磁碟中的交易。如果在特定的資料庫中最後檢查點正好在系統失誤前執行的話，資料庫的回復時間較短；如果最後檢查點在系統失誤之前很久的時間執行的話，回復時間較長。

  SQL Server 根據內建路徑和復原間隔的設定來決定多久執行一次檢查點。例如，如果將復原間隔設定為 5，SQL Server將 在每個資料庫執行檢查點， 這樣資料庫在失誤後的回復時間約需五分鐘。復原間隔的預設值為 0，表明由 SQL Server 自動設定。使用預設值時，回復時間少於1分鐘，而且檢查點幾乎每分鐘執行一次。很多情況下，檢查點頻繁執行會造成的效能降低。因此，大部分的時候您應該增加復原間隔的值來減少檢查點的數量。您選擇的值將視企業需求而定，看使用者在系統失誤之後可以等多久。一般說來，設定 5~15 的值就行了（表示回復時間為 5~15 分鐘）。

  復原間隔選項是進階選項。可以在 Enterprise Manager 中的屬性視窗設定。點選 資料庫設定 頁籤，如圖30-2所示。在 復原間隔（分鐘） 方塊中輸入一個值。

  圖30-2　設定回復時間

  使用者連接選項

  SQL Server 動態設定使用者連接數，最多允許 32767 個使用者連結。透過設定連線使用者選項，您可以指定允許進入 SQL Server 的最大值（允許的使用者連接數也受限於應用程式和硬體）。使用者連接仍可動態地設定成最大值。

  舉例來說，如果只有 10 個使用者登入，就分配 10 個使用者連接物件。如果達到最大值，而 SQL Server 還需要更多使用者連接的話，就會出現一個錯誤訊息，告知您使用者連接已達最大值。

  大部分的情況中，不需要改變連線使用者選項的預設值。注意每個連接約需要40KB 的記憶體。

  可以使用 SQL Server Query Analyzer，和下列的 T-SQL 陳述式來確定您的系統允許的使用者連接最大值：

      SELECT @@MAX_CONNECTIONS

  連線使用者選項是進階選項，可以在 Enterprise Manager 中設定。只要點選伺服器屬性視窗中的 連線 頁籤，並在 使用者同時連線最大值 微調方塊中輸入一個數值，如圖30-3所示。

  圖30-3　設定使用者連結

  開啟物件選項

  開啟物件 （open objects）選項是進階選項，只能用 sp_configure 設定，指定可同時開啟的最大資料庫物件個數，如資料表、檢視表、預存程序、觸發程序、規則和預設值，都可以在同時間啟動。預設值 0 表示系統允許 SQL Server 動態地調整開啟物件的數量。建議保留預設值設定。如果您做了改變，而 SQL Server 需要比設定還多的開放物件，就會收到錯誤訊息，告知超過系統允許的開放物件數量。還有，每個開放物件會消耗一些記憶體，所以系統需要更多實體記憶體來支援開放物件的數量。

  統計

  系統需要資料列統計來增加查詢效能。SQL Server 能蒐集資料表資料列中和數值分布有關的統計資訊。Query Optimizer 利用這個資訊決定查詢的最佳執行方法。統計可以在兩種資料列中取得：索引的一部分和不在索引中而在查詢的述詞中使用。留下 SQL Server 設定的資料庫預設值，可使 SQL Server 自動建立兩種型式的統計。索引欄數據和索引同時建立，非索引欄數據則在需要查詢時建立（只有單一資料列而非多重資料列，如同稍後在 < 建立統計 > 這節所說明的一樣）。一旦統計舊了(一段時間沒有使用)，SQL Server 會自動將它們去除。

  建立非索引資料列和索引資料列時，SQL Server 只用了資料表中的資料樣本，而非每一資料行都用。這減少了作業的過度需求，但在某些情況下，樣本並不能正確地顯示資料的特徵，統計將不完全精確。

  在 Enterprise Manager 中，可以設定或取消資料庫自動建立統計的功能。首先開啟所選定的資料庫屬性視窗，點選 選項 頁籤，就會看見 自動產生統計資料 的核取方塊。（圖30-4顯示範例distributions資料庫的核取方塊）。這個選項由預設值挑選。

  圖30-4　distribution 資料庫的屬性視窗

  在資料庫的屬性視窗，也會看到 自動更新統計資料 的選項。這個選項說明SQL Server 在必要時將自動更新資料表資料列的統計。當資料表中大部分的數值改變時，這些統計就必須更新（透過更新、插入、或刪除操作）。當多數資料改變，當前的統計就比較不精確。SQL Server 將自動決定何時應該更新統計。如果您選擇撤除這個選項以建立統計的能力，您就必須使用手動執行任務，以確保資料庫運作得宜。以下章節會告訴您如何手動建立與更新統計。

  建立統計

  您可以在資料表的特定資料列中，使用 T-SQL 指令 CREATE STATISTICS 來手動建立統計。手動建立統計和自動建立不同。手動可讓您結合多重資料列的統計，產生如 複製值 和 相異值 的平均數。CREATE STATISTICS 的語法如下：

      CREATE STATISTICS stats_name ON
       　　table_name ( column [ , column... ] )
         [ [WITH [ FULLSCAN | SAMPLE SIZE PERCENT ]
         [ , NORECOMPUTE ]

  您必須提供您要建立的統計名稱、資料表名稱、和至少一個資料列名稱。可以指定多重資料列名稱來蒐集組合資料列的統計，但不能指定計算資料行或者 ntext、 text、or image 資料型別作為統計資料列。不管是完全掃描或個別取樣都可以用作統計蒐集。因為要掃瞄每資料行資料表，完全掃描花費的時間比個別取樣久，但它會比較精確。如果您使用個別取樣，您必須指定樣本資料的百分比。NORECOMPUTE 指定撤銷統計的自動更新能力，讓統計不再代表資料能否使用。

  您也許要在資料列中建立統計，一起用在查詢的述詞中。舉例來說，您可以在Northwind 資料庫 Employees 資料表的 FirstName 和 LastName 資料列中建立統計，用員工的姓氏和名字來搜尋員工資料。T-SQL 程式碼的用法如下：

      CREATE STATISTICS name
      ON Northwind..Employees (FirstName, LastName)
      WITH FULLSCAN, NORECOMPUTE

  這個陳述式計算 FirstName 和 LastName 資料列中所有資料行的統計，並撤銷統計的自動驗算功能。

  如果資料庫的所有資料表和所有資料列都用手動建立統計，卻不想一欄一欄鍵入CREATE STATISTICS 陳述式的話，可用 sp_createstats 預存程序。預存程序將在下個部分說明。

  sp_createstats

  您可以經由預存程序 sp_createstats，在使用者資料表中所有合適的資料列建立統計。尚未有統計的資料列都將建立統計。每組統計只會在一個單一資料列中。sp_createstats 的語法如下：

      sp_createstats [ 'indexonly' ]　[ , 'fullscan' ]
         [ , 'norecompute' ]

  indexonly 參數限定唯有索引內的資料列可以建立統計。fullscan 參數限定每一資料行都將執行完全掃瞄，而非隨機取樣。norecompute 參數限定不能在新的統計上自動更新統計。新的統計都以原先建立的資料列名稱命名。

  更新統計

  SQL Server 用預設值自動更新統計。您可以使用 UPDATE STATISTICS 命令來撤銷這個選項，改用手動更新統計。這個指令允許更新索引欄和非索引欄的統計。您也許要建立一個 UPDATE STATISTIC 的指令碼，然後定期執行指令碼，就像 SQL Server 的工作。這將有助於維持最新的統計，並且確保較好的查詢效能。（見

  第17章< 重建索引 > ，有更多關於語法和 UPDATE STATISTICS 選項的細節。）要設定或撤除特定統計的自動更新狀態，可用 sp_autostats 預存程序，說明如下：

  sp_autostats

  利用系統的預存程序 sp_autostats，可以設定或撤除特定統計的自動更新。執行程序不會造成統計更新；更確切地說，它決定該不該出現自動更新。預存程序要和一個兩個或三個參數一起呼叫：資料表名稱、選擇性標記和統計名稱。標記說明自動更新的狀態，並設定成 ON 或OFF。在資料表中顯示目前所有統計的更新狀態（索引欄和非索引欄統計），用指定的資料表名稱執行指令。下面指令顯示 Customers 資料表的統計狀態：

      USE Northwind
      GO
      sp_autostats Customers
      GO

  輸出顯示每個統計的名稱，不論自動更新設定在 ON 或OFF，或是最近的更新在何時。不要被輸出的第一資料列上 Index Name 標題困擾。它表示所有統計，不是只有索引而已。如果您不需手動關掉這些統計的更新，它們會顯示 ON 的狀態， 就像 SQL Server 的預設值。

  要撤除 Northwind 資料庫 Customers 資料表中所有統計的自動更新，必須使用下列指令：

      USE Northwind
      GO
      sp_autostats Customers, 'OFF'
      GO

  您可以將標記值設成 ON 讓自動統計更新再度運作。改變特定統計的狀態或者索引的統計資料，包括個別的統計名稱或索引名稱。例如下列指令能設定 PK_Customers 索引的自動統計更新：

      USE Nnorthwind
      GO
      sp_autostats Customers, 'ON', 'PK_Customers'
      GO

  Customers 資料表中所有其他統計的狀態將不改變。

  檔案成長

  使用 SQL Server 2000 時，您可以設定資料檔案依需要自動增長。這個功能很好用，因為它防止您不小心用完空間。然而不能因為這個功能就不監控資料庫大小，或是偶爾才執行一下容量規劃。您應該經常注意資料表的增長有多快。然後才能決定是否要定期刪除不必要的檔案（也許是一些資料表中的過期資料）。這麼一來，就能減緩資料表的增長。隨著資料表中資料數量的增加，查詢會花更多時間，效能層級就下降。建立資料庫時，設定自動檔案增長的標題（如 第九章 所提），您將學會如何變更現有資料庫的增長選項。自動檔案增長選項可在 Enterprise Manager 中設定。 跟著下面的步驟執行：

  1. 在 Enterprise Manager 左邊的窗格中，展開一個伺服器，選擇 資料庫 資料夾。在想要修改的資料庫上按下滑鼠右鈕（以修改 MyDB 資料庫為例），在快顯功能表中選擇 內容 進入資料庫的屬性視窗。
  2. 點選 資料檔案 頁籤(如圖30-5所示)，看看資料庫資料檔案的屬性。在 檔案屬性 中的選項是用來控制資料檔案的成長方式。要讓檔案自動增長，勾選 自動成長 核取方塊。如果讓檔案自動成長，應該設限讓檔案不會無限制地增長。

     圖30-5　MyDB 屬性視窗的資料檔案頁籤

     使用 檔案大小上限 中的選項指定檔案可成長的上限。點選 限制檔案成長 並在微調方塊中鍵入最大值。如果點選 不限制檔案成長 ，您會發現磁碟機子系統一不小心就裝滿資料，造成效能和操作問題。

     使用檔案增長區中的選項可以限定檔案增長的速度。如果點選 以MB表示 ，一旦資料檔滿了，SQL Server 會依指定數值增加大小。如果點選 以百分比表示 ，SQL Server 將依照目前大小的百分率來增加資料檔大小。

  3. 點選 交易記錄檔 頁籤(如圖30-6所示)，設定交易記錄的自動增長選項。這些選項的使用方法跟 資料檔案 頁籤相同，在這裡也應該為交易記錄檔案設限，檔案才不會無限制成長。

     圖30-6　MyDB 資料庫屬性視窗的交易記錄檔頁籤

  自動檔案增長功能在很多情況都很方便，只要確定您沒有讓檔案意外地消耗掉系統所有的磁碟空間。

  檢查點

  SQL Server 自動執行檢查點操作。檢查點的頻率會依指定的 SQL Server 設定選項中復原間隔的數值自動計算。這個選項指定系統失效事件發生時，您所要等待的資料庫回復時間（分鐘）。檢查點出現頻率必須足以確保系統回復時間少於指定的分鐘數。當 SQL Server 在 SHUTDOWN 陳述式或服務控制管理員中關閉時，檢查點也會自動出現。您也可以用 CHECKPOINT 陳述式手動設立檢查點。

  如果想要系統執行最佳化，而且又能允許很長的回復時間的話，可以將復原間隔設成很大的值，例如 60。這代表要是系統失效，要花 60 分鐘才能完成自動回復。檢查點出現造成大量磁碟寫入，它們會從使用者交易中取走處理資源，因而減慢使用者的回應時間。這就是執行較少的檢查點經常可以協助改善所有交易效能的原因。當然，這個值設太高，系統一失效的話，就會導致過長的停機時間。一般的復原間隔設定介於 5 到 15 分鐘之間。

  復原間隔的預設值為 0。這個設定允許 SQL Server 依據系統負載來決定執行檢查點的最佳時間。一般說來，使用預設值時，檢查點約每分鐘執行一次。如果您注意到檢查點經常出現，可能就要調整復原間隔設定。要確定 SQL Server 是否過度執行檢查點的話，就用 SQL Server 追蹤標記-T3502。這個標記使得檢查點資訊被寫在 SQL Server 錯誤記錄中。注意檢查點會出現在每個資料庫中。

  資料庫維護計劃

  維護計劃是一組任務，SQL Server 會自動在資料庫根據您指定的時間表執行。 維護計劃的目的在自動操作重要的管理任務，這樣工作就不會被忽略，並能減少 DBA 的手動工作量。您可以替每個資料庫建立個別的計劃，為單一資料庫建立多重計劃，或是為多重資料庫建立單一計劃。

  建立維護計劃時，您可以排定的四個主要管理任務類型是：

- 最佳化
- 完整性檢查
- 完整資料庫備份
- 交易紀錄備份

  執行這些任務對於維持良好效能和可回復的資料庫是很重要的。您的計劃所要包括的最佳化任務類型，取決於您的資料庫效能和使用率。執行完整性檢查是用來確保健全且一致的資料庫的好方法。還要有定期備份，以確保在系統失效或使用者錯誤的情況下，能夠回復資料庫。由於這些備份是如此的重要，您應該設立自動備份策略。我們稍後將在這個章節看到每個任務類型的更多細節。

  用 Database Maintenance Plan Wizard 建立一個維護計劃。本章節中，您將學會如何使用這個精靈，如何在維護計劃中顯示工作和如何編輯計劃。

  使用 Database Maintenance Plan Wizard 建立維護計劃

  依下列步驟執行資料庫維護計劃精靈：

  1. 用以下任一方式可啟動 資料庫維護計劃精靈 ：
     - 在 工具 功能表中選擇 資料庫維護計劃 。
     - 在左邊窗格中點選一個資料庫名稱，並在右邊窗格中的 維護 標題下點選 新增維護計劃 。如果沒看到 維護 標題，檢查是否在 檢視 功能表中選擇了 工作清單 。也許要向下捲動螢幕才看得到。
     - 點選一個資料庫名稱，在 工具 功能表中選擇 精靈 ，展開 選擇精靈 。

     對話方塊中的 管理 資料夾，然後選取 資料庫維護計劃精靈 。

     - 展開左邊窗格中的伺服器，展開 管理 資料夾，在 資料庫維護計劃 上按下滑鼠右鈕，從快顯功能表中選擇 新增維護計劃 。
     - 在資料庫名稱上按下滑鼠右鈕並選擇 所有工作 ，從快顯功能表上選取 維護計劃 。

     一旦你開啟精靈，你將會看到歡迎畫面，如圖30-7。

     圖30-7　「資料庫維護計劃精靈」的歡迎畫面

  2. 選擇 下一步 進入 選取資料庫 畫面，如圖30-8所示。選擇需要建立維護計劃的一個或多個資料庫。
  3. 選擇 下一步 進入 更新資料最佳化資訊 畫面，如圖30-9所示。可為剛剛建立的資料庫選擇最佳化類型：
     - 重新組織資料及索引頁 這個選項用特定的填滿因數（或者每頁的可用空間數）來改善更新的效能，除去或再造資料庫中所有資料表的索引。唯讀資料表就不需要這個頁面。對於經常插入或更新的資料表來說，索引頁中最初的可用空間會開始填滿，頁面也開始拆分。選擇這個選項可以重建索引，替未來的檔案增長重新建立可用空間，避免頁面拆分時造成的延遲和資料佔用。

     圖30-8　選擇資料庫畫面

     您可以選擇根據可用空間的原始大小來重建索引，或者您可以指定一個新的保持空白頁面比率。如果您設定的比率太高，就必須冒著資料讀取效能降低的風險。如果您選擇這個選項，就不能選下一個 Update Statistics Used By Query Optimizer 選項。

     提示

     移除與重建索引會比用 DBCC DBREINDEX 花時間， 正如 第17章< 重建索引 > 所討論的一樣。您也許會想建立自己的工作來重建索引，而不使用這個選項。

     圖30-9　更新資料最佳化資訊畫面

     - 更新查詢最佳化所使用的統計資料 選擇這個選項可使SQL Server 重新取樣資料庫中所有索引的分布統計。它用這個資訊來選擇查詢的最佳執行計劃。如果不必為了更新統計而改變預設選項（本章前面曾說明過），SQL Server 會自動產生統計，用相對應於每個索引的資料表中資料較小的比率來採樣。

       這個選項可用來強制 SQL Server 執行另一個採樣，使用較大比率的指定資料，或者決定多久 SQL Server 應該更新統計，而不是任由它決定。越大比率的資料採樣，統計就越精確，但 SQL Server 也要花更多時間來產生統計。當索引欄中的資料被大量修改時，這個資訊有助於改善效能。您可以用 SQL Server Query Analyzer 檢驗查詢的執行計劃，確定索引是否有效地使用，確定是否有必要選擇這個選項。如果選了這個選項，就不能選之前 Reorganize Data And Index Pages 的選項。

     - 從資料庫檔案中移除尚未使用的空間 這個選項可用來移除未使用的空間；這個過程也就是我們所知的檔案收縮（file shrink）。可以指定應該有多大的未用空間才進行壓縮，以及壓縮之後要有多少比率的空間應該保留。一旦移除了可用空間，您可以用 DBCC SHRINKFILE 來縮減檔案大小，如果需要的話，還能讓它比剛建立時還小。這讓之前被檔案佔用的磁碟空間可用於其他需要的地方。還有，移除未使用空間的壓縮資料可以提高效能。在唯讀資料表中，壓縮是不必要的。

       可以選擇 變更 按鈕進入 編輯重複執行作業排程 ，指定任務的執行時間，如圖30-10所示。這些任務可以在系統使用率較低執行（如週末或晚上），因為它們需要花較多時間完成，可能會延遲回應使用者的時間。

  4. 選擇 下一步 進入 資料庫完整性檢查 畫面，如圖30-11所示。這個畫面中，可以選擇是否要執行完整性檢查。完整性檢查會執行 DBCC CHECKDB 指令來檢驗資料表和索引的配置與結構完整性（如果選擇索引選項）。您可以選擇檢查中是否包括索引、SQL Server 是否應該修復發現的小問題（建議選擇這個選項）、以及是否應該在備份之前執行所有的完整性檢查。 如果選擇在備份前執行檢查，並在檢查時發現問題，那麼將不執行備份。點選 Change 來改變這些任務的執行時間。完整性檢查可能花好幾個小時執行， 這取決於您的資料庫大小。因此要確定將它們安排在資料庫使用率較低時執行。檢查應該定期執行，也許每週或每月一次，或是在資料庫備份前進行。

     圖30-10　編輯重複執行作業排程對話方塊

     圖30-11　資料庫完整性檢查畫面

  5. 選擇 下一步 進入 指定資料庫備份計劃 畫面，如圖30-12所示。這個畫面可以選擇是否要建立自動備份計劃（建議使用這個計劃）。勾選 將資料庫備份視為維護計劃的一部份 ，即可以建立自動備份（ 第32章 有關於備份的詳細說明）。您可以指示 SQL Server 在完成時檢驗備份的完整性。SQL Server 會確定備份完成，而且所有的備份內容都能存取。您也可以指示備份是否要先儲存在磁帶或磁碟上。點選 Change 來改變備份的執行時間。
  6. 選擇 下一步 進入 指定備份磁碟目錄 畫面，如圖30-13所示。只有當您在上個畫面中指定備份到磁碟上，才會出現這個畫面。如果指定備份到磁帶，畫面就不會出現。這裡可以指定備份檔案的位置，也可以使用預設的備份目錄。如果所要備份的不只一個資料庫（如 master、model、msdb），就將每個資料庫備份放在它所屬的子目錄下，讓備份檔系統化。可以選擇自動刪除某段時間的備份檔來挪出磁碟空間，並可以指定備份檔案的副檔名。

     圖30-12　指定資料庫備份計劃畫面

     圖30-13　指定備份磁碟目錄畫面

  7. 選擇 下一步 進入 指定交易記錄檔備份計劃 ，如圖 30-14 所示。這個畫面和圖 30-12 的 指定資料庫備份計劃 畫面類似，不過這個畫面的選項是用來建立備份交易紀錄。交易紀錄備份應該在資料庫備份之間執行。要回復從上次資料庫備份至今的任何變更，可以用交易紀錄備份。換句話說，交易紀錄備份讓您回復資料庫備份之間的資料。

     圖30-14　指定交易記錄檔備份計劃畫面

     如果您選擇在磁碟上儲存備份，下一個會看到的畫面是 指定交易記錄檔備份磁碟目錄 ，在這個畫面中可以提供備份檔案位置資訊。

  8. 選擇 下一步 進入 產生報告 畫面，如圖 30-15 所示。這個畫面提供您建立報告的選項，包含維護計劃任務執行的結果。在這個畫面中，您也可以選擇儲存報告的位置、刪除超過某日期的報告，並可以用電子郵件傳送這份報告到指定的位址。
  9. 選擇 下一步 進入 維護計劃歷程記錄 畫面（圖30-16）。這裡可以選擇維護歷史報告是否要寫入本機伺服器的資料庫資料表中，還可以設定報告的最大容量。您也可以將報告寫入遠端伺服器並指定報告的最大容量。

     圖30-15　產生報告畫面

     圖30-16　維護計劃歷程記錄畫面

  10. 選擇 下一步 進入 完成資料庫維護精靈 畫面，如圖30-17所示。這個畫面顯示維護計劃的摘要。這個計劃有個預設的名稱，但也可以在 計劃名稱 的文字方塊中鍵入指定名稱。檢查摘要，如果想要改變任何選項可以回去修改。如果計劃無誤，就選擇 完成 。

      圖30-17　完成資料庫維護精靈畫面

  在維護計劃中顯示工作

  維護計劃範例中，我們在四個類型裡各建立一個任務。要看工作列表或排程任務，就開啟 Enterprise Manager 左邊窗格中 管理 資料夾，展開 SQL Server代理程式 ，然後選擇 作業 ，如圖30-18所示。

  圖30-18　用維護計劃建立的作業

  編輯維護計劃

  要編輯維護計劃，先在 Enterprise Manager 左邊窗格上點選已建立的資料庫名稱，然後選擇右邊窗格中 維護 標題之下的計劃名稱（或許必須向下捲動才看得到標題），資料庫維護計劃的對話方塊就會出現，如圖 30-19 所示。

  完成資料修改後， 一般 頁籤允許指定哪些資料庫適用於維護計劃。其他的頁籤可改變原先 資料庫維護計劃精靈 中的設定。完成計劃修改時點選 確定 ，維護計劃就馬上依照新的安排開始進行。

  說明

  您必須讓 SQL Server Agent 從自動維護計劃開始依進度執行。詳情參見 第31章 。

  圖30-19　「資料庫維護計劃」對話方塊中的「一般」頁籤

  本章總結

  在這一章中，您已經學會 SQL2000 的動態設定功能，這個功能幫助您減少執行DBA 時資料庫的使用量。您也學會製作資料庫維護計劃，可以自動執行管理任務。下一章將告訴您如何使用 SQL Agent 來定義工作和警示。透過設定工作和警示，您可以讓管理任務的自動化更進一步。