質問: オフライン中のトランザクションについて 表領域をオフラインにした場合、オフライン前に開始されたトランザクションは有効ですが、オフラインのまま、コミット、または、ロールバックして、表領域をオンラインにしても、整合がとれるのはなぜなのでしょうか。 コミットするか、ロールバックするかの情報はどこに保持してるのか疑問です。 (オフラインにしてから、ファイルをリネームし、 トランザクションをロールバックして、 ログをアーカイブし、db再起動後に、ファイル名を戻して、 オンラインにすると、ちゃんとロールバックされています。 同じ操作で、コミットするとちゃんとコミットされています。 知っている方には当然なのでしょうが、私にとっては、不思議です) 詳しい方がみえましたらご教授お願いいたします。
回答: 質問内容はデータ表領域がオフラインなのになぜコミットできるかというと同じです。 コミット操作はundoセグメント(ロールバックセグメント)ヘッダの トランザクション表にscn付きで記録されますのでデータ表領域のioは遅延することができます。 次の表アクセス時にundoセグメントヘッダからデータ表領域に書き込まれます。 シャットダウンしてundo表領域も同時に壊しておくと、たぶんオフライン前までの 不完全リカバリになるのではないかな・・・