2012-08-08 5 views
0

삽입/업데이트 트리거에 의한 마스터 테이블의 변경 사항을 추적하는 감사 테이블이 있습니다. 트리거는 마스터 테이블의 모든 새 필드 값을 감사 테이블에 복사합니다. 감사 테이블에 datetime 열이 있습니다.이 열은 마스터 테이블 (getdate())에서 삽입/업데이트가 발생한 시간을 추적합니다.
기본 키와 시간 열에 고유 한 인덱스가 있습니다. 문제는 업데이트가 마스터 테이블에서 거의 동시에 발생하고 고유 키 위반으로 종료되는 경우입니다. 나노초 수준의 정밀도를 캡처하는 datetime 유형이 있습니까?sybase의 datetime 열에 대한 Nano second precision

답변

1

DB는 본질적으로 ACID를 통해 동일한 레코드의 업데이트를 처리해야합니다. 단기간에 "너무 많은 업데이트"를 방지하기 위해 공동 master_table_id/updatetime 기본 키를 사용하여 감사 테이블을 "Cheesing"하는 것은 올바른 접근법이 아닙니다 ... 특히 새 하드웨어를 통해 성능이 향상되는 경우 ... pk가 막는 "합법적 인"업데이트.

나는 싫지만 어떤 유형의 작업을 수행하고 있는데, 몇 밀리 초 단위로 동일한 행을 여러 번 업데이트합니까? 일부 JDBC 또는 ADO 연결을 통해 동일한 PK에 대해 col2, col3, col4를 모두 업데이트 하시겠습니까?

저장 프로 시저에 대한 입력을 통해 이러한 "많은"업데이트를 1 개의 저장 프로 시저 호출로 일괄 적으로 처리 할 수 ​​있습니까? 이렇게하면 감사 추적이 빨라지고 변동폭이 줄어 듭니다.

+0

언급 한대로 우리는 결과 호출에서 여러 열을 업데이트하려고합니다. updateddate를 말한 다음 updatedby를 말하십시오. 커스텀 빌트인 ORM을 사용하고 있기 때문에 서버에서 실행되는 스크립트에 대해 확신 할 수 없습니다. (일괄 업데이트 또는 개별 업데이트 구문). ORM이 두 가지 다른 업데이트 호출로 실행하기로 결정한 경우이 문제가 발생합니다. – sundar

+0

ORM을 통해 DB에 연결 한 적이 없어서 도움이되지 않습니다. 나는 당신의 설명이 다른 누군가의 대답을 도울 것이라고 생각하기 때문에 대답을 떠날 것입니다. 귀하의 질문에 ORM 태그를 추가했습니다. – Hotel