SQL Server [2012 Express with Advanced Services]データベースがありますが、データベースはそれほど多くありません。私はEF Code Firstを使用してアプリケーションを開発しています。モデルがまだ流動的な状態にあるため、データベースが削除され、1日に数回再作成されています。
今朝、初めて実行したときに、アプリケーションがデータベースに接続できませんでした。調査の結果、データベースは「リカバリ保留」モードになっているようです。
イベントログを見ると、SQL Serverがログに記録していることがわかります。
データベースの起動(私のデータベース)
...一晩中ほぼ毎秒2回。 (イベントログがいっぱいになったため、昨日の夕方以降は表示されません)。
これらの「情報」ログエントリは今朝午前6時頃に停止し、直後に「エラー」ログエントリが続きます。
このクエリを実行するには、リソースプール「内部」にメモリが不足しています
データベースに一体何が起こったのですか?
注:Webアプリケーションを「デバッグ」モードで一晩実行したままにしておくことは可能ですが、「駆動」する人がいないと、データベーストラフィックが大量にあるとは想像できません。
また、私がデータベースにフルテキストカタログを持っていることにも言及する価値があります(私が言っているように、現時点ではDBに実際のコンテンツはほとんどありません)。
私は言わなければなりません、これは心配です-これが私の本番データベースに起こったとしたら、私はnot喜んでいます!
AUTO_CLOSE ONを使用すると、データベースへの接続がなくなるとすぐにデータベースが閉じられ、接続が確立されるたびにデータベースが再開されます(ペースの速いものの回復を実行します)。つまり、アプリケーションが2秒ごとにデータベースに接続するため、メッセージが表示されていました。あなたはおそらくalwaysがこの振る舞いをしていて、以前は気づかなかったでしょう。データベースがクラッシュしたので、ログを調査してこの問題を発見しました。これでわかって修正する可能性は高いですが、これはreal問題、つまりデータベースの可用性に対処していません。
さて、復旧できなくなったデータベースがあるので、どうしますか?最後のバックアップから復元し、 災害復旧計画 を適用します。本当に、これですべてです。そして、代替手段はありません。
whyクラッシュが発生した理由を理解したい場合(約1つの無数の理由のいずれかである可能性があります...)、次に連絡する必要があります [〜#〜] css [〜#〜] (製品サポート)。彼らは調査を通してあなたを導く手段を持っています。
イベントログでこのメッセージをオフにする場合。 SQL Server Management Studioに移動するだけです
それで全部です :)
SQLエクスプレスデータベースで同様の問題が発生し、リカバリが停止しました。ログを調査した後、データベースが数分ごとに起動していることが判明しました。スクリプトを実行する
select name, state_desc, is_auto_close_on from sys.databases where name = 'mydb'
自動クローズがオンに設定されていることが明らかになりました。
そのため、データベースは常に回復中のようですが、実際にはクライアント接続がないため、再びオフラインになる前に少しの間オンラインになっています。
これを次のスクリプトで解決しました。
Declare @state varchar(20)
while 1=1
begin
Select @state = state_desc from sys.databases where name='mydb';
If @state = 'ONLINE'
Begin
Alter database MyDb
Set AUTO_CLOSE_OFF;
Print 'Online'
break;
End
waitfor delay '00:00:02'
end