Rollback segment corrupt error message가 발생
했을 경우에
우선 rollback
segment에 대한
정보를 알아야
한다. 즉, 어떤 rollback
segment에 문제가
발생 했는지를
알기 위해
아래의 event를 사용한다.
Init.ora
event=”10013 trace name context forever, level 10”
(Dumps the recovery of transactions during
startup)
event=”10015
trace name context forever, level 10”
(Dumps every rollback segment header,
transaction table, during startup, before, after recovery)
위의 event를 init.ora에 지정한 후에
다시 startup한다. 이때 나온 trace file을 이용하여 해당 object를 알아낸다.
Tx(#,#):
transaction information
object#:
object id
경우 1: corrupt된 object가 rollback segment일
경우.(media
recovery를 하지
못할 경우)
해당 segment를 init.ora의 rollback_segments에서
제외하고 _corrunted_rollback_segment에 지정한
후 다시
시도 한다.
이후에
이를 drop한다. 그리고, database를 backup받고, rebuild한다.
경우 2: 일반 data block이 corrupt되었을 경우.(media
recovery를 하지
못할 경우)
해당 object와 관련한 rollback
segment를 init.ora에
_offline_rollback_segment에
지정한 후 startup하고 해당 object를 drop 한다. (object을 drop하면 undo는 discard된다.)
_offline없이 startup한다. 해당 object를 rebuild한다.
_offline_rollback_segments : 임의의 tx에 대한 ITL이 rollback
segment와 연관되어
있을 경우에
이 rollback
segment가 _offline에 지정되어
있으면, 해당 segment는 transaction의 상태를 찾는다. 이때 tx이 committed되었으면 delayed clean out를
수행하고, 현재 active하면 ITL에 해당하는 consistent read를
수행한다. 만약 해당 tx가 active하고 이 ITL을 변경하고자
할 경우에는
무한 루프에
빠져 들게
된다. 또한 이 segment를 drop하면 모든 tx는 commit된다.
_corrupted_rollback_segment : 만약 ITL을 open할 때 이에
연관된 segment가 _corrupted에 지정되어
있으면, 해당 ITL의 transaction의 상태를
알기 위해서 segment를 read하지 않고, 해당 transaction이 commit되었다고 가정하고, delayed block clean out을
수행한다. 그러므로 logical
corruption이 발생 할
수 있다. 그러므로 이러한 경우에는 logical corruption이
발생 한다.
Case
1
Transaction set.
SQL> insert into emp (empno ) values
1 row created.
2 다른 session에서 shutdown
3.
4.
* 이때 만약 _offline으로 지정하면 empno는 rollback이 되고 _corrupted로 지정하면 새로
또한
|