以前投稿した内容に SQL Server 2008 Express Edition でメンテナンスプランの利用についてコメントをいただきました。
残念ながら SQL Server の Express Edition では、メンテナンスプランが使用できないんですよね。
SQL Server 2008 の各エディションがサポートする機能
また、SQL Server の Express Edition では SQL Server Agent も使用できないため、定期的なジョブを SQL Server 側で
実行することができません。
スキルチャージプログラムで貸与されている環境は Community Server をインストールしてあり、データベースには
SQL Server 2008 Express Edition を使用しています。
この環境ですが日次で 1 世代のバックアップだけは自動で取得する用に設定をしてあります。
メンテナンスプランと SQL Server Agent を使用できない状態で定期的にバックアップを取得するため、
タスクスケジューラ + SQLCMD.EXE を使ってバックアップのスケジューリングを設定しています。
[タスク スケジューラ] は管理ツールの中に入っています。?
このタスク スケジューラで以下のようなタスクを作成しています。
?
操作には以下のような設定を登録してあります。
操作 | プログラムの開始 |
プログラム/スクリプト | "C:Program FilesMicrosoft SQL Server100ToolsBinnSQLCMD.EXE" |
引数の追加 (オプション) | -S localhost<インスタンス名> -E -i "E:ToolsBackupCSDBBackup.sql" |
?
CSDBBackup.sql には以下の内容を記載しています。
# SSMS で生成したスクリプトを記載しているだけですが。
BACKUP DATABASE [CommunityServer] TO? DISK = N’E:BackupCommunityServer.bak’ WITH NOFORMAT, INIT, |
?
同様の方法でインデックスのメンテナンスも可能です。
ざっくりと作ったインデックスの再構築のクエリです。
これを SQLCMD でタスクスケジューラから実行すると定期的にインデックスの断片化を解消することができます。
# アドホッククエリで書いてしまっていますが…。
SET NOCOUNT ON SELECT * INTO [#tables] FROM [sys].[tables] DECLARE [table_cursor] CURSOR FOR OPEN [table_cursor] WHILE @@FETCH_STATUS = 0 CLOSE [table_cursor] |
?
自分でクエリを書くのが面倒な場合は、定期的に実行したい操作を SSMS からスクリプト化しておけばよいと思います。
Express Edition を使っていてもデータベースのメンテナンスは定期的に実行しないと駄目ですが、無償版なので
この辺の機能がないのは仕方ないですね。