セッションの管理にSQL Serverを使用する

しばらく前に携わっていたマスタメンテ(CMSともいいますが)は,わりと難しめのことをしていたわりにはリリース後の問い合わせが少なかったのですが,先日結構イタイのが出てしまいました.
今回のアプリはASP.NETで当たり前にSessionを使用しています.NLBS環境ではSessionはInProcに出来ないので,SQL Server上で管理することにしています.


さてSQL Serverを使用するには,aspnet_regsql.exeコマンドを使います.
http://msdn2.microsoft.com/ja-JP/library/ms229862.aspx
使い方は

aspnet_regsql.exe -S <サーバ名> -E -ssadd -sstype t|p|c

で,問題はt|p|cです.

使用するセッション状態の種類を指定します。

t - 一時。セッション状態データを SQL Server tempdb データベースに格納します。セッション状態を管理するストアド プロシージャは、SQL Server ASPState データベースにインストールされます。SQL を再起動すると、データは失われます。これは、既定の設定です。

p - 永続。セッション状態データとストアド プロシージャの両方を SQL Server ASPState データベースに格納します。

c - カスタム。セッション状態データとストアド プロシージャの両方をカスタム データベースに格納します。データベース名は、-d オプションを使って指定する必要があります。

cは置いておくとして,tとpのどちらを使えばいいのでしょう?


ところでアーキテクトとは,常に何かを選択し続ける仕事なんだろうなぁ,と思います.自分は全然へたれなので,こんなときは当然,既定を選択,ですよ.
ただtempdbの場合,SQL Serverを再起動するとデータだけでなく,データを格納するテーブルに設定したロールの設定も消えちゃうんですね.なので,再起動した途端にマスタメンテのページにアクセス出来なくなりました.ウーン……いや,単に自分の調査不足というかテスト不足です,ハイ.でもそういう大事なことは一言書いてくれてもいいのにと思ったり.
そんなわけで,ASPStateに保存するように変更しました.でもそれが本当に良かったのか自信がもてないんですよ.実は毎回SQL Server再起動するたびにテーブルにロールを付け直すスクリプトを走らせるようにしたほうが良かったのでは?とかね.でもこの辺を詳しく解説してくれている書籍とかWebサイトって見つからないんですよね.