SQLSERVER EXPRESSがクラッシュしたので再インストールをしているのだが
2日ほど、ハマっている。
インストールに失敗するのだ。というか、インストールはできるのだが、SQLEXPRESSのサービスが起動しないのだ。
インストールしたバージョンはSQL SERVER EXPRESS EDITION 2012。 Service Pack 1 でもどっちでもダメ。
インストールの後半 SqlEngineDBStartConfigAction_install_configrrc_Cpu32 で
「データベースエンジンの復旧ハンドルの待機に失敗しました。考えられる原因については、SQL Serverエラーログを参照してください。」
SQL Server (SQLEXPRESS)のサービスを起動しようとすると
「ローカルコンピューターでSQL Server (SQLEXPRESS)を開始できませんでした。詳細情報はシステムイベントログを参照してください。これがMicrosoft以外のサービスである場合は、サービスの製造元に問い合わせてください。その際、サービス固有のエラーコードが -2146885628 であることを伝えてください。」
まぁMicrosoft製品の日本語が不自由なのは置いといて、
とりあえずログを確認。
C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Log\ERRORLOG
Error: 17190, Severity: 16, State: 1.
Initializing the FallBack certificate failed with error code: 1, state: 20, error number: 0.
Unable to initialize SSL encryption because a valid certificate could not be found, and it is not possible to create a self-signed certificate.
これはSQLEXPRESSのサービスのログオンをローカルシステムアカウントにすれば良いという情報あり。
Failed to verify Authenticode signature on DLL 'c:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Binn\ftimport.dll'.
DLLの認証コードのベリファイに失敗と出てくるが、このDLLが存在しない。
failedとは言うが、他は進んでいるようなので、とりあえず気にしないことにする。
つぎのログ。
FCB::Open failed: Could not open file e:\sql11_main_t.obj.x86release\sql\mkmastr\databases\objfre\i386\MSDBData.mdf for file number 1. OS error: 3(指定されたパスが見つかりません。).
これが何とも不可解。
EドライブはDVDに割り当ててあったが、インストールはメディアではなくダウンロードしたインストーラで行ったもの。
なので e:\sql11_main_t.obj.x86release というパスは存在しないわけだが・・・
なぜここを参照にいくのか。
どう見てもインストーラのバグっぽい気がしますがどうですか?
ですが同じインストーラで以前はうまくインストールできていたので、何か環境に起因する問題なのだろう。。。。
MSDBData.mdfというファイル名からすると、システムデータベースなのだろう。他にもmodel.mdfの同様のエラーもある。
http://w3facility.info/question/sql-server-express-service-is-not-starting/
ここの助けを参考にしてみた。
NET START MSSQL$SQLEXPRESS /f /T3608
なんという魔法のコマンド!
これでSQLEXPRESSサービスが起動しました。
-T3608 Masterデータベースのみをリカバリします。
だそうだ。
続いて
SELECT name, physical_name, state_desc FROM sys.master_files ORDER BY database_id
結果
master c:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\master.mdf
mastlog c:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\mastlog.ldf
tempdev e:\sql11_main_t.obj.x86release\sql\mkmastr\databases\objfre\i386\tempdb.mdf
templog e:\sql11_main_t.obj.x86release\sql\mkmastr\databases\objfre\i386\templog.ldf
modeldev e:\sql11_main_t.obj.x86release\sql\mkmastr\databases\objfre\i386\model.mdf
modellog e:\sql11_main_t.obj.x86release\sql\mkmastr\databases\objfre\i386\modellog.ldf
MSDBData e:\sql11_main_t.obj.x86release\sql\mkmastr\databases\objfre\i386\MSDBData.mdf
MSDBLog e:\sql11_main_t.obj.x86release\sql\mkmastr\databases\objfre\i386\MSDBLog.ldf
と落ちてきた。
このtempdev, templog, modeldev, modelloog, MSDBData, MSDBLogを書き換えてやる!
C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA
には、temp以外の枠も出来ていたので
ALTER DATABASE tempdb MODIFY FILE ( NAME = tempdev, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\tempdb.mdf');
ALTER DATABASE tempdb MODIFY FILE ( NAME = templog, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\templog.ldf');
ALTER DATABASE model MODIFY FILE ( NAME = modeldev, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\model.mdf');
ALTER DATABASE model MODIFY FILE ( NAME = modellog, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\modellog.ldf');
ALTER DATABASE msdb MODIFY FILE ( NAME = MSDBData, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\MSDBData.mdf');
ALTER DATABASE msdb MODIFY FILE ( NAME = MSDBLog, FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\MSDBLog.ldf');
を流してやった。
The file "tempdev" has been modified in the system catalog. The new path will be
used the next time the database is started.
他もうまく行った。
再度SELECT叩いて、OKだ。
サービスを一旦落として、開始!!!!
めっちゃ時間かかったけど・・・開始になった~!!
いちおうログ確認すると、最初の2番目のFailedは相変わらず出ているけど、他のエラーはなかった。
めでたし、めでたし。
microsoftさんよ、2日返せ~