데이터베이스에서 수정 된 행을 추적하기 위해 Oracle SCN을 사용할 수 있습니까? 목표는 특정 테이블에서 수정 된 모든 행에 대해 x 분마다 데이터베이스를 쿼리하는 것입니다. 아이디어는수정 된 행의 Oracle SCN 보관 트랙 사용
SELECT current_scn FROM V$DATABASE;
를 사용하여 현재 SCN을 기억 한 후 X 분 후 난 그냥 그 이후로 변경된 모든 행을 얻을
SELECT * from mytable where ORA_ROWSCN > current_scn_x_minutes_ago;
같은 쿼리를 실행하는 것 (그리고 따라서이 높은 SCN). SCN이 블록 단위로 관리되기 때문에 쿼리가 너무 많은 결과를 반환한다는 것을 알고 있지만 이것은 중요하지 않습니다. 내가 가진 주요 질문은 SCN이 엄격하게 증가하는지 여부, 즉 다음 생성 된 SCN이 항상 현재 SCN (V $ DATABASE에서 쿼리 됨)보다 높은지 아니면 SCN_TO_TIMESTAMP 함수를 사용하여 순서가 맞는지 여부입니다. 옳은.
답해 주셔서 감사합니다. 우리는 ROWDEPENDENCIES를 사용하여 세분화 된 ORA_ROWSCN을 사용하지 않으며이 설정으로 테이블을 다시 생성 할 수 없습니다. 따라서 위에서 언급 한 규칙이 블록 수준에도 적용되는지 또는 다시 말하면되는지 여부는 다음과 같습니다. "트랜잭션 T1이 블록 B1에 속하는 행 R1을 수정하고 트랜잭션 T2가 블록 B2에 속한 행 R2를 수정하고 T2 후에 T1이 발생하면 T1의 커밋이 T2의 커밋 후에 R2의 ORA_ROWSCN보다 낮을 것을 보장 한 후에 R1의 ORA_ROWSCN (우리가 세분화 된 ORA_ROWSCN을 사용하지 않는다고 가정)은 무엇입니까? " –