ようこそいらっしゃいました。あなたは
人目のお客様です。

Free Mail Account
ただで入手可能なpopサーバ環境
ちまたに見受けられるFreeで入手できるメールアカウントの多くがWEB上での専用メールブラウズ環境です(例えばMicrosoftがやってるHotMailなどがそれ)。しかし、メーラは自分のPCにインストールしているものだけにして手元でメールを集中管理したいという人は少なくないでしょう。私もそうです。わたしはWin95+Becky!を使っているのですが、メールを読むのにいちいちブラウザを立ちあげるのは手間だと思います。そこでpopサービスをFreeでやってくれるところを調べてみました。以下は実際にアカウントを取得でき、かつ手元の環境から使えることを確認できたものだけここにリストしています。
Windows NT
Workstation から Server へアップグレード
WindowsNT4のWorkstationをServerへアップグレードしましたが、やられました。なんか、インストール最中にレジストリ関連のDLLが欠落しているとか何とか言うメッセージが表示されて「やばそうやな。」と思ってたら案の定、リブートするとログイイン画面が一瞬出たかと思うと次の瞬間にはブルーパニックになってしまいました。クソ。
RASを使ってまして、Workstationでは受けのモデムが1つしか繋がらないのでServerに上げることにしたんですが、これじゃゼロから入れ直しだぁ。
しかし、何が悪かったのかと考えてみると、(ここからは勝手な推測ですが)Workstationを先にSP3に上げていたところにServerをインストールしてSP1に戻ってしまったの原因ではないかと。まあ、当てずっぽうですが。これを呼んでいる方で原因を知っている方、メールくださるとうれしいです。
DBMS
ANSI SQL92 でのトランザクションの扱い
Oracleで、データをselectした後でそのデータをupdateするとき、updateするデータが直前にselectした時と同じかどうか、どうやって保証していますか?普通はselect
... for updateで行ロックをかけてからupdat文を続けることになると思いますが、実はこの方法はANSI
SQL92で認められた方法ではありません。Oracleの方言なのです。ではどうやればANSI
SQL92準拠のSQL文にできるのでしょうか。
ANSI SQL92 ではトランザクションをいくつかのレベル(Isolation level:分離レベル)に分けて定義しています。
http://www.dementia.org/~shadow/sql/sql1992.txtの4.28
SQL-transactionsによればそのモードは
-
READ UNCOMMITTED
-
READ COMMITTED
-
REPEATABLE READ
-
SERIALIZABLE
の4とおりです。Oracle7.3ではこのうちREAD COMMITTED(Oracleでは"コミット読み込み"と記述)とSERIALIZABLE
(Oracleでは"直列可能"と記述)のみがサポートされています。また、Oracle7.3以前のOracleではREAD
COMMITEDのみがサポートされておりその他のレベルはありません。このため、SQL92の仕様ではデフォルトをSERIALIZABLEと定めていますが、Oracle7のデフォルトはREAD
COMMITEDです。
phenomena_level
*
isolation_level |
Dirty read(内容を保証しない読み込み) |
Non-repeatable read(反復不能な読み込み) |
Phantom(仮読み込み) |
| READ UNCOMMITTED |
可能 |
可能 |
可能 |
| READ COMMITTED |
不可 |
可能 |
可能 |
| REPEATABLE READ |
不可 |
不可 |
可能 |
| SERIALIZABLE |
不可 |
不可 |
不可 |
SQL92で定められたトランザクションで起こり得る現象(列)と分離レベル(行)の関係
Oracle7.3でこのモードの設定を変えるには set transaction というSQLを使います。このSQLはANSI
SQL92にも定められた標準のSQLなので、for updateを使うよりは柔軟性に優れたSQLを書くことになります。ただし、ANSI
SQL92においても set transaction に続くモード指定の方法は特に定めていないため、結局どのRDBMSでも共通に使えるSQLにすることはできません^^;
実際に設定するときは、例えば次のようなSQLを書きます。
set transaction isolation level serializable;
これでOracleの分離モードをSERIALIZABLEにできます。こうすればあるトランザクションAで最初にselectしたデータが、トランザクションA中のupdateで更新されようとした時にすでに別のトランザクションBのupdateによって変更されていた場合は、トランザクションAのupdateは失敗します。この効果はfor
updateを使う場合とちょうど逆の効果となります(for updateの場合はトランザクションBのupdateが失敗します)。

