共用方式為


SQLmaint 工具

適用於:SQL Server

sqlmaint 公用程式會在一或多個資料庫上執行一組指定的維護作業。 使用 sqlmaint 來執行 DBCC 檢查、備份資料庫及其交易日誌、更新統計數據並重建索引。 所有資料庫維護活動都會產生一份報告,您可以傳送到指定的文字檔、HTML 檔案或電子郵件帳號。 sqlmaint 執行先前版本 SQL Server 中建立的資料庫維護計畫。 若要從命令提示字元執行 SQL Server 維護計畫,請使用 dtexec 公用程式

重要

SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 建議改用 SQL Server 維護計畫功能。 欲了解更多維護計畫資訊,請參閱 維護計畫

語法

sqlmaint
[ -? ] |
[
     [ -S server_name [ \instance_name ] ]
     [ -U login_ID [ -P password ] ]
     {
          [ -D database_name | -PlanName name | -PlanID guid ]
          [ -Rpt text_file ]
          [ -To operator_name ]
          [ -HtmlRpt html_file [ -DelHtmlRpt <time_period> ] ]
          [ -RmUnusedSpace threshold_percentfree_percent ]
          [ -CkDB | -CkDBNoIdx ]
          [ -CkAl | -CkAlNoIdx ]
          [ -CkCat ]
          [ -UpdOptiStats sample_percent ]
          [ -RebldIdx free_space ]
          [ -SupportComputedColumn ]
          [ -WriteHistory ]
          [
               { -BkUpDB [ backup_path ] | -BkUpLog [ backup_path ] }
               { -BkUpMedia
                    { DISK [
                           [ -DelBkUps <time_period> ]
                           [ -CrBkSubDir ]
                           [ -UseDefDir ]
                          ]
                     | TAPE
                    }
               }
               [ -BkUpOnlyIfClean ]
               [ -VrfyBackup ]
          ]
     }
]
<time_period> ::=
number [ minutes | hours | days | weeks | months ]

引數

用空格分隔參數和它們的值。 例如,在 和 之間加入空格-Sserver_name

-?

回傳 sqlmaint 的語法圖。 單獨使用這個參數。

-S server_name[\instance_name]

指定 SQL Server 的目標實例。 指定 <server_name> 連接到該伺服器上的 SQL Server Database Engine 預設實例。 指定 <server_name>\<instance_name> 連接到該伺服器上的一個命名的資料庫引擎實例。 如果你沒有指定伺服器, sqlmaint 會連接到本地電腦上的預設資料庫引擎實例。

-U login_ID

指定連接伺服器時要使用的帳號。 如果你沒有提供這個參數, sqlmaint 會嘗試使用 Windows 認證。 若 login_ID 包含特殊字元,則以雙引號"()包圍;否則雙引號為可選。

重要

儘可能使用 Windows 驗證。

-P 密碼

指定 login_ID的密碼。 這個參數只有在你同時提供該 -U 參數時才有效。 若 密碼 包含特殊字元,請以雙引號包圍;否則,雙引號則為可選。

重要

密碼沒有被遮蔽。 儘可能使用 Windows 驗證。

-D database_name

指定要執行維護作業的資料庫名稱。 若 database_name 包含特殊字元,則用雙引號包圍;否則,雙引號則為可選。

-PlanName 名稱

指定利用資料庫維護計畫精靈定義的資料庫維護計畫名稱。 sqlmaint 從計畫中唯一使用的資訊是計畫中資料庫的清單。 您在其他 sqlmaint 參數中指定的任何維護活動,都會套用到此資料庫清單。

-PlanID 指南

指定利用資料庫維護計畫精靈定義之資料庫維護計畫的全域唯一識別碼 (GUID)。 sqlmaint 唯一使用的資訊是計畫中資料庫的清單。 您在其他 sqlmaint 參數中指定的任何維護活動,都會套用到此資料庫清單。 此值必須與 中的plan_id值相符msdb.dbo.sysdbmaintplans

-Rpt text_file

指定產生報告的完整路徑與檔案名稱。 報表也會出現在畫面中。 這份報表會在檔案名稱中附加日期來維護版本資訊。 日期產生方式如下,位於檔名末尾但期間之前,形式為 _<yyyyMMddhhmm><yyyy> = 年, <MM> = 月, <dd> = 日, <hh> = 小時, <mm> = 分鐘。

如果您在 1996 年 12 月 1 日的 10:23 A.M. 執行這個公用程式,則 text_file 值如下:

C:\Program Files\Microsoft SQL Server\MSSQL\Backup\AdventureWorks2022_maint.rpt

產生的檔案名稱如下:

C:\Program Files\Microsoft SQL Server\MSSQL\Backup\AdventureWorks2022_maint_199612011023.rpt

sqlmaint 存取遠端伺服器時,需要 text_file 的完整通用命名慣例 (UNC) 檔案名稱。

-給 operator_name

指定將接收 SQL Mail 所產生之報表的操作員。

-HtmlRpt html_file

指定 HTML 報告產生的完整路徑與檔案名稱。 SQLmaint 透過在檔名後附加格式 _<yyyyMMddhhmm> 字串來產生檔案名稱,就像它對 -Rpt 參數所做的一樣。

sqlmaint 存取遠端伺服器時,需要 html_file 的完整 UNC 檔案名稱。

-DelHtmlRpt <time_period>

若報告檔案建立後的時間間隔超過 time_period,則刪除報告目錄中的任何 HTML 報告。 -DelHtmlRpt 尋找名稱符合由 html_file 參數產生的模式的檔案。 若 html_fileC:\Program Files\Microsoft SQL Server\MSSQL\Backup\AdventureWorks2022_maint.htm,則 -DelHtmlRptsqlmaint 會刪除所有名稱符合模式 C:\Program Files\Microsoft SQL Server\MSSQL\Backup\AdventureWorks2022_maint*.htm 且比指定 time_period更舊的檔案。

-Rm未使用空間 threshold_percent free_percent

指定將未使用的空間從-D指定的資料庫中移除。 這個選項只適用於定義成自動成長的資料庫。 Threshold_percent 會以 MB 為單位來指定大小,一旦資料庫到達此大小之後, sqlmaint 便會嘗試移除未使用的資料空間。 在資料庫大小小於 threshold_percent 時,則不會採取任何動作。 Free_percent 會指定必須保留在資料庫中的未使用空間大小,指定的方式是資料庫最終大小的百分比。

例如,如果 200 MB 資料庫包含 100 MB 的資料, free_percent 指定 10 會使最終資料庫大小成為 110 MB。 如果資料庫小於 free_percent 加上資料庫中的資料量,則不會被擴充。 例如,若一個 108 MB 的資料庫有 100 MB 的資料,將 free_percent 指定為 10 並不會將資料庫擴展至 110 MB;目前仍維持在 108 MB。

-CkDB |-CkDBNoIdx

指定 DBCC 的 CHECKDB 陳述式,或 DBCC CHECKDB 帶有 選項 NOINDEX 的陳述式,在指定的 -D資料庫中執行。

在執行時,如果資料庫正在使用中,sqlmaint 會將警告寫入 text_file

-CkAl |-CkAlNoIdx

指定一個帶有選項NOINDEX 語句在指定的-D資料庫中執行。

-CkCat

指定 DBCC 的 CHECKCATALOG 陳述式在指定的 -D資料庫中執行。

-更新OptiStats sample_percent

指定在資料庫中的每個資料表上執行以下陳述:

UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT;

如果表格包含計算出的欄位,使用時也必須指定參數-SupportedComputedColumn-UpdOptiStats

如需詳細資訊,請參閱更新統計資料

-RebldIdx free_space

指定應該利用 free_space 百分比值作為填滿因數的反項,藉以重建目標資料庫中各資料表的索引。 例如,如果 free_space 百分比是 30,則使用的填滿因數就是 70。 若指定 free_space 百分比值為100,則索引會以原始填充因子重新建立。

如果索引位於計算欄位上,您在使用-RebldIdx時也必須指定-SupportComputedColumn參數。

-SupportComputedColumn(支援計算欄位)

必須指定使用 sqlmaint 才能對計算欄位執行 DBCC 維護指令。

-寫入歷史

規定每次由 sqlmaint 執行的維護動作,都會在 msdb.dbo.sysdbmaintplan_history 中建立一個項目。 若指定 -PlanName-PlanID,則 sysdbmaintplan_history 中的項目將使用指定計畫的 ID。 若指定 -D,則 sysdbmaintplan_history 中的條目會將計畫 ID 設為零。

-BkUpDB [ backup_path ] |-BkUpLog [ backup_path ]

指定備份動作。 -BkUpDb 備份整個資料庫。 -BkUpLog 只備份交易日誌。

backup_path 會指定備份目錄。 如果也指定了,則不需要-UseDefDir;-UseDefDir如果兩者都指定,則覆蓋backup_path。 備份可以放在目錄或磁帶裝置位址中(例如, \\.\TAPE0)。 資料庫備份的檔案名稱會依照下列方式自動產生:

dbname_db_yyyyMMddhhmm.BAK

Where:

  • <dbname> 是被備份資料庫的名稱。
  • <yyyyMMddhhmm> 是備用運算的時間,其中 <yyyy> = 年、 <MM> = 月、 <dd> = 日、 <hh> = 小時、 <mm> = 分鐘。

交易備份的檔案名稱也會利用類似的格式自動產生:

dbname_log_yyyymmddhhmm.BAK

如果你使用參數 -BkUpDB ,也必須用參數 -BkUpMedia 來指定媒介。

-BkUpMedia

指定備份的媒體類型,或 DISKTAPE

DISK

指定備份媒體是磁碟。

-DelBkUps <time_period>

對於磁碟備份,規定如果備份建立後的時間間隔超過 time_period,則備份目錄中的任何備份檔案都必須刪除。

-CrBkSubDir

對於磁碟備份,指定在 backup_path 目錄或預設備份目錄中建立子目錄(若 -UseDefDir 另有指定)。 子目錄名稱由資料庫 -D名稱中指定產生。 -CrBkSubDir 提供一種簡單的方法,可以將不同資料庫的所有備份放到不同的子目錄中,無需更改 backup_path 參數。

-使用DefDir

對於磁碟備份,指定在預設備份目錄中建立備份檔。 若兩者皆被指定,則 UseDefDir 將覆寫 backup_path。 預設的 SQL Server 設定中,預設備份目錄為 C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup

磁帶

指定備份媒體是磁帶。

-bkUpOnlyIfClean(如果乾淨)

指定只有在指定 -Ck 檢查未發現資料問題時才會進行備份。 維護動作會依照它們在命令提示字元下所呈現的順序來執行。 如果你也要指定-BkUpOnlyIfClean參數,請在指定-CkDB-CkDBNoIdx-CkAl-CkAlNoIdx-CkTxtAl-CkCat之前指定-BkUpDB-BkUpLog參數。 如果未指定這些參數,無論檢查是否回報問題,備份都會進行。

-VrfyBackup

指定在備份完成時執行RESTORE VERIFYONLY

數字 [ 分鐘 | 小時 | 日 | 週 | 月 ]

指定一個時間間隔來決定報表或備份檔經過多久時間之後便可刪除。 number 是後面接著時間單位的一個整數 (不含空格)。 有效範例:

  • 12weeks
  • 3months
  • 15days

如果你只指定 數字,預設日期部分是 weeks

備註

sqlmaint 公用程式會在一或多個資料庫上執行維護作業。 如果你指定 -D,該工具只會在指定的資料庫上執行剩餘交換器中指定的操作。 如果你指定 -PlanName-PlanIDsqlmaint 從指定的維護計畫中取得的唯一資訊就是該計畫中的資料庫清單。 從計畫中所取得清單中的每個資料庫,皆會套用剩餘sqlmaint參數所指定的所有作業。 sqlmaint 工具不會套用計畫中定義的任何維護活動。

如果 sqlmaint 公用程式順利執行,就會傳回 0,如果失敗,則傳回 1。 如果出現以下情況,即報告失敗:

  • 任何維護操作都失敗了。

  • -CkDB-CkDBNoIdx-CkAl-CkAlNoIdx-CkTxtAl-CkCat檢查會發現資料有問題。

  • 發生了一般性故障。

權限

任何擁有 Read and Execute 權限的 sqlmaint.exe Windows 使用者都可以執行 sqlmaint 工具。 預設情況下, sqlmaint.exe 會儲存在資料夾中 <X>:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER1\MSSQL\Binn 。 此外,你指定的 -login_ID SQL Server 登入必須具備執行指定動作所需的 SQL Server 權限。 如果你使用 Windows 認證連接 SQL Server,映射到已認證 Windows 使用者的 SQL Server 登入必須具備執行指定動作所需的 SQL Server 權限。

例如,使用-BkUpDB需要獲得執行BACKUP語句的權限。 要使用 -UpdOptiStats 參數,需擁有執行 UPDATE STATISTICS 陳述的權限。 如需詳細資訊,請參閱權限 (資料庫引擎)。

範例

A。 對資料庫執行 DBCC 檢查

這個範例會對資料庫進行 DBCC 檢查。

sqlmaint -S MyServer -D AdventureWorks2022 -CkDB -CkAl -CkCat -Rpt C:\MyReports\AdvWks_chk.rpt

B. 更新統計資料

此範例是利用計畫中所有資料庫中的 15% 樣本更新統計數據。 任何達到 110 MB 的資料庫都會被縮小,剩下 10% 空間。

sqlmaint -S MyServer -PlanName MyUserDBPlan -UpdOptiStats 15 -RmUnusedSpace 110 10

C. 備份所有資料庫

此範例使用預設 <X>:\Program Files\Microsoft SQL Server\MSSQLl13.MSSQLSERVER\MSSQL\Backup 目錄,將計畫中的所有資料庫備份到各自的子目錄。 它也會刪除超過兩週的備份。

sqlmaint -S MyServer -PlanName MyUserDBPlan -BkUpDB -BkUpMedia DISK -UseDefDir -CrBkSubDir -DelBkUps 2weeks

D. 備份資料庫

此範例將單一資料庫備份到預設 <X>:\Program Files\Microsoft SQL Server\MSSQLl13.MSSQLSERVER\MSSQL\Backup 目錄。

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir