ヘッダーをスキップ
Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド
リリース7.0
E05173-03
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

SELECT文の結果が重複する

コミット読取り分離レベルを使用すると、結果セットで重複する可能性があります。SELECTによるスキャンの実行範囲内でいくつかの行が追加または削除されてコミットされた場合に、SELECT文によって選択される行が、表内の行の合計数より多くなったり、少なくなります。これは、UPDATE、INSERTまたはDELETE文によって索引に対して値の追加または削除が実行され、SELECTによるスキャンでその索引が使用されている場合に発生する可能性があります。また、INSERTまたはDELETEによって表に対して行の追加または削除が実行され、SELECT操作で全表スキャンが使用されている場合も発生する可能性があります。

順序付けられている索引値に対してUPDATEを実行すると、古い値が削除され、新しい値が別の場所に挿入されます。つまり、UPDATEによって、索引内のある位置から別の位置に行が移動されます。索引スキャンでは、両方の位置に同じ行が検出されると、同じ行が2回戻されます。これは、シリアル・スキャンでは発生しません。表ページが順序付けられておらず、UPDATEに対して行を移動する必要がないためです。したがって、スキャンによって渡された行が再度参照されることはありません。

この問題を回避するには、SELECT文でシリアライズ可能分離レベルを使用します。これによって、INSERT、DELETEまたはUPDATEの同時操作を防止できます。INSERTまたはDELETEはすべての索引に影響を及ぼすため、これらの操作で索引を使用してこの問題を回避する信頼性の高い方法はありません。UPDATEの場合は、更新されていない索引をSELECT文で使用してこの問題を回避することができます。

シリアライズ可能分離レベルの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の並行性制御に関する説明を参照してください。