Ruby on Rails+OracleでセッションActiveRecord格納時にORA-22920エラー

RailsアプリでセッションをActiveRecord格納するように変更したところ、以下のエラーに見舞われた。

ORA-22920: LOB値を含む行がロックされていません。

どうやら標準Adapter内でロックをしていないことが原因の模様だ。


対策を探してみると、oracle_enhanced-adapterなるものを発見。
このAdapterではLOB型データ行をロックするように改変しているとのことなので、早速導入することにした。

$ gem uninstall activerecord-oracle-adapter
$ gem install activerecord-oracle_enhanced-adapter

database.ymlではadapterにoracle_enhancedを指定。

development:
  adapter: oracle_enhanced
  database: 192.168.0.11/xe
  username: oracle
  password: oracle

セッションをDB格納するので、protect_from_forgeryを有効にする。

●aprication.rb
...
#↓secret以降のコメントアウトを外す。
protect_from_forgery #:secret => 'ランダム文字列' 
...

これで対策完了。無事にセッションをDBに格納することが出来た。