Site icon DBA의 정석

Rollback segment corrupt error message가 발생 했을 경우에

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 
SQL> set transaction use rollback segment r01


      Transaction set.


     SQL> insert into emp (empno ) values
(1111);


      1 row created.


2  다른 session에서 shutdown
abort


3.
       
init.ora
_offline_rollback_segment=(r01)

지정


4.
       
startup.


 


* 이때 만약 _offline으로 지정하면 empno rollback 되고 _corrupted 지정하면 새로
입력한 1111 된다. _offline _corrupted 차이는 분명하다.


또한
현재 active tx 있더라도 위의 _offline, _corrupted
사용하면 tx 대한 check없이 drop 있다.


 

Exit mobile version