블로그 이미지
신비마마

태그목록

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

calendar

1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Flashback transaction query 기능

2009. 10. 27. 19:00 | Posted by 신비마마
완소완소♡

플래시백 트랜잭션 쿼리(Flashback transaction query) 기능은 임의의 SQL 문장을 수행하고 난 후 임의의 시점에서 다시 그 SQL 문장의 결과를 원래대로 되돌리게 할 수 있는 기능을 제공한다. 플래시백 트랜잭션 쿼리 기능을 적용하기 위해서는 다음과 같은 flashback_transaction_query 라는 뷰를 사용할 수 있다.

desc flashback_transaction_query;
Column Name ID Data Type Comments
XID 1 RAW (8) Transaction identifier
START_SCN 2 NUMBER Transaction start SCN
START_TIMESTAMP 3 DATE Transaction start timestamp
COMMIT_SCN 4 NUMBER Transaction commit SCN
COMMIT_TIMESTAMP 5 DATE Transaction commit timestamp
LOGON_USER 6 VARCHAR2 (30 Byte) Logon user for transaction
UNDO_CHANGE# 7 NUMBER 1-based undo change number
OPERATION 8 VARCHAR2 (32 Byte) forward operation for this undo
TABLE_NAME 9 VARCHAR2 (256 Byte) table name to which this undo applies
TABLE_OWNER 10 VARCHAR2 (32 Byte) owner of table to which this undo applies
ROW_ID 11 VARCHAR2 (19 Byte) rowid to which this undo applies
UNDO_SQL 12 VARCHAR2 (4000 Byte) SQL corresponding to this undo

< DML 실행시 가져야할 좋은 습관(?) >
Step1. DML 문장(insert, delete, update) 실행 전 현재 SCN을 확인
          -> select current_scn from v$database;
Step2. DML 문장 실행
Step3. DML 문장(insert, delete, update) 실행 후 현재 SCN을 확인
          -> select current_scn from v$database;
Step4. 이미 Commit 한 DML 문장의 UNDO가 필요하다면, flashback_transaction_query View의 UNDO_SQL 컬럼 데이터를 조회(해당 뷰는 일반User조회불가)
          -> select undo_sql
                 from flashback_transaction_query
               where commit_scn between 실행전SCN and 실행후SCN
                   and table_owner = '테이블오너명'
                   and table_name = '테이블명';


그러니까, DML 문장(insert, delete, update) 실행 전/후로 현재 SCN을 확인하는 습관이 필요하다.