2017-09-07 3 views
1

데이터베이스가 상당히 커지지 만 클라이언트는 지난 2 년간의 데이터에만 관심이 있습니다. 그러나 그들은 구형 데이터를 "just-in-case"로 유지하려고합니다.SQL Server : 오래된 데이터 보관

이제 WAN을 통해 다른 서버에 데이터를 보관하고 싶습니다. 룩업 테이블에서

  1. 복사 모든 데이터를 아카이브 서버로 마스터 데이터 및 외부 키 테이블을 포함하는 테이블 :

    내 계획은 저장된 프로 시저로를 만드는 것입니다.

  2. 트랜잭션 테이블의 데이터를 아카이브 DB로 복사하십시오.
  3. 2 년 이상 된 마스터 데이터베이스에서 트랜잭션 데이터를 삭제하십시오. 접근이 teoretically 우리의 요구를 충족되지만

는 2 주요 문제는 다음과 같습니다

  1. 의 performace : 나는 SQL 연결된 서버를 통해를 통해 데이터를 복사하고 있습니다. 큰 테이블 중 일부는 어떤 레코드가 존재하는지 비교하고이를 업데이트해야하므로 존재하지 않는 레코드를 만들어야하므로 속도가 느립니다. 3-4 시간 만에 작동하는 것처럼 보입니다.

  2. 외래 키 위반을 방지하기 위해 테이블을 올바른 순서로 복사해야하며 ParentCustomer 없이도 자체 테이블 (예 : ParentCustomer 필드가있는 Customers 테이블)과 관련이있는 테이블을 전송해야합니다. FK 위반을 방지하기 위해 ParentCustomer를 업데이트해야합니다. 따라서 자동으로 Insert 및 Update 문을 자동 생성하는 것이 어려워집니다 (가능한 한 내 문을 자동으로 생성하고 싶습니다).

나는 아직 알지 못하는 데이터를 더 효과적으로 보관할 수있는 방법이있을 것이라고 생각합니다. SSIS가 옵션 일 수는 있지만 기존의 문제점을 방지 할 수 있는지 확실하지 않습니다. 나는 SSIS에 대해 많이 알지 못하기 때문에 공부할 수있는 재료가 필요할 수도 있습니다.

+0

제안 사항 : 여러 스핀들 또는 ssd에서 테이블을 분할하십시오. 현재 및 과거의 슬라이딩 윈도우 파티션을 유지하십시오. 현재 데이터는 하나의 디스크에서 다른 하나는 느린 디스크에서 읽혀집니다. – Namphibian

답변

1

저는 예약 된 작업으로 실행되는 배치 프로세스가 필요하다고 생각합니다. 아마 매일 밤. 이미 논의한 두 가지 옵션이 있습니다.

1) 저장 프로 시저를 실행하는 SQL 에이전트 작업. 저장 프로시 저는 연결된 서버를 사용합니다.

2) SSIS 패키지를 실행할 SQL 에이전트 작업.

저는 Linked Serverd를 피할 수있는 두 가지 방법의 결합으로 혜택을 볼 수 있다고 생각합니다. 다음과 같은 단계가 있습니다.

1) SQL 에이전트 작업은 보관할 데이터를 실제 데이터베이스에서 복사 데이터베이스로 전송하는 SSIS 패키지를 실행합니다. 이는 외래 키 위반을 피하기 위해 특정 순서로 수행되어야합니다.

2) SSIS 패키지가 전송을 실행하면 실제 데이터베이스에서 저장 프로 시저를 실행하여 2 년이 넘은 정보를 삭제합니다. 저장 프로시 저는 연결된 서버가 필요하지 않습니다.

중복 된 데이터가 아카이브되지 않도록 트랜잭션을 사용해야합니다. 예를 들어 SSIS 패키지가 실패하면 트랜잭션을 롤백해야하며 저장 프로 시저를 실행하지 않아야합니다.