프린트 하기

OS환경 : Oracle Linux 6.8 (64bit)


DB 환경 : Oracle Database 11.2.0.4


방법 : 테이블 dml 이력 확인 업데이트 인서트 딜리트 이력 확인

DBA_TAB_MODIFICATIONS 컬럼을 확인

emp2 테이블을 생성

1
SQL> create table emp2 as select * from emp;



emp2 테이블을 업데이트 및 커밋

1
2
3
SQL> update emp2 set empno=2;
 
SQL> commit;



dml 이력을 확

1
2
3
4
5
6
7
SQL> SELECT INSERTS, UPDATES, DELETES
FROM DBA_TAB_MODIFICATIONS
WHERE TABLE_NAME = 'EMP2';
 
   INSERTS    UPDATES     DELETES
---------- ---------- ----------
     0       14           0

#update 14건을 확인 가능함(emp 테이블 데이터가 14건)



emp2 테이블에 인서트

1
2
3
SQL> insert into emp2 select * from emp;
 
SQL> commit;



dml 이력을 확인

1
2
3
4
5
6
7
SQL> SELECT INSERTS, UPDATES, DELETES
FROM DBA_TAB_MODIFICATIONS
WHERE TABLE_NAME = 'EMP2';
 
   INSERTS    UPDATES     DELETES
---------- ---------- ----------
     14       14           0

#insert 14건을 확인 가능함



emp2 테이블에 인서트 작업을 한번 더 시도(커밋없이)

1
SQL> insert into emp2 select * from emp2;



커밋하지 않고 dml 이력을 확인

1
2
3
4
5
6
7
SQL> SELECT INSERTS, UPDATES, DELETES
FROM DBA_TAB_MODIFICATIONS
WHERE TABLE_NAME = 'EMP2';
 
   INSERTS    UPDATES     DELETES
---------- ---------- ----------
    42        14           0

#insert 28건(총 42건)을 확인 가능함



커밋하지 않고 롤백

1
SQL> rollback;



롤백한 뒤 dml 이력을 확인

1
2
3
4
5
6
7
SQL> SELECT INSERTS, UPDATES, DELETES
FROM DBA_TAB_MODIFICATIONS
WHERE TABLE_NAME = 'EMP2';
 
   INSERTS    UPDATES     DELETES
---------- ---------- ----------
    42        14           0

#insert 값이 그대로인것을 확인 가능함



정리

commit 여부와 상관없이 insert 또는 update가 일어나면

무조건 DBA_TAB_MODIFICATIONS 에서는 업데이트가됨



DBA_TAB_MODIFICATIONS 테이블의 구조

1
2
3
4
5
6
7
8
9
10
11
12
13
SQL> desc DBA_TAB_MODIFICATIONS
 Name                                                           Null?    Type
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 TABLE_OWNER                                                            VARCHAR2(128)
 TABLE_NAME                                                            VARCHAR2(128)
 PARTITION_NAME                                                         VARCHAR2(128)
 SUBPARTITION_NAME                                                        VARCHAR2(128)
 INSERTS                                                            NUMBER
 UPDATES                                                            NUMBER
 DELETES                                                            NUMBER
 TIMESTAMP                                                            DATE
 TRUNCATED                                                            VARCHAR2(3)
 DROP_SEGMENTS                                                            NUMBER





참조 :