SQL Serverデータベースのメンテナンスを簡単にするためのバッチスクリプト
バックアップの作成に加えて、SQL Serverが利用できるさまざまなタスクと機能があり、どちらもデータベースのパフォーマンスと信頼性を向上させることができます。簡単なコマンドラインスクリプトを使用してSQL Serverデータベースをバックアップする方法を以前に示したので、一般的なメンテナンスタスクを簡単に実行できるようにするスクリプトを提供します。.
データベースの圧縮/縮小[/ Compact]
SQL Serverデータベースが使用する物理ディスク領域に影響する要因はいくつかあります。ほんの数例を挙げると:
- レコードが追加、削除、更新されるにつれて、SQLは絶えずテーブルを拡大縮小し、クエリ操作を実行するための一時的なデータ構造を生成しています。ディスク記憶域のニーズに対応するために、SQL Serverは必要に応じてデータベースのサイズを増やし(通常10%)、データベースのファイルサイズが常に変化しないようにします。これはパフォーマンスには理想的ですが、データベースを拡張してその後これらのレコードを削除するような非常に多数のレコードを追加した場合、SQL Serverはこれを自動的に再利用しないため、使用される記憶域の切断を引き起こす可能性があります。ディスクスペース.
- データベースで完全復旧モードを使用している場合は、トランザクションログファイル(LDF)が非常に大きくなる可能性があります。特に大量の更新があるデータベースでは、.
データベースを圧縮(または縮小)すると、未使用のディスク領域が再利用されます。小規模なデータベース(200 MB以下)の場合、これは通常あまり問題になりませんが、大規模なデータベース(1 GB以上)の場合は、再生スペースが重要になる可能性があります。.
データベースのインデックス再作成[/インデックス再作成]
絶えずファイルを作成、編集、削除することはディスクの断片化を招くことがあるように、データベースにレコードを挿入、更新、削除することはテーブルの断片化を招くことがあります。実際の結果は、読み書き操作でパフォーマンスが低下するという点で同じです。完全な類推ではありませんが、データベース内のテーブルのインデックスを再作成すると、基本的にテーブルの断片化が解消されます。場合によっては、これによりデータ検索の速度が大幅に向上します。.
SQL Serverのしくみにより、テーブルは個別にインデックスを再作成する必要があります。大量のテーブルを持つデータベースの場合、これは手動で行うのが本当に面倒ですが、私たちのスクリプトはそれぞれのデータベースのすべてのテーブルにヒットし、すべてのインデックスを再構築します。.
整合性の検証[/ Verify]
データベースが機能し続け、正確な結果を出すためには、整っていなければならない多数の整合性項目があります。ありがたいことに、物理的または論理的な整合性の問題はあまり一般的ではありませんが、データベース上で整合性検証プロセスを実行して結果を確認することをお勧めします。.
検証プロセスがスクリプトを介して実行されるとエラーのみが報告されるので、良いニュースはありません。.
スクリプトを使う
SQLMaintバッチスクリプトはSQL 2005以降と互換性があり、SQLCMDツールがインストールされている(SQL Serverのインストールの一部としてインストールされている)マシン上で実行する必要があります。コマンドラインから他のアプリケーションと同じように簡単に呼び出すことができるように、このスクリプトをWindowsのPATH変数に設定されている場所(C:Windowsなど)にドロップすることをお勧めします。.
ヘルプ情報を表示するには、単に次のように入力します。
SQLMaint /?
例
トラステッド接続を使用してデータベース「MyDB」でコンパクトを実行してから検証を実行するには、次の手順を実行します。
SQLMaint MyDB /コンパクト/検証
インデックス "123456"を持つ "sa"ユーザーを使用して、名前付きインスタンス "Special"の "MyDB"を再インデックスしてから圧縮するには、次の手順を実行します。
SQLMaint MyDB /S:.Special / U:sa / P:123456 / Reindex / Compact
バッチスクリプトの内部から使用する
SQLMaintバッチスクリプトはコマンドラインからアプリケーションのように使用できますが、別のバッチスクリプト内で使用する場合は、その前にCALLキーワードを付ける必要があります。.
たとえば、次のスクリプトは、信頼できる認証を使用して、既定のSQL Serverインストール上のすべてのシステム以外のデータベースですべてのメンテナンスタスクを実行します。
@ECHO OFF
SETLOCAL EnableExtensions
SET DBList =”%TEMP%DBList.txt”
SqlCmd -E -h-1 -w 300 -Q SET NOCount ON; SELECT name from master.dbo.sysDatabasesどこにいないか( 'master'、 'model'、 'msdb'、 'tempdb')”>%DBList%
FOR / F“ usebackq tokens = 1” %% i IN(%DBList%)DO(
CALL SQLMaint“ %% i” /コンパクト/インデックスの再作成/検証
エコー +++++++++++
)
%DBList%DEL / F / Q%DBList%が存在する場合
ENDLOCAL
SysadminGeek.comからSQLMaintバッチスクリプトをダウンロードしてください。