내 데이터베이스의 일부 필드를 모니터링하고 싶습니다. SQL 쿼리가 해당 필드를 특정 값으로 업데이트하면 업데이트를 트리거 한 쿼리를 기록하려고합니다.Oracle DB : 특정 업데이트를 트리거 한 쿼리 가져 오기
어떻게하면됩니까?
미리 감사드립니다.
내 데이터베이스의 일부 필드를 모니터링하고 싶습니다. SQL 쿼리가 해당 필드를 특정 값으로 업데이트하면 업데이트를 트리거 한 쿼리를 기록하려고합니다.Oracle DB : 특정 업데이트를 트리거 한 쿼리 가져 오기
어떻게하면됩니까?
미리 감사드립니다.
좋은 질문입니다. 나를 궁금하게 만들었다. 나는 here이라는 대답을 발견했다. LOGMINER 유틸리티도 여기에 언급되어 있습니다. 들여다 볼만한 가치가 있을까요?
SQL> CREATE OR REPLACE FUNCTION cur_sql_txt
2 RETURN CLOB
3 AS
4 v_cnt BINARY_INTEGER;
5 v_sql ORA_NAME_LIST_T;
6 v_rtn CLOB;
7 BEGIN
8 v_cnt := ora_sql_txt (v_sql);
9 FOR l_bit IN 1..v_cnt LOOP
10 v_rtn := v_rtn || RTRIM (v_sql (l_bit), CHR (0));
11 END LOOP;
12 RETURN RTRIM (v_rtn, CHR (10)) || ';';
13 END;
14/
Function created.
SQL> CREATE OR REPLACE TRIGGER trigger_name
2 BEFORE UPDATE ON emp
3 FOR EACH ROW
4 BEGIN
5 DBMS_OUTPUT.PUT_LINE (cur_sql_txt);
6 END;
7/
Trigger created.
SQL> SET SERVEROUTPUT ON;
SQL> UPDATE emp
2 SET empno = empno,
3 ename = ename
4 WHERE ROWNUM = 1;
UPDATE emp
SET empno = empno,
ename = ename
WHERE ROWNUM =
:"SYS_B_0";
1 row updated.
SQL>
왜 감사 문을 사용하지 않습니까? 이를 통해 테이블에 대한 인스턴스 업데이트를 모니터링 할 수 있습니다.
불행히도 ora_sql_txt 함수가 시스템 이벤트 트리거에서만 작동하는 것 같습니다 (http://www.orafaq.com/forum/mv/msg/90623/272957/0/#msg_272957) . – JCD70
아마도 V $ 뷰를 사용하여이 작업을 수행 할 수 있습니까? – JCD70