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할 수 있다. |
'DB - ORACLE > Oracle Trouble Shooting' 카테고리의 다른 글
ORACLE CONTEXT SIZE & CURSORS (0) | 2015.09.07 |
---|---|
Data block이나 Index block이 corrupt 난 경우 (0) | 2015.09.03 |
Oracle Dump 뜨기 스크립트 (0) | 2015.09.02 |
오라클 DB 서버의 CPU 소모 (1) | 2015.08.31 |
SYSAUX tablespace 줄이는 방법 (0) | 2015.08.24 |