エンタープライズ:特集 2003/08/24 11:32:00 更新

[JAVA Developer特別企画]2003年10月号
知っておきたいデータベース移行術「Oracle→DB2編」 (7/7)

JAVA Developer 2003年10月号より転載

ロックと読み取り一貫性
 ここで、文法的な書き換えから離れて、ロックに関する違いについて簡単に説明したいと思います。「OracleとDB2ではなにが違うのか」と聞かれたとき、いろいろな違いが思い浮かぶのですが、一番大きな違いは「UNDOセグメントの有無」かもしれません。
 Oracleはデータ更新時にREDOログだけでなく、UNDOセグメント(あるいはロールバックセグメント)にも変更前イメージを記録します。記録されたBEFOREイメージはロールバック時に使用されますが、それとともに読み取り一貫性の実現にも使用されています。アプリケーションがSELECT文を発行したとき、読み取り対象データが未コミットのデータであれば、このUNDOセグメントから変更前情報が取り出され、それがSELECT文の結果として返ります。
 この読み取り一貫性の機能により、OracleはアプリケーションがSELECT文を発行した時点でのコミット済みデータを読み取ることを保障しています。また未コミットデータがあっても、アプリケーションは読み取り時にブロックされず、並行性は良好です。ただし、この読み取り一貫性には、バッファキャッシュに余分なデータを入れたり、REDOログのほかにUNDOセグメント用の領域が必要です。
 DB2の場合は、UNDOセグメントに対応するものがなく、変更前情報はログにしか記録されません。当然ロールバックはログを基に行われます。そしてアプリケーションがSELECT文を発行したとき、読み取り対象データが未コミットのデータであれば、SELECT文は待機されます。
 DB2ではSELECT文の実行時、行をフェッチする瞬間に行に対して共有ロックをかけます。また、未コミットの変更データには、排他ロックがかかるようになっています。排他ロックと共有ロックは互換性がなく、アプリケーションは共有ロックを取得できないため、SELECT文が待機状態になるというわけです。ちなみに、Microsoft SQL Serverのロック制御方式は、DB2が採用しているロック制御方式とほぼ同じです。
 DB2でアプリケーションを組む場合には、ロックの保持期間をできるだけ短くするようにしてください。コミットする間隔を小さくし、並行性をできるだけ大きくすることで、アプリケーションがより健全に動作できるようになります。

Universal JDBCドライバをお試しあれ
 以上、簡単ではありましたが、Oracleデータベースとアプリケーションを、DB2に移行する方法について解説してきました。DB2はOracleに比べると開発機能は不十分な点もありますが、そのような機能については今後のバージョンアップで随時解決されていくでしょう。
 最後にDB2 V8より登場したUniversal JDBCドライバについて簡単に説明しておきます。DB2の従来JDBCドライバは、タイプ2と3しかサポートしていませんでしたが、DB2 V8になりタイプ4もサポートされるようになりました。このタイプ4ドライバと新しいタイプ2ドライバの2つを含んでいる新しいJDBCドライバを「Universal JDBCドライバ」と呼びます(ライブラリは「db2jcc.jar」)。
 使用方法などに関しては、IBM USサイトで詳しく解説しております。ぜひ、一度お試しください。

[JAVA Developer特別企画]
知っておきたいデータベース移行術「Oracle→DB2編」
・データベースオブジェクト
・データ型
・ビルトイン関数
・SQL文
・ロックと読み取り一貫性

関連リンク
▼JAVA Developer
▼定期購読のご案内
▼バックナンバー販売協力店

JAVA Developer10月号表紙 JAVA Developer 10月号

大特集
再入門 J2SE

特集2 Oracle9i Application Server
[特別企画]
・例外処理のメカニズム
・データベース移行術(2)
 「Oracle→DB2編」
・Tomcatで試すJava2セキュリティ

前のページ | 1 2 3 4 5 6 7 |      

[竹内 笑子,JAVA Developer]