2009-09-14 4 views
0

다른 시스템의 데이터는 Goldengate를 사용하여 실시간으로 SQL Server 2005 데이터베이스에 복제됩니다 (하루 동안은 수백 건의 트랜잭션입니다). 최근에 거래가 있었는지 알 수 있기를 원합니다. 복제가 현재 일어나고 있는지 알려줄 것입니다. 근무 시간 외에도 몇 분 간격으로 거래를 기대할 수 있지만 400 개의 테이블 중 어느 것이 들어갈 지 알 수 없습니다.는 "동기화 알림"테이블에 가장 최근의 SQL Server 데이터베이스 활동 찾기

  • 업데이트 날짜가 해당 테이블에 어떤 활동이있을 때마다
  • SQL 에이전트 작업마다 몇 실행 가장 인기있는 복제 된 테이블에

    1. IUD 트리거 :

      여기에 내 현재 프로세스의 이 날짜를 GETDATE()와 비교합니다. 너무 길면 이메일로 알려줍니다.

    이것은 대부분 작동하지만, 모니터가 아닌 다른 테이블에 활동이있는 경우 오탐 (false positive)이 발생합니다. 이는 밤새 발생할 수 있습니다.

    데이터베이스의 모든 테이블에 동일한 트리거를 추가하는 것 외에 다른 제안 사항이 있습니까? 트리거를 추가하면 "동기화 알림"테이블에서 교착 상태와 경합을 방지하는 방법은 무엇입니까? 고 콘텐 튼 기간 동안 가장 최근 날짜가 정확한지 신경 쓰지 않기 때문에 SQL에서 날짜를 업데이트 할 수있는 방법이 있습니까? 다른 프로세스가 잠근 경우 SQL을 건너 뛸 수 있습니까?

    내가 가진 유일한 "응용 프로그램 수준"선택은 Goldengate 모니터에 TELNET을 보내고 복제 지연을 요청한 다음 결과를 스크랩하는 것입니다. 나는 그것에 대해 개방적이지만 가능한 경우 SQL 측에 뭔가를하고 싶습니다.

  • +0

    어떤 버전의 SQL Server입니까? – RedFilter

    +0

    내 질문에 버전을 추가했습니다. – SqlRyan

    답변

    2

    자동 작업이나 지금보고 싶은 항목입니까? 후자의 경우 트랜잭션 로그 검사 도구 (Redgate Log Rescue, Apex SQLLog 등)를 사용할 수 있습니다.

    또 다른 옵션은 sysindexes (SQL Server 2000 : dbo.sysindex; 2005 : sys.sysindexes)입니다. 열 rowmodctr (MSDN을 인용) "테이블에 대한 통계가 마지막으로 업데이트 된 이후에 삽입, 삭제 또는 업데이트 된 행의 총 수를 계산합니다". 그것은 당신이 알아야 할 모든 것을 반환하지는 않을 것이지만, 당신이 커버하는 인덱스를 가지고 있다면, 그것은 정기적으로 샘플링한다면 얼마나 많은 그리고 어디서 변화가 있었는지를 알려줄 것입니다.

    +0

    두 가지 모두를 선호합니다. 자동화 된 프로세스를 사용하여 1 분에서 2 분 정도의 시간을두고 이메일에 "제한 시간 내에"동기화되지 않으면 이메일을 보내고 싶습니다. 데이터를 최신 상태로 유지해야하는 특정 동기화에 중요한 프로세스를 실행할 때 필요합니다. "select sum (rowmodctr) from sys.sysindexes"를 실행하면 몇 초마다 업데이트되는 것으로 보이므로이 방법이 제가 끝날 수도 있습니다. – SqlRyan

    +0

    이것은 챔피언처럼 작동합니다 - 감사합니다! – SqlRyan

    1

    SELECT * FROM ::fn_dblog(@startLSN, NULL)을 점검하고 마지막 체크 이후 LOP_MODIFY_ROW 작업이 발생했는지 (마지막으로 확인한 이후) 확인하십시오.

    +0

    현재 단순 로깅을 사용하고 있습니다.이 방법을 사용하려면 전체 로깅을 사용하도록 설정해야합니까? – SqlRyan

    +0

    예, 전체 또는 대량 복구 모델이 필요합니다. 단순 복구 모델을 사용하면 검사 점이 발생하자마자 로그 레코드를 삭제하고 다시 사용할 수 있습니다. –

    관련 문제