SNR#3525 SQL Server datetime 기준열 사용 시 마지막 행이 중복 수집되는 문제 해결

버전: 4.0.2609.0

JDBC 수집기에서 기준열을 SQL Server의 datetime 타입 컬럼으로 사용하면, 수집 주기마다 직전 주기의 마지막 행이 다시 수집되어 로그가 중복 적재되는 문제를 해결했습니다.

  • 원인: SQL Server의 datetime 타입은 초 이하를 1/300초 단위(약 3.33ms)로 저장하는데, JDBC는 이 값을 밀리초 단위로 반올림해서 반환합니다. 반올림된 값을 다음 조회 조건에 그대로 사용하면 실제 저장된 값보다 이전 시점으로 판정되어, 이미 수집한 마지막 행이 다음 주기에서 다시 조회되었습니다.
  • 해결: datetime 타입 기준열에 대해서는 다음 조회 시작 위치를 저장된 값보다 확실히 이후로 진행시켜, 이미 수집한 행이 다음 주기의 조회 대상에서 제외되도록 수정했습니다.

적용 조건은 아래 두 가지를 모두 만족하는 경우입니다.

  • JDBC 프로파일의 연결 문자열이 jdbc:sqlserver: 또는 jdbc:jtds:sqlserver:로 시작하는 경우
  • 기준열(column 또는 column2)의 타입이 SQL Server datetime인 경우(datetime2, smalldatetime, datetimeoffset 타입은 영향 없음)