2012-01-27 3 views
1

테이블에 대한 변경 사항을 캡처하여 로그 또는 저널 테이블에 저장하는 Oracle 패키지를 찾고 있습니다. 예를 들어, 해당 테이블에 이러한 작업을 캡처 것 같은Oracle 용 행 수준 개정 제어?

insert into foo(x,y) values (12,34); 

같은 SQL 문을 실행, 무언가 같이이 기반으로 SQL 문을 생성하는 시설이 있다면

timestamp   who  operation column value 
---------   ---  --------- ------ ----- 
12-JAN-2012 13:22 MH  insert  x   12 
12-JAN-2012 13:22 MH  insert  y   13 

그것은 좋은 것입니다 정보

답변

2

이는 세밀한 감사를 사용하여 수행 할 수 있습니다 : 당신은 또한 문제의 테이블에 대한 플래시백 아카이브를 켤 수있는 대안으로

http://docs.oracle.com/cd/E11882_01/network.112/e16543/auditing.htm#DBSEG525

. 그런 다음 과거의 어떤 시점에서든 테이블 내용을 쿼리 할 수 ​​있습니다. 그것은 가 변경했는지 (그리고 어떻게했는지) 보여주지 않을 것입니다.

1

이것은 삽입시 발생하는 목표 테이블의 간단한 trigger으로 수행 할 수 있습니다. 아마도 이런 식으로 :

CREATE OR REPLACE TRIGGER foo_audit 
AFTER INSERT OR DELETE OR UPDATE ON foo 
FOR EACH ROW 
BEGIN 
    IF INSERTING THEN 
     ... 
    ELSIF UPDATING THEN 
     ... 
    ELSIF DELETING THEN 
     ... 
    END IF; 

END; 
/

이러한 유형의 트리거 형식은 실제로 프로그래밍 방식으로 생성 할 수 있으므로 충분히 간단합니다.