Oracle 테이블이 마지막으로 업데이트된 시기를 확인하는 방법
Oracle 데이터베이스의 테이블에서 마지막으로 INSERT, UPDATE 또는 DELETE 스테이트먼트를 실행한 시기와 실행한 경우 그 방법을 알 수 있습니까?
약간의 배경:Oracle 버전은 10g입니다.정기적으로 실행되어 단일 Oracle 테이블에서 데이터를 읽고 파일에 쓰는 배치 애플리케이션이 있습니다.지난번 작업 실행 후 데이터가 변경되지 않았다면 생략하고 싶습니다.
애플리케이션은 C++로 작성되어 OCI를 통해 Oracle과 통신합니다.일반 사용자로 Oracle에 로그인하기 때문에 특별한 관리 작업을 사용할 수 없습니다.
편집: "Special Admin Stuff"는 적절한 설명이 아닙니다.즉, 테이블에서 SELECT와 스토어드 프로시저를 호출하는 것 외에는 아무것도 할 수 없습니다.데이터베이스 자체에 대한 변경(트리거 추가 등)은 안타깝게도 2010년 이전에 완료해야 하는 경우에는 선택사항이 아닙니다.
난 이 파티에 정말 늦었지만 이렇게 했어.
SELECT SCN_TO_TIMESTAMP(MAX(ora_rowscn)) from myTable;
내 목적에는 충분히 가깝습니다.
이므로 10g을할 수 .ORA_ROWSCN
변경 의 상한을 합니다.이것에 의해, 행의 변경을 일으킨 마지막 SCN(시스템 변경 번호)의 상한이 표시됩니다. 순서는 수열은 할 수 .ORA_ROWSCN
SCN을 사용하다
" " " 입니다.ORA_ROWSCN
블록레벨로, 「」가 됩니다.ORA_ROWSCN
블록의 모든 행에 적용됩니다." 패턴의 번 하는 행 를 최소화하는 합니다.일반" 데이터 액세스 패턴을 말하는 경우 변경 없이 여러 번 처리하는 행 수를 최소화하는 것으로 충분합니다.은 다시 수 있습니다.ROWDEPENDENCIES
, 「」의 이 됩니다.ORA_ROWSCN
을 사용하다이것에 의해, 보다 상세한 정보를 얻을 수 있습니다만, 테이블을 재구축하기 위해서는 일회성이 필요합니다.
또 다른 옵션은 Change Data Capture(CDC; 변경 데이터 캡처)와 같은 것을 설정하고 OCI 애플리케이션을 테이블 변경 서브스크라이버로 하는 것입니다만, CDC 의 설정에도 1 회분의 작업이 필요합니다.
감사에 대해서는 DBA에게 문의하십시오.다음과 같은 간단한 명령으로 감사를 시작할 수 있습니다.
AUDIT INSERT ON user.table
그런 다음 USER_AUDIT_OBJECT 테이블을 조회하여 마지막 내보내기 이후 테이블에 삽입이 있는지 확인할 수 있습니다.
자세한 내용은 Oracle 감사용 구글...
SELECT * FROM all_tab_modifications;
결과에 대한 체크섬을 실행하여 로컬에 저장해 주시겠습니까?그러면 응용 프로그램이 데이터베이스를 쿼리할 때 체크섬을 비교하여 가져올지 여부를 결정할 수 있습니다.
ORA_를 사용할 수 있을 것 같습니다.이를 실현하기 위한 해시 함수.
업데이트: 다른 좋은 리소스: 10g의 ORA_두 Oracle 테이블의 데이터가 동일한지 여부를 확인하는 해시 함수
Oracle은 테이블에서 변경을 감시하고 변경이 발생했을 때 PL/SQL 또는 OCI에서 콜백 기능을 실행할 수 있습니다.콜백은 변경된 테이블 집합이며 변경된 rowid 집합과 작업 유형인 Ins, upd, del을 포함하는 개체를 가져옵니다.
테이블로 가지도 않고 앉아서 부르기를 기다리는군요써야 할 변경 사항이 있을 때만 갈 수 있습니다.
데이터베이스 변경 알림이라고 합니다.Justin이 언급한 CDC보다 훨씬 간단하지만 둘 다 고급 관리 기능이 필요합니다.좋은 점은 어느 쪽도 어플리케이션을 변경할 필요가 없다는 것입니다.
주의할 점은 CDC는 대용량 테이블에 적합하지만 DCN은 적합하지 않다는 것입니다.
서버상에서 감사가 유효하게 되어 있는 경우는, 다음의 순서에 따라 주세요.
SELECT *
FROM ALL_TAB_MODIFICATIONS
WHERE TABLE_NAME IN ()
삽입, 업데이트, 삭제 시 다른 테이블의 값을 sysdate로 설정하는 트리거를 추가해야 합니다.
응용 프로그램을 실행하면 값을 읽고 어딘가에 저장하여 다음에 실행할 때 비교할 참조가 있습니다.
"특별 관리 업무"를 고려해 보시겠습니까?
당신이 실제로 무엇을 하고 있는지 묘사하는 것이 더 낫습니다. 그래야 더 명확한 답을 얻을 수 있습니다.
배치 프로세스가 파일을 쓰는 데 얼마나 걸립니까?파일을 그대로 두고 이전 실행 파일의 복사본과 비교하여 동일한지 확인하는 것이 가장 쉬운 방법입니다.
아직 답을 찾고 있는 사용자가 있다면 Oracle 10g과 함께 제공되는 Oracle Database Change Notification 기능을 사용할 수 있습니다.그것은 필요하다CHANGE NOTIFICATION
할 수 .수신기를 등록하고, 언제 통지를 트리거 할지를 애플리케이션에 되돌릴 수 있습니다.
아래 문구를 사용하세요.
select * from all_objects ao where ao.OBJECT_TYPE = 'TABLE' and ao.OWNER = 'YOUR_SCHEMA_NAME'
언급URL : https://stackoverflow.com/questions/265122/how-to-find-out-when-an-oracle-table-was-updated-the-last-time
'programing' 카테고리의 다른 글
Spring MVC에서 @ResponseBody를 사용할 때 MIME 유형 헤더를 설정하려면 어떻게 해야 합니까? (0) | 2023.02.27 |
---|---|
Woocommerce에서 활성화된 모든 결제 방법 나열 (0) | 2023.02.27 |
입력 유형 = 파일에서 선택한 이미지를 반응으로 표시하는 방법JS (0) | 2023.02.27 |
Oracle에서는 뷰를 통해 레코드를 삽입하거나 업데이트할 수 있습니까? (0) | 2023.02.27 |
세션이 만료되었습니다. 다시 로그인하십시오. (0) | 2023.02.27 |