DBCC CheckIdent와 함께 대량 복사 삽입

batch-processing dbcc sqlbulkcopy sql-server sql-server-2008

문제

우리 팀은 SQL Server 2008 데이터베이스에 잔인한 데이터를 삽입해야합니다. 우리는 좋은 해결책을 찾고 있습니다. 이제 우리는 하나를 생각해 냈습니다. 그러나 그것이 옳다고 생각하지 않기 때문에 나는 그것에 의구심을 가지고 있습니다. 그래서 이것이 좋은 해결책 인 것처럼 여기에서 묻습니다. 추가 도전 과제는 4 대의 서버를 통한 피어 투 피어 복제 데이터베이스입니다! :)

삽입 할 행이 1 백만 개가 있다고 가정 해 보겠습니다.

  1. 거래 시작
  2. 1 백만 개의 테이블에서 현재 ident 값 늘리기
  3. 100 만 개의 행과 올바른 ID가있는 DataSet / DataTable 준비
  4. 데이터를 데이터베이스로 대량 복사합니다.
  5. 트랜잭션 커밋

이것은 좋은 해결책인가, 동시성 문제에 직면 할 수 있는지, 너무 큰 트랜잭션이 있을지 등등.

인기 답변

데이터베이스가 온라인 상태이고 사용자가 테이블에 행을 삽입 할 수있는 경우에만 문제가 발생합니다 (필자가 볼 수있는 한 간과 할 수 있습니다). 메타 레벨에서 새로운 행의 신원 값을 높이면 시스템에서 삽입 한 다음 행에 해당 번호가 사용된다는 의미이므로 100 만 개로 지정하면 그 번호를 미리 예약해야합니다.

ID 열은 'nice'이지만 양도 할 수없는 부작용이 있습니다. 따라서 데이터를 다른 DB로 마이그레이션해야하는 경우 삽입 한 데이터를 데이터베이스에 맞게 조정해야 할 가능성이 있음을 인식하십시오 (ID 필드가 이미 테이블에있는 행과 충돌 할 수 있음을 의미하는 데이터의 범위이므로 삽입 한 데이터베이스와 일치하도록 조정해야 함). ).

이것이 일회성 일이라면 효과가있을 수 있습니다. 이 작업을 정기적으로 수행 할 계획이라면 데이터를 새로운 ID 값으로 마이그레이션하거나 GUID를 NEWSEQUENTIALID ()와 함께 사용하여보다 정확한 상위 수준의 마이그레이션 시스템을 조사하여 올바른 인덱스와 고유하고 이전 가능한 ID를 얻을 수 있습니다. .



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.