완소완소♡
플래시백 트랜잭션 쿼리(Flashback transaction query) 기능은 임의의 SQL 문장을 수행하고 난 후 임의의 시점에서 다시 그 SQL 문장의 결과를 원래대로 되돌리게 할 수 있는 기능을 제공한다. 플래시백 트랜잭션 쿼리 기능을 적용하기 위해서는 다음과 같은 flashback_transaction_query 라는 뷰를 사용할 수 있다.
desc flashback_transaction_query;
< 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을 확인하는 습관이 필요하다.
플래시백 트랜잭션 쿼리(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을 확인하는 습관이 필요하다.