Row Level Flashback

- 다음과 같이 kim 을 hong 으로 yeon 을 choi 로 update 를 수행 했습니다.

- 이제 hong 의 data 를 원래의 kim 으로 돌려 보겠습니다.

- 이 때 필요한 쿼리가 있는데 Flashback Version Query 입니다. 이 쿼리는 해당 데이터의 과거 변경 이력을 전부 찾아주는 쿼리 입니다. 9i 에서는 Flashback Query 가 지원되었는데 이는 특정 시점의 변경 내역만 알 수 있었습니다.

꼬한 Oracle 10g 부터 Version Query 가 추가 되면서 특정 시점만 조회하던 것보다 많은 구간을 검색할 수 있게 되었습니다.

Flashback Transaction Query 는 변경 사항을 취소시켜 이전 값으로 돌려주는 쿼리 입니다.

 

- 우선 데이터를 복구하기 위해 변경 이력을 확인해 보겠습니다.

- 위 내용은 kim 이 Insert(I) 되었다가 hong 으로 update(U) 되었다는 의미입니다. 이때 위와 같이 변경 건수가 적다면 찾기가 쉬울 수 있으나 여러 번의 변경이 이루어졌다면 시간으로 짐작을 해야 합니다. 이 때 변경 시간 확인은

Scn_to_timestamp() 라는 함수를 이용하여 추적 가능합니다.

 

SQL>select scn_to_timestamp(1156551) from dual;

- 위 내용을 보면 scn 번호 1156551 이 11년 10월 3일 8시 39분 00 초에 발생한 것을 확인할 수 있습니다.

- 이렇게 변경 사항을 찾은 뒤 transaction Query 를 수행하여 원래 데이터로 돌리면 됩니다.

- Flashback version Query (권한 필요 없음)

- Flashback transaction Query (Flashback_transaction_query 라는 뷰를 select 할 수 있는 권한이 필요)

- 권한이 없다면 다음과 같은 오류가 발생

SQL>grant select any transaction to scott;

- 가장 위의 쿼리가 변경해야하는 작업의 쿼리이므로 실행

'Oracle > Backup&Recover' 카테고리의 다른 글

Recovery Catalog 구성  (0) 2011.10.06
Control File Backup (DB Open or DB mount)  (0) 2011.10.05
백업파일이나 아카이브 로그에 문제 있을 때 복구하기  (1) 2011.10.04
SQL Loader  (0) 2011.10.04
DB Link 설정  (0) 2011.09.30

+ Recent posts