sqlmaint ユーティリティ

適用対象:SQL Server

sqlmaint ユーティリティは、1 つまたは複数のデータベース上で、指定された一連のメンテナンス操作を実行します。 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 の構文ダイアグラムが返されます。 このパラメーターは単独で使用する必要があります。

-Sserver_name[ \instance_name]
Microsoft SQL Server のターゲット インスタンスを指定します。 サーバー上の SQL Server データベース エンジンの既定のインスタンスに接続するには、server_name を指定します。 サーバー上のデータベース エンジンの名前付きインスタンスに接続するには、server_name\instance_name を指定します。 サーバーを指定しない場合、sqlmaint を使用すると、ローカル コンピューター上にあるデータベース エンジンの既定のインスタンスに接続できます。

-Ulogin_ID
サーバーに接続するときに使用するログイン ID を指定します。 指定しない場合、sqlmaint は Microsoft Windows 認証の使用を試みます。 login_ID に特殊文字が含まれる場合、特殊文字を二重引用符 (") で囲む必要があります。特殊文字が含まれない場合は、二重引用符は省略可能です。

重要

可能な場合は、Windows 認証を使用します。

-Ppassword
ログイン ID のパスワードを指定します。 -U パラメーターも指定されている場合にのみ有効です。 password に特殊文字が含まれる場合、特殊文字を二重引用符で囲む必要があります。特殊文字が含まれない場合は、二重引用符は省略可能です。

重要

パスワードはマスクされません。 可能な場合は、Windows 認証を使用します。

-Ddatabase_name
メンテナンス操作の実行対象となるデータベースの名前を指定します。 database_name に特殊文字が含まれる場合、特殊文字を二重引用符で囲む必要があります。特殊文字が含まれない場合は、二重引用符は省略可能です。

-PlanNamename
データベース メンテナンス プラン ウィザードを使用して定義される、データベース メンテナンス プランの名前を指定します。 sqlmaint が使用するプランの情報は、プラン内のデータベースのリストのみです。 他の sqlmaint パラメーターに指定するすべてのメンテナンス操作は、このデータベースのリストに適用されます。

-PlanIDguid
データベース メンテナンス プラン ウィザードを使用して定義される、データベース メンテナンス プランのグローバル一意識別子 (GUID) を指定します。 sqlmaint が使用するプランの情報は、プラン内のデータベースのリストのみです。 他の sqlmaint パラメーターに指定するすべてのメンテナンス操作は、このデータベースのリストに適用されます。 このパラメーターの値は、msdb.dbo.sysdbmaintplans の plan_id 値に一致する必要があります。

-Rpttext_file
レポートの生成先となるファイルの完全なパスとファイル名を指定します。 レポートは画面上にも表示されます。 レポートによってファイル名に日時が追加され、バージョン情報が維持されます。 日時は、_yyyyMMddhhmmの形式で、ファイル名の最後 (ピリオドの前) に追加されます。 yyyy = 年、 MM = 月、 dd = 日、 hh = 時間、 mm = 分。

1996 年 12 月 1 日午前 10:23 にユーティリティを実行し、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) のファイル名を指定する必要があります。

-Tooperator_name
生成されたレポートが SQL Mail を使用して送信される場合の、送信先となるオペレーターを指定します。

-HtmlRpthtml_file
HTML レポートの生成先となるファイルの完全パスとファイル名を指定します。 sqlmaint は、 -Rpt パラメーターの場合と同じように、ファイル名に _ yyyyMMddhhmm 形式の文字列を追加してファイル名を生成します。

sqlmaint がリモート サーバーにアクセスする場合、 html_file には、完全な UNC ファイル名を指定する必要があります。

-DelHtmlRpt<time_period>
レポート ファイル作成後の期間が <time_period> を超える場合、レポート ディレクトリ内にあるすべての HTML レポートを削除するように指定します。 -DelHtmlRpt は、html_file パラメーターを基に生成されたパターンに適合する名前を持つファイルを検索します。 html_file が c:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2022_maint.htm の場合、-DelHtmlRpt によって sqlmaint は、C:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2022_maint*.htm というパターンに一致する名前を持つファイルを検索し、指定された <time_period> より前のファイルをすべて削除します。

-RmUnusedSpacethreshold_percent free_percent
-Dに指定されたデータベースから使用されていない領域を削除します。 このオプションは、自動拡張が定義されているデータベースに対してのみ使用できます。 Threshold_percent は、 sqlmaint が使用されていないデータ領域を削除する基準となるデータベースのサイズを MB 単位で指定します。 データベースが 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
-Dに指定されたデータベースで、DBCC CHECKDB ステートメント、または NOINDEX オプションを含んだ DBCC CHECKDB ステートメントを実行します。 詳細については、「DBCC CHECKDB」を参照してください。

sqlmaint を実行するときにデータベースが使用中の場合、 text_file に警告が書き込まれます。

-CkAl | -CkAlNoIdx
-Dに指定されたデータベースで、NOINDEX オプションを含んだ DBCC CHECKALLOC ステートメントを実行します。 詳細については、「DBCC CHECKALLOC (Transact-SQL)」を参照してください。

-CkCat
-D に指定されたデータベースで、DBCC CHECKCATALOG (Transact-SQL) ステートメントを実行します。 詳細については、「DBCC CHECKCATALOG (Transact-SQL)」を参照してください。

-UpdOptiStatssample_percent
データベースの各テーブルで、次のステートメントを実行します。

UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT;  

テーブルが計算列を含む場合、 -UpdOptiStats を使用するときに -SupportedComputedColumn引数も指定する必要があります。

詳細については、「UPDATE STATISTICS (Transact-SQL)」を参照してください。

-RebldIdxfree_space
FILL FACTOR とは逆の関係になる値として free_space の割合の値を使用し、対象データベースのテーブルのインデックスを再構築します。 たとえば、 free_space の割合が 30 の場合、使用される FILL FACTOR は 70 になります。 free_space の割合の値に 100 が指定された場合は、最初の FILL FACTOR 値を使用してインデックスが再構築されます。

インデックスが計算列にある場合、 -RebldIdx を使用するときに -SupportComputedColumn引数も指定する必要があります。

-RebldIdx
計算列に対して sqlmaint の DBCC メンテナンス コマンドを実行する場合は、必ず指定します。

-WriteHistory
sqlmaintによって実行される各メンテナンス操作に対して、msdb.dbo.sysdbmaintplan_history にエントリを作成します。 -PlanName または -PlanID が指定された場合、sysdbmaintplan_history のエントリには指定されたプランの ID が使用されます。 -D が指定された場合、sysdbmaintplan_history のエントリはプラン ID にゼロ値を使用して作成されます。

-BkUpDB [ backup_path] | -BkUpLog [ backup_path ]
バックアップ操作を指定します。 -BkUpDb はデータベース全体をバックアップします。 -BkUpLog はトランザクション ログのみをバックアップします。

backup_path には、バックアップを格納するディレクトリを指定します。 backup_path は、 -UseDefDir も指定されている場合は必要ありません。ただし両方が指定されている場合は、 -UseDefDir によってオーバーライドされます。 バックアップは、ディレクトリまたはテープ デバイス アドレス (\\.\TAPE0 など) に格納することができます。 データベース バックアップのファイル名は、次のように自動的に生成されます。

dbname_db_yyyyMMddhhmm.BAK  
  

where

  • dbname はバックアップするデータベースの名前です。

  • yyyyMMddhhmm はバックアップ操作の日時です ( yyyy = 年、 MM = 月、 dd = 日、 hh = 時間、 mm = 分)。

トランザクション バックアップ用のファイル名は、次のように同じ形式を使用して自動的に生成されます。

dbname_log_yyyymmddhhmm.BAK  
  

-BkUpDB パラメーターを使用する場合は、 -BkUpMedia パラメーターを使用してメディアを指定する必要があります。

-BkUpMedia
バックアップのメディアの種類 (DISK または TAPE) を指定します。

DISK
バックアップ メディアがディスクであることを指定します。

-DelBkUps<time_period>
ディスク バックアップの場合で、バックアップ作成後の期間が <time_period> を超える場合、バックアップ ディレクトリ内にあるすべてのバックアップ ファイルを削除するように指定します。

-CrBkSubDir
ディスク バックアップの場合で、[backup_path] ディレクトリ内、または -UseDefDir が指定されている場合は、既定のバックアップ ディレクトリ内にサブディレクトリを作成します。 サブディレクトリの名前は、 -Dに指定されるデータベース名を基に生成されます。 -CrBkSubDir を使用すると、 backup_path パラメーターを変更せずに、異なるデータベースのすべてのバックアップを、個別のサブディレクトリに簡単に格納することができます。

-UseDefDir
ディスク バックアップの場合、既定のバックアップ ディレクトリにバックアップ ファイルを作成します。 UseDefDir は、backup_path をオーバーライドします (両方が指定されている場合)。 既定の Microsoft SQL Server セットアップでは、既定のバックアップ ディレクトリは C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup です。

TAPE
バックアップ メディアがテープであることを指定します。

-BkUpOnlyIfClean
指定されたすべての -Ck チェックでデータに問題が検出されなかった場合のみ、バックアップを行います。 メンテナンス操作は、コマンド プロンプトでの指定と同じ順序で実行されます。 -BkUpOnlyIfCleanを指定する場合、またはチェックで問題がレポートされるかどうかに関係なくバックアップが発生する場合は、 -BkUpDB-BkUpLog パラメーターの前に-CkDB -CkDBNoIdx -CkAl -CkAlNoIdx /-CkTxtAl 、または -CkCatのパラメーターを指定します。

-VrfyBackup
バックアップの完了時、バックアップに対して RESTORE VERIFYONLY を実行します。

number[minutes| hours| day| weeks| months]
レポートまたはバックアップ ファイルを削除する時期であるかどうかを判断するための期間を指定します。 number は整数値で、続けてスペースを含めずに時間単位を指定します。 次は有効な例です。

  • 12weeks

  • 3months

  • 15days

number だけを指定する場合、既定では、 weeksと見なされます。

解説

sqlmaint ユーティリティは、1 つまたは複数のデータベースでメンテナンス操作を実行します。 -D を指定する場合、残りのスイッチで指定する操作は指定したデータベースでのみ実行されます。 -PlanName または -PlanID が指定された場合、指定されたメンテナンス プランから sqlmaint が取得する情報は、プラン内のデータベースのリストのみです。 その他の sqlmaint パラメーターに指定されるすべての操作は、プランから取得されたリスト内の各データベースに対して適用されます。 sqlmaint ユーティリティでは、プラン自体に定義されているメンテナンス操作は適用されません。

sqlmaint ユーティリティは、実行が成功した場合には 0 を、実行が失敗した場合には 1 を返します。 失敗は次の場合にレポートされます。

  • メンテナンス作業のすべてが失敗した場合。

  • -CkDB-CkDBNoIdx-CkAl-CkAlNoIdx-CkTxtAl、または -CkCat のチェックでデータの問題が検出された場合。

  • 一般エラーが発生した場合。

アクセス許可

に対して 読み取りおよび実行 権限のある Windows ユーザーが、 sqlmaint sqlmaint.exeユーティリティを実行できます。このファイルは、既定では x:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER1\MSSQL\Binn フォルダーに格納されています。 さらに、-login_ID で指定される SQL Server ログインは、指定の操作を実行するのに必要な SQL Server の権限を持っている必要があります。 SQL Server への接続で Windows 認証を使用する場合、認証される Windows ユーザーにマップされている SQL Server ログインが指定の操作を実行するには、SQL Server の権限が必要です。

たとえば、 -BkUpDB を使用するには、BACKUP ステートメントを実行するための権限が必要です。 また、 -UpdOptiStats 引数を使用するには、UPDATE STATISTICS ステートメントを実行するための権限が必要です。 詳細については、オンライン ブックの該当トピックで「権限」を参照してください。

A. データベースで 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\MSSQL13.MSSQLSERVER\MSSQL\Backup ディレクトリ内にある個別のサブディレクトリに、プラン内のすべてのデータベースをバックアップし、 2 週間を経過したバックアップはすべて削除する

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

D. 既定の x:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup ディレクトリにデータベースをバックアップする

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir  

参照

BACKUP (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)