アイソレーションレベル

データベースはあまり詳しくないので、メモ書き。

SQL-92の仕様では、アイソレーションレベルというものがあり、READ_UNCOMMITTED, READ_COMMITED, REPAETABLE_READ, SERIALIZABLEという4つのレベルがあります。これを”SET TRANSACTION ISOLATION LEVEL”文で設定できます。これを設定することで、データベースからデータを読み込む際の挙動がかわります。

それぞれの意味は以下の通り。下にいくほど同時実効効率が悪くります。(NONEを除く)

アイソレーションレベル トランザクションサポート 不正な読み込み
ダーティリード ノンリピータブルリード ファントムリード
READ_UNCOMMITTED 発生 発生 発生
READ_COMMITETED
未発生 発生 発生
REPEATABLE_READ 未発生 未発生 発生
SERIALIZABLE 未発生 未発生 未発生
NONE ×
発生 発生 発生

ここでの なんとかリードっていうのは以下のような意味です。

  • ダーティリード
    • トランザクションAとBがあって、Aが更新内容をコミットしていないのにBにはその内容が見えてしまうこと
  • ノンリピータブルリード
    • トランザクションAとBがあって、Aが更新している最中にBが複数回のSELECTをした場合に、複数回のSELECTの結果が違うこと
  • ファントムリード
    • トランザクションAとBがあって、Aがrowの追加・削除している最中にBが複数回のSELECTをした場合に、複数回のSELECTの結果が違うこと

マネージドBeanのスレッドセーフについて

サーブレットは、web.xmlのservlet要素毎にひとつつくられるため、複数スレッドから同時にアクセスされる可能性があります。そのため、スレッドセーフでなければなりません。

JSFのマネージドBeanもサーブレットです。ただし、条件がスコープの範囲によって変わってきます。アプリケーションスコープ、セッションスコープはアプリケーション毎にひとつ、セッション毎にひとつオブジェクトが生成されます。そのため複数スレッドからの同時アクセスの可能性がありえます。しかしリクエストスコープはリクエスト毎にひとつオブジェクトが生成されるので、複数スレッドは考慮する必要はありません。


Google Down?

Googleで検索しようとおもったら、サーバに繋がりません。どうもDNSサーバが落ちているようで、IPを引くことができません。なので適当に今まで使われてたと思うGoogleのIPを直接入れてみましたが、これ繋がりません。

あの天下のGoogleなのに、高可用性は確保してないんでしょうかね。それともなにか大幅な改造でもしてるんでしょうかね。

日常頻繁に使うサイトなのでかなり困ります。


PAM認証でのchroot

サーバのセキュリティを確保するためにchrootを使用する方法がありますが、サーバが対応していないと諦めていましたが、OpenSSHサーバのようにPAM認証を利用するサーバではPAMの機能で実現することができます。

参考 : http://www.asahi-net.or.jp/~AA4T-NNGK/jail2.html

この方法を使うことで、OpenSSHでscpやsftpだけ許可したい場合、ユーザをjailの中に閉じこめることができます。


createrepoコマンド@ RHEL5

createrepoコマンドはyumのリポジトリを作成するためのコマンドです。

基本的にrpmファイルを用意して、このコマンドを以下のように叩くだけでOKです。

# cd RPMのあるディレクトリ
# createrepo .

RHELのDVDの中身をそのままリポジトリにしたい場合もあると思います。この時も上記のようにコマンドを叩けばよいのですが、それだけだとアプリケーションの追加と削除で表示されるアプリケーションのグループが表示されません。グループはcompファイルに記述されているので、createrepo時にこのファイルをコピーしてあげればOKです。

まずはDVDをまるごと適当な所にコピーし、 RPMが格納されている Serverディレクトリに移動。repodataディレクトリをバックアップし、createrepoで新たにリポジトリ情報を作成します。

# cd Server
# mv repodata ..
# createrepo -v -g ../repodata/comps-rhel5-server-core.xml .