Sql Server の Express Versionでは有償版で使えるメンテナンスプランは利用できません。また SQL Server Agent も使用できないため、定期的なジョブを SQL Server 側で実行することができません。
古巣のWindowsServer2003マシンは7年もの間さしたるトラブルもなく動いてくれましたが、DBのバックアップは 万一のことを考えると サボるわけにはいきません。 想定外だったなどとは言えず、マシントラブルは想定の範囲内ですから。
マシンの動作確認も含め 定期的にサーバーにログインしマニュアルでバックアップしてもそれまでですが、性格的にあやしい自分には忘れずにやり続けるなどということは到底できる話ではありません。(爆)
メンテナンスプランと SQL Server Agent が使用できない状態で定期的にDBの保守ををおこなうため タスクスケジューラ と SQLCMD.EXE を使ってメンテナンスプランを使った処理と同様の処理を行うことにします。
- データベースのバックアップ
- indexの再編成
- データベースの圧縮
タスクスケジューラ と SQLCMD.EXEを使って定期的にDBの保守を実現した手順を以下に示します。
- タスクスケジューラの設定
サーバーマネージャを開き ツールメニュー > タスクマネージャをクリック
タスクマネージャのダイアログ で 左側の「タスクスケジューラライブラリ」を右クリック
コンテキストメニューで「タスクの作成」をクリック
全般タグで
名前:DBmainte (任意)
ユーザーがログオンしてるかどうかにかかわらず実行する をチェック <—重要
トリガタグで
新規ボタンをクリック
「新規トリガー」ダイアログで 毎日 2AM に実行するように設定
操作タグで
「新規」ボタンをクリック
「新しい操作」ダイアログで
操作:プログラムの開始
プログラム/スクリプト:
”C:Program FilesMicrosoft SQL Server110ToolsBinnSQLCMD.EXE”
引数の追加(オプション): -S <インスタンス名> -i D:DBmainte.sql -o D:DBmainte.log
(実際のDB保守用SQLのありかと結果LogはD:ルートにおくことにした)
- DB保守用SQL作成
DB保守用のSQLは、それぞれ下記のサイトに詳しく述べられています。
データベースのバックアップ
http://technet.microsoft.com/ja-jp/library/ms191304(v=sql.105).aspx
indexの再編成
http://sql55.com/query/reorganize-rebuild-index.php
データベースの圧縮
http://technet.microsoft.com/ja-jp/library/ms189080(v=sql.105).aspx
今回は、幸いにもSqlServer2005で作成した メンテナンスプランが残っていたので、次のようにして メンテナンスプランの各タスクのT-SQLを取得しました。(大いなる手抜き大成功 lucky!!!)
SQL Server Management Studio で 管理 > メンテナンスプラン とたどり
日時メンテプランを開く
タスクを選択して 右クリック > 編集 をクリック > T-SQLの表示ボタンをクリック
表示されたT-SQLをコピペ!!!
- 実行結果
データベース圧縮タスクで 『ファイルの末尾にある論理ログ ファイルが使用中です』 とか
3個のデータベースそれぞれで異なるエラーメッセージが表示されました。
にもかかわらず SQL Server Management Studioを開いて SQLを貼り付けて単独で実行すると
問題なく成功したように見えます。なぜ???
いずれ領域の管理はときどき見てあげることにして データベース圧縮タスクはスケジュールタスクから除外することにします。
参考)データベース圧縮のSQL:DBCC SHRINKDATABASE(N’DB名’, 10, TRUNCATEONLY)
動作環境 Windows Server 2012 R2 ・ SQLserver2012Express