12

過去 2 回、SQL サーバーを再起動しましたが、Web サイトがダウンしました。その理由は、tempdb が再作成され、ASPState ユーザーが tempdb への読み取り/書き込みのアクセス許可を失っているためと思われます (これは ASP サイトであり、セッション データは SQL サーバーに保存されます)。

これは、約 2 週間前まで問題ではありませんでした。再起動後にSQLサーバーがtempdbのアクセス許可をリセットするのを防ぐ方法を知っている人はいますか? または、なぜこれが最近になって発生し始めたのですか?MS SQL Server 2005 を使用しています。

4

6 に答える 6

6

まず、アクセス許可を tempdb に直接割り当てるべきではありません。再起動するたびに再作成されるという明らかな理由があります。

これは実際に疑問を投げかけます: とにかく、なぜこのデータベースへの直接のアクセス許可が必要なのですか?

一時テーブルを作成するために SQL Server に接続できること以外に、権限は必要ありません。ただし、tempdb に実際のテーブルを作成している場合は、この目的専用のデータベースを使用するように変更することを強くお勧めします。

更新
マーティンのコメントに基づいて、私が言えることはすごいです。これがオプションになるとは考えもしませんでした。

さて、ショックから立ち直りました。

スケジュールに従って実行される新しいジョブを SQL Server に作成します。スケジュールは、「SQL Server エージェントが開始するたびに自動的に開始する」に設定する必要があります。ジョブは、必要な tempdb アクセス許可を再作成する必要があります。

簡単に言えば、サーバーが再起動されると、SQL Server エージェントが再起動されます (サービスがそのように設定されている場合)。再起動すると、このジョブが開始され、権限が修正されます。SQL サーバーが完全に再起動するのにかかる時間よりも数秒長いだけ、サイトがダウンしたままになると思います。

于 2011-03-15T20:37:55.323 に答える
1

Model データベースは、TempDB のテンプレートとして使用されます。ユーザーと権限をモデルに追加すると、同じユーザーと権限が TempDB で使用されます。これがすべてのケースに最適なソリューションであるとは言いませんが、アプリケーションが特定の TempDB アクセスを必要とする状況ではうまくいきました。

于 2013-04-30T13:08:26.957 に答える
0

SQL サーバーの tempdb データベースは (私がこれまでに読んだり、聞いたり、経験したりしたすべてのことから)、サービスが開始されるたびに完全に削除され、再作成されます。したがって、ロール、ユーザー、またはその他のアクセス権設定を含む、そのデータベース内に保存されている、または書き込まれているものはすべて消去されます。インスタンスが起動するたびにそれらを設定/リセットするための面倒なコードを除いて、これを回避できるとは思いません。(モデルデータベースに設定されたものは、作成時にtempdbにコピーされるとは思いませんが、それについて考えたことさえありません...)

そのような設定はそのデータベースに書き込まれていますか? システムが最近変更または更新されていないことを確認してください。関連する可能性がありますが、SQL インスタンスはどのくらいの頻度で停止および再起動されますか? (賢明ではないにしても、再起動せずにSQLを数か月実行することは珍しくありません...)

于 2011-03-15T20:23:32.013 に答える