본문 바로가기
프로젝트/자리 있어요?

[OracleDB] DB에서 잘못 삭제한 data 복구

by 규글 2022. 8. 26.

DB에서 잘못 삭제한 data 복구

 코드를 수정하고 테스트하는 과정에서 DB의 data가 잘못 변경된 내용들을 eclipse에서 임의로 수정하여 복구하다가 잘못 클릭하는 바람에 매장을 update하는 것이 아니라 delete 해버렸다. 값이야 임의로 넣어 다시 만들어주면 되는 거였지만, 이런 내용을 원상복구하는 방법이 있을 것이라고 생각해서 검색해보았다.

 

insert into store
select *
from store
as of timestamp(systimestamp-interval '10' minute)
where num=1

 Oracle에는 9i 이후에 timestamp 라는 친구를 지원한다고 한다. 물론 일정 시간 지난 후에는 복구할 수 없지만, 당장 몇 분 전의 data가 지워지는 것은 아닌 것 같다. 해당 방법은 이곳[각주:1] 에서 찾았으며, 비슷한 방법을 소개하는 oracle docs의 내용[각주:2] 도 있었다.

 

select *
from store
as of timestamp to_timestamp('2022-08-26 17:00:00', 'yyyy-mm-dd hh24:mi:ss')
where num=1

 

DB의 table도?

 그렇다면 data 말고 table도 복구할 수 있지 않을까? Oracle 10g 버전 이후부터는 recyclebin 이라는 휴지통 개념의 친구를 제공한다고 한다.

 

select * from recyclebin;

 Query문을 입력하면 위와 같은 내용을 볼 수 있다. 만약 여기서 drop된 table을 복구하고자 한다면 다음과 같이 query문을 작성하면 된다.

 

flashback table storeMenu to before drop;

 해당 내용은 직접 작성해본 것은 아니지만, 이와 같이 작성하면 수행될 것으로 생각한다. 해당 내용은 oracle docs[각주:3] 와 어떤 이의 블로그[각주:4] 를 참고했다.

댓글