Oracle

오라클 불완전복구 (hotbackup본만 있을경우)

민이단 2023. 8. 4. 13:54

최근 사이트에서 랜섬웨어로 서버자체가 날아간 적이 있다.

작년에 backup 받았던 begin/end 백업이 있었다 하지만 archive log file는 존재하지 않기에..불완전복구로 가야했다.

(expdp full backup본도 있었음)

 

일단 oracle을 설치해서 dumpfile로 tablespace 정보를 빼냈고 생성까지 하였다.

 

expdp log에 ora-01555 error 가 제일 큰 테이블에 있었고 (거의 업무에 모든 자료들 존재하는 300G짜리 테이블이었음..)

해당 테이블은 import가 안되었다.

(SR문의 했으나 .....................)

ORA-31693: Table data object "username"."table_name" failed to load/unload and is being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-01555: snapshot too old: rollback segment number 10 with name "_SYSSMU10_600653064$

 

그래서 hotbackup본을 해당 경로에 넣었고 controlfile을 다시 생성해주었다.

alter database backup controlfile to trace 로 빼냈고 이미 테이블스페이스들은 생성해놓은 상태라 조금의 수정을 하고 resetlogs로 올렸다. 당연히 alter database open resetlogs시 일관성으로 인한 복구필요 메세지가 나면서 open이 안된다.

 

_offline_rollback_segments 를 넣으려 했으나 옛날 롤백세그먼트들의 이름을 몰라서 따로 시도 하지않았고.

 

init file에 아래의 파라미터 두개를 넣고 올리니 open이 되었다.

_ALLOW_RESETLOGS_CORRUPTION=TRUE
_corrupted_rollback_segments=true 
 
히든파라미터 설명
============================================================================================
_corrupted_rollback_segments=true

데이터베이스의 open시 Active한 rollback segment를 통해 Rolling Backward 과정을 수행하게 되는데 이 Rolling Backward 과정을 진행하지 않게함 또한 active한 rollback segment와 undo tablespace를 삭제할 수 있도록 해줌

 

_allow_resetlogs_corruption=true

redo log 의 한계범위 내에서 데이터파일의 SCN이 틀어져 있거나 또는 recover시에 archive를 찾지 못해서 fail났을 경우, 즉 current redo log를 통해서 복구가 불가능할 경우, 억지로 current redo log를 reset log 시키고 open하는 파라미터

============================================================================================

 

이 두가지 파라미터를 초기화파라미터에 넣고 다시 진행하면 정상적으로 올라오는데,
hotbackup 받은 시점에 DB사용이 크게 없어야 정상적으로 올라올것이고 아니라면 일관성이 심하게 다른차이로 인해 안올라 올수도있을것같다..