*.mdfの移動にご用心

SQL Server 2005 Express Editionでテスト環境を作ってました。最近、動作があまりにも遅いのでPerfectDisk 7.0でデフラグしましたが、*.mdfの断片化が400 overと顕著です。SQLServerのサービスの停止後に*.mdfをNASへ退避し最適化を行い、その後戻すことにしました。もちろんコピーは何気なくエクスプローラで行いました。

作業後にSQLServerを再開しようとしたら、見知らぬエラーが!イベントビューアのアプリケーションにはこんなログが残ってました。

ソース:MSSQL$SQLEXPRESS
分類:(2)
イベントID:17207
説明:
FCB::Open: ファイル 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\master.mdf' を作成中または開いているときに、オペレーティング システム エラー 5(アクセスが拒否されました。) が発生しました。オペレーティング システム エラーを診断して修正し、操作を再試行してください。

詳細な情報は、http://go.microsoft.com/fwlink/events.asp の [ヘルプとサポート センター] を参照してください。

ぐぐってもSQLServer2005(SQLEXPRESS) - SQL Server - 教えて!gooでは解決しておらず絶望感がつのります。*.mdfはAdministratorsにはフルコントロールの権限があり、悩むこと小一時間。

ふと、「アクセスが拒否されました。」== "Permission Denied."だぁとひらめき、SQLServerのプロセスを実行しているアカウントに*.mdfを読み書きする権限が無いんだと気づきました。

その後の復旧作業はこちら:

1.近所のSQLServer 2005のマシンを見て、与える権限の正解を調べる。私の近所ではこんな感じ:

2.自分のところの正解のアカウントを調べる。私のところではこんな感じ:

3.ディレクトリツリーのパーミッションを修正する。私のところではこんな感じ:

作業後にサービスを再開すると、動いたぁ!!!

SQL Server Management StudioでDBの中を覗いてみたら、機敏に動いてるようで満足です。

#もちろん、結論を得る前にmaster.mdbだけいぢって試行錯誤してたんですよ。

そういえば、unix系のOSでこの手の作業を行うときはtarを使うから、この手のトラブルは未然に防がれていたんですねぇ…