次の方法で共有


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 ]

議論

パラメーターとその値をスペースで区切ります。 たとえば、 -S とserver_nameの間にスペースを含 めます

-?

sqlmaint の構文図を返します。 このパラメーターは単独で使用してください。

-S server_name[\instance_name]

SQL Server のターゲット インスタンスを指定します。 <server_name>を指定して、そのサーバー上の SQL Server データベース エンジンの既定のインスタンスに接続します。 <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

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

-Rpt text_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) のファイル名を指定する必要があります。

-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されている場合、-DelHtmlRptは、名前がパターン と一致し、指定されたC:\Program Files\Microsoft SQL Server\MSSQL\Backup\AdventureWorks2022_maint*.htmよりも古いファイルを sqlmaint によって削除します。

-RmUnusedSpace threshold_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

DBCC CHECKDB ステートメント、または DBCC CHECKDB オプションを持つ NOINDEX ステートメントが、-Dで指定されたデータベースで実行されることを指定します。

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

-CkAl |-CkAlNoIdx

オプションを持つ NOINDEX ステートメントが、-Dで指定されたデータベースで実行されることを指定します。

-CkCat

で指定されたデータベースで -D ステートメントを実行することを指定します。

-UpdOptiStats sample_percent

データベース内の各テーブルで次のステートメントを実行することを指定します。

UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT;

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

詳細については、「統計の更新」を参照してください。

-RebldIdx free_space

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

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

-SupportComputedColumn

計算列に対して、sqlmaintメンテナンス コマンドを実行するには、指定する必要があります。

-WriteHistory

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も指定されている場合は必要ありません。また、両方が指定されている場合、-UseDefDirbackup_pathをオーバーライドします。 バックアップは、ディレクトリまたはテープ デバイス アドレス ( \\.\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

ディスク バックアップの場合、も指定されている場合は-UseDefDir ディレクトリまたは既定のバックアップ ディレクトリにサブディレクトリを作成することを指定します。 サブディレクトリの名前は、 -Dで指定されたデータベース名から生成されます。 -CrBkSubDir では、 backup_path パラメーターを変更しなくても、さまざまなデータベースのすべてのバックアップを別々のサブディレクトリに簡単に配置できます。

-UseDefDir

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

テープ

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

-クリーンな場合のみバックアップ

指定した -Ck チェックでデータに問題が見つからない場合にのみ、バックアップが実行されるように指定します。 メンテナンス操作は、コマンド プロンプトでの指定と同じ順序で実行されます。 パラメーター-CkDB-CkDBNoIdx-CkAl-CkAlNoIdx-CkTxtAl、または-CkCat-BkUpDBの前に指定するか、-BkUpLogを指定する場合は-BkUpOnlyIfCleanパラメーターを指定します。 これらのパラメーターを指定しない場合、チェックで問題が報告されるかどうかにかかわらず、バックアップが実行されます。

-VrfyBackup

RESTORE VERIFYONLYが完了したときにバックアップで実行されるように指定します。

number [ 分| 時間| 日| 週間| 月]

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

  • 12weeks
  • 3months
  • 15days

数値のみを指定した場合、既定の日付部分はweeks

解説

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

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

  • メンテナンス アクションのいずれかが失敗します。

  • -CkDB-CkDBNoIdx-CkAl-CkAlNoIdx-CkTxtAl、または-CkCatチェックによって、データに関する問題が検出されます。

  • 一般的なエラーが発生しました。

権限

に対する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 ディレクトリを使用して、プラン内のすべてのデータベースを個々のサブディレクトリにバックアップします。 また、2 週間より前のバックアップも削除されます。

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

D. データベースをバックアップする

次の使用例は、1 つのデータベースを既定の <X>:\Program Files\Microsoft SQL Server\MSSQLl13.MSSQLSERVER\MSSQL\Backup ディレクトリにバックアップします。

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir