2011-10-06 4 views
1

우리는 임베디드 장치의 로그 데이터에 대한 상세한 아카이브가 보관되는 웹 응용 프로그램을 보유하고 있습니다. 우리는 내부 분석을 위해이 상세한 데이터를 보관하려고하지만이 데이터는 공용 액세스가 가능한 프로덕션 서버에서 3 개월 이상 필요하지 않습니다. 웹 응용 프로그램은 새 데이터 만 삽입하며 자세한 데이터는 업데이트되거나 삭제되지 않습니다.공개 프로덕션 서버에서 내부 아카이브 서버로 데이터 보관

우리는 프로덕션 서버 (지난 3 개월 포함)에서 새 데이터의 사본을 정기적으로 (예 : 매일) 가져온 다음 3 개월이 지난 모든 데이터를 프로덕션 서버에서 제거하려는 아카이브 시스템을 구축하고자합니다 .

불행히도 일부 임베디드 기기가 일부 시간 (수 주에서 수주) 동안 오프라인 상태 인 경우가 있습니다. 이 경우 이미 복사/보관 된 시간 동안 새 데이터가 시스템에 추가 될 수 있습니다.

공용 프로덕션 서버에서 우리는 내부 아카이브 시스템에서 SQL Server 2008 R2 Enterprise Edition을 사용하여 아카이브의 파티션 및 압축의 이점을 얻으려는 SQL Server 2008 Standard Edition을 사용하고 있습니다. 순간

나는 다음과 같은 접근 방법을 고려하고 : 아카이브 시스템으로 생산 데이터의

  1. 매일 복제. 프로덕션 환경의 오래된 데이터가 삭제되면 아카이브 시스템에 복제되어서는 안됩니다. 복제 대상에서 삭제 작업을 무시하는 옵션을 발견했습니다.

  2. 아카이브 시스템에 현재 데이터가 있어야한다는 요구 사항이 없으면 정기적으로 특정 시간보다 오래된 모든 데이터를 아카이브 시스템으로 이동합니다. 하지만 현재 데이터를 동기화하고 모든 이전 데이터를 이동해야합니다.

    아마도 혼합 솔루션을 사용해야합니다. 아카이브 및 프로덕션 시스템 간의 현재 데이터를 동기화하고 아카이브 시스템의 아카이브 테이블로 이전 데이터를 이동하는 복제 (현재 테이블에서 아카이브 된 데이터의 삭제를 복제하는 동안 복제 생산 시스템에).

당신은 어떻게 생각하십니까? 그러한 문제에 대한 몇 가지 권장 사항이나 모범 사례를 알고 있습니까? 이 주제는 다른 곳 (예 : 서적)에서 다루고 있습니까?

대단히 감사합니다.

추신 :이 질문은 여기 또는 serverfault에 문의해야하는지 확실하지 않습니다. 여기에 게시하는 내 결정이 잘못 되었다면 이동하십시오. 감사.

답변

1

당신이 할 수있는 한 가지는 웹 앱을 두 DB에 동시에 삽입하는 것입니다. 이 방법으로 아카이브는 prod db에 종속되지 않습니다. 조금도.

뚜껑을 분할하는 것도 좋습니다. DB를 사용하여 DB에서 데이터를 쉽게 제거 할 수 있습니다. (그러나 prod DB는 표준판이므로 옵션이 아닙니다.)이 경우, prod DB에서 행을 삭제해야 할 수 있습니다. 삭제를 수행하려면 한 트랜잭션에서 전체 삭제를 수행하지 마십시오. 당신은 그것을 배치로 나누고 싶을지도 모른다.

마지막으로 삭제를 수행하는 동안 tlog 성장을 면밀히 관찰하십시오. 그것은 꽤 빨리 커질 수 있습니다.

1

보관해야하는 테이블 수는 몇 개입니까?

하나 또는 소수의 테이블 인 경우 SQL Server Agent를 통해 정기적으로 SQL을 실행할 수 있습니다. 이 (매우 간단)와 같은

뭔가 :

일이 예를 들어 위하여
-- copy to archive database 
insert into ArchiveServer.dbo.ArchiveTable (Column1, Column2, ...) 
select Column1, Column2, ... 
from ProductionTableOnThisServer 
where DateColumn < dateadd(m, -3, getdate()) 

-- delete in production database 
delete from ProductionTableOnThisServer 
where DateColumn < dateadd(m, -3, getdate()) 

, 그것은 아카이브 서버에 linked server로 구성해야합니다 프로덕션 서버에서 실행해야 프로덕션 서버.

물론이 작은 예는 완벽하지 않습니다.
기본 아이디어 만 표현했습니다. 실제 데이터가 삭제되지 않도록 보관 어떤 이유로

  • 작동하지 않은 경우

    • 트랜잭션에서 함께 두 쿼리를 포장 : 현실 세계에서

      , 당신은 아마도 원하는 정말로 새로운 행을 삽입하고 변경된 행을 업데이트하십시오.
    • 등등 ...