忘れかけのIT備忘録

今まで学んできた知識や小技、なるほど!と思ったことをメモするブログです。

Oracleの読取り一貫性

今回はOracleの読取り一貫性について調査しました。

読取り一貫性とは、特定のトランザクションがSELECT文(データ読込み)を開始した時点で確定しているデータを読み込ませる機能です。
いったんOracleのSELECT文(データ読込み)の動きを復習します。

SELECT中に別トランザクションでデータ更新された場合、このUNDOセグメントのデータを使用して、読取り一貫性を実現しています。

では、SELECT中にUNDOセグメントがいっぱいになって読込み開始時点のデータが上書きされてしまった場合、どうなってしまうのでしょうか?
結論から言うと「ORA-01555: スナップショットが古すぎます」が発生します。
読込み開始時点のUNDOデータが上書きされて、読取り一貫性を実現できなくなってしまったためです。

■参考資料
ORACLE MASTER Silver[Silver DBA11g](試験番号:1Z0-052)完全詳解+精選問題集

■おわりに
個人の感想ですが、データベースの運用担当をしていた頃は「ORA-01555」のエラーをよく見ました。
UNDO_RETENTION値を増やせばその分「ORA-01555」エラーが減るケースが多いと思いますが、UNDO表領域が物理的にサイズ不足になると今度は「ORA-30036: string(UNDO表領域'string'内)でセグメントを拡張できません」エラーが発生してしまいます。