DB接続の保存

Set Session("OraDatabase") = OraSession.DbOpenDatabase(HostName ,LoginPasswd ,Clng(3))

高木浩光@自宅の日記 - Anonymous FTPで公開されていたGlobal.asaが示すもの 岡崎図書館事件(6)

なんと、こんな何気ないコードで接続オブジェクトが保存できてしまうのか…

PHPで「あえて接続を保存できないか」試した*1ときにはこんな方法では保存できなかった。データベースの接続が「リソース型」なので、セッションでの保存と再現は不可能*2だった。その仕様は、こういうミスを作り込まないようにするためのものなのだなぁ、と改めて思った。


接続オブジェクトがシリアライズされる時に、データベース接続自体も自動的に不活性化されるようになっていればいいのか?いや、トランザクションのせいでDBの性能が低下する*3ことを考えるとそれは不可能だし、トランザクションが要らないなら接続オブジェクトを保存しておく必要もないのか。

*1:ページの遷移にまたがってロールバックをかけられると手間がものすごく減る

*2:セッションハンドラーをどうにかすればいけるのだろうと思ったが、そこまでするよりDBでのロールバックを不要にする方がよほど簡単だった。

*3:最悪、デッドロックになる