2014年11月12日水曜日

【解決】SQLEXPRESSインストールエラー e:\sql11_main_t.obj.x86release?

横道に逸れるよ。

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日返せ~

0 件のコメント:

コメントを投稿