*.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を使うから、この手のトラブルは未然に防がれていたんですねぇ…