カーソルの使用

カーソルは大量のデータを扱う場合に便利ですが、カーソルを使用する際には、データ並行性、データ整合性、およびデータ一貫性に留意する必要があります。

データの一貫性を保証するために、データベース サーバーは異なるロッキング方法を実装することが可能です。ある種のデータ アクセスではまったくロックは要求されず、別の場合には共有ロックや排他ロックが要求されます。共有ロックでは、他のプロセスはデータにアクセスすることは可能ですが、更新はできません。また、排他ロックでは、他のプロセスはデータにまったくアクセスすることができません。

カーソルの使用には、3 つの分離レベルがあり、それらのレベルに従って、カーソルによる読み取りおよびロックが可能なデータが管理されます。

2 つのプロセスが同じデータで競合する状態「デッドロック」または「膠着状態」の問題が発生することがあります。古典的な例ですが、あるプロセスがデータ A をロックし、次にデータ B のロックを要求するとします。一方、別のプロセスはデータ B をロックし、データ A のロックを要求します。つまり、両方のプロセスが互いのプロセスが要求しているデータを持っていることになります。データベース サーバーは、このようなケースを発見した場合に、一方の、あるいは両方のプロセスに対してエラー メッセージを送る必要があります。

COBSQL

Oracle、Sybase、および Informix では、アプリケーションでカーソルの分離レベルを設定することができます。適用可能なロック タイプと動作については、マニュアルで説明しています。また、データがロックされる物理レベルについても議論されています。つまり、単一行、複数行 (つまり、ページ レベル)、およびテーブル全体などのそれぞれのレベルのことです。複数の表、または多くのプロセスが使っている表を走査するカーソルを使用する場合には、ロックされたデータがアクセス効率の低下につながるため、その扱いには注意が必要となります。

注:

COBSQL

Oracle、Sybase、および Informix では、FOR READ ONLY や FOR UPDATE などの多くの異なる句で定義されたカーソルを使用できます。これらの句は、カーソルの分離レベルに影響し、トランザクション処理に影響を及ぼします。これらの各句の影響の詳細は、使用しているデータベースに付属の SQL リファレンス マニュアルを参照してください。