TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-14 |
제목 | ROLLBACK SEGMENT의 NEED RECOVERY 상태 해결 | ||
---|---|---|---|
ROLLBACK SEGMENT의
============================================ * 롤백세그먼트의 정보를 보여주는 dba_rollback_segs를 보면 status 컬럼이 있다. 일반적으로 이 컬럼은 online/offline 값을 갖지만 롤백 세그먼트가 손상된 경우에는 Needs Recovery 값을 갖게 된다. * Needs Recovery 상태의 롤백 세그먼트는 Online/Offline 으로 변경하거나 init 해결되지 않는다. Needs Recovery 상태가 생기는 이유는 롤백 과정에서 어떤 이유에서든 문제가 생겨서 실패하기 때문이다. 롤백은 사용자가 Rollback 명령을 내린 경우와 Shutdown Abort 후 Startup 시에 자동적으로 수행되는 Instance Recovery 시에 일어난다. * 롤백이 일어나면 수정된 데이타 블럭에 기록된 결과는 취소되어야 하지만 해당 데이타 블럭에 접근이 불가능하여 롤백 작업을 하지 못하면 롤백 세그먼트의 상태가 Needs Recovery 상태로 되는 것이다. * 데이타 블럭에 접근이 불가능한 경우로는 다음과 같은 예가 있다. 1. Tablespace나 데이타 화일이 Offline 이거나 없는 경우 2. 해당 데이타 블럭이 속한 Object가 손상된 경우 3. Rollback Segment의 데이타 블럭이 손상된 경우 * 이 문제를 해결하는 방법은 다음과 같다. 1. 모든 tablespace와 datafile이 online 상태인지를 확인한다. 이것은 DBA_DATA_FILES 와 DBA_TABLESPACES 의 STATUS 컬럼을 조회하면 알 수 있다. 2. 다음 문장을 init event = "10015 trace name context forever, level 10" 위의 Event는 롤백하는 트랜잭션과 Object에 관한 정보를 담은 Trace File을 생성시켜 준다. 3. 손상된 롤백 세그먼트를 init 삭제한다. 4. 데이타베이스를 Shutdown (가능한 Normal, Immediate를 사용하고, 안 될 경우 Abort를 사용하고 다시 Startup 한다.) 5. USER_DEMP_DEST에 지정된 디렉토리에 Trace 화일이 생성되었는지 확인한다. 6. Trace 화일을 보면 Error Recovery tx(#, #) Object # 와 같은 메세지가 있을 것이다. 여기서 tx(#, #)은 트랜잭션의 정보를 가리키고 Object # 는 DBA_OBJECTS의 OBJECT_ID 와 같다. 7. 다음의 Query를 이용하여 어떠한 Object에 대해서 Recovery 가 수행되는가를 확인한다. select owner, object_name, object_type, status from dba_objects where object_id= |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |