2010-01-28 6 views

답변

6

모니터링 관점 (이전 변경 사항 제외)에는 트리거, 스트림 및 sysdate의 기본값이있는 열을 비롯한 몇 가지 옵션이 있지만 이에 국한되지는 않습니다. 트리거를 사용하면 레코드가 변경 될 때마다 (삽입, 업데이트, 삭제) 프로그래밍 로직 (트리거 또는 외부 데이터베이스 객체에 직접 저장 됨)을 실행할 수 있습니다. 스트림은 리두 로그를 모니터링하여 변경 사항을 추적하는 데 사용할 수 있습니다. 가장 쉬운 방법 중 하나는 디폴트 값이 sysdate 인 날짜 컬럼을 추가하는 것입니다.

+0

안녕하세요, 저는 이미 마지막 옵션을 사용하고 sysdate의 기본값으로 날짜 열을 추가합니다. 다른 옵션이 있는지 궁금해 할뿐입니다. 감사합니다! –

0

user_objects 뷰에서 last_ddl_time을 쿼리하여 테이블 정의가 변경되었는지 확인할 수 있습니다.

트리거 또는 구체화 된 로그 (전체 해킹)를 사용하지 않으면 테이블의 특정 행이 업데이트 된시기를 알 수 없습니다.

4

거래 내외에서 이야기하고 있습니까? 우리는 우리의 DML 성공 여부를 확인하기 위해 SQL의 %의 ROWCOUNT 같은 것들을 사용할 수 있습니다 우리의 프로그램 내에서

...

SQL> set serveroutput on size unlimited 
SQL> begin 
    2  update emp 
    3  set job = 'SALESMAN', COMM=10 
    4  where empno = 8083; 
    5  dbms_output.put_line('Number of records updated = '||sql%rowcount); 
    6 end; 
    7/
Number of records updated = 1 

PL/SQL procedure successfully completed. 

SQL> 

는 또한 우리가 발견 SQL의 % (또는 SQL %의 NOTFOUND)을 테스트 할 수 있습니다.

트랜잭션 외부에서 레코드가 변경되었는지 여부를 확인하기 위해 ORA_ROWSCN을 모니터링 할 수 있습니다.

SQL> select ora_rowscn from emp 
    2 where empno = 8083 
    3/

ORA_ROWSCN 
---------- 
    83828715 

SQL> update emp 
    2  set comm = 25 
    3  where empno = 8083 
    4/

1 row updated. 

SQL> commit 
    2/

Commit complete. 

SQL> select ora_rowscn from emp 
    2 where empno = 8083 
    3/

ORA_ROWSCN 
---------- 
    83828780 

SQL> 

기본적으로 ORA_ROWSCN은 블록 수준에서 설정됩니다. 낮은 레벨에서 추적하려면 ROWDEPENCIES 키워드로 테이블을 작성해야합니다.

이들은 임시 솔루션입니다. 능동적 인 모니터링을 원한다면 어떤 형태의 로깅을 구현해야합니다. 트리거를 사용하여 로그 레코드를 작성하는 것이 일반적인 해결책입니다. Enterprise Edition을 사용하는 경우 Fine Grained Auditing을 고려해야합니다. Dan Morgan의 라이브러리는 useful demo of how to use FGA to track changes입니다.

+0

안녕하세요, APC, URL 주셔서 감사합니다 :) –

관련 문제