_TX_RECOVERY_SUSPEND=Y
대용량 트랜잭션 수행 중 DB가 종료되었을 때, 복구 대상인 트랜잭션들을 undo segment에서 모두 찾아 해당 object에 반영해주는 작업을 수행하게 된다. 대용량 insert 또는 update 도중 DB가 종료된 경우 모두 rollback 처리가 선행되며 이 과정에서 해당 object에 대한 아무런 작업을 할 수 없고 모든 DDL이 수행되지 않는 상태가 되는데 이런 경우 _TX_RECOVERY_SUSPEND
파라미터를 적용해볼 수 있다.
이 방법을 사용한 경우 해당 오브젝트에 대한 정합성을 보장할 수 없으므로, 깔끔하게 제거해주는 것이 좋고 당연히 운영 데이터가 아닌, 개발 과정에서 재생성이 가능한 데이터의 경우에만 적용해야한다.
$TB_SID.tip
파일에 다음 파라미터 추가 후 DB 재기동
vi $TB_HOME/config/$TB_SID.tip
_TX_RECOVERY_SUSPEND=Y
tbboot
- sys 계정으로 접속하여 다음 SQL 수행 결과 확인
SELECT * FROM V$CORRUPT_XID;
- TX 강제 커밋
COMMIT FORCE CORRUPT_XID_ALL;
- tx 대상 오브젝트를 drop, truncate ddl로 정리
- 팁파일 파리미터 제거 후 재기동
tbdown;tbboot
위 방법은 긴급 상황에 고려해볼 수 있겠지만 기본적으로는 해당 트랜잭션 발생 전까지 아카이브 로그를 통해 복구하는 Media Recovery 를 수행하는 것이 좋다.