こんにちは、YS.Mです。
例えば、データベースの値を書き換えたいときに
トランザクションという一連の分けることのできない操作のなかで
参照、変更、コミットという流れでデータを書き換えるとします。
このトランザクションは、すべて成功するか?すべて失敗するか?の2択しかありません。
意図しない操作となってしまった場合など、操作をする前に戻す操作をすることがありますが、
トランザクションが始まる前の状態を記憶しておく領域が
「ロールバックセグメント」といいます。
このロールバックセグメントは読み取り一貫性というデータベースのデータを誰が見ても同じになる性質にも関係していて
他の人のトランザクションでデータを更新中に値を参照したい場合
自分のトランザクションで参照される値は、ロールバックセグメント内のデータを参照することになるため、
他の人が変更してコミットするまでは、誰が見ても値は同じになるのです。
このロールバックセグメントの領域は、一つのトランザクションに対して、一つ割り当てられることになるので
仮に何百ものトランザクションが同時に集中するような場合は、その分だけのロールバックセグメントが必要になるので
ロールバックセグメント用の領域もきちんと計画して確保しておかないと、容量がいっぱいになってしまう
などの事態に陥る可能性もあるので注意が必要です。