복붙노트

[SQL] 하나에 동일한 데이터베이스를 병합

SQL

하나에 동일한 데이터베이스를 병합

우리는 백만 행의 avarage 75 개 테이블 15 개 데이터베이스를 가지고있다. 모두 같은 스키마하지만 서로 다른 데이터. 우리는 이제 하나의 데이터베이스에 모든 15을 가져다하기 위해 클라이언트가 요구 사항을 제공하고있다. 사용자의 로그인에 의해 필터링 된 데이터의 각 세트.

응용 프로그램에 대한 변경 사항은 필터링을 수행 완료되었습니다. 우리는 이제 하나에 모든 데이터베이스를 통합하는 작업에 남아 있습니다.

문제는 PK의로 PK와 FK 충돌하고 우리가 1의 15 개 PK ID를해야합니다 있도록 FK 년대는 int 타입이다.

하나 개의 아이디어가 사용하는 것입니다. 그물과 DBML는 PK와 FK와 LINQ 계약을시키는 중복 데이터를 처리하는 코드를 사용하여 새 데이터베이스에 새로운 기록과 같은 기록을 삽입합니다.

어떤 다른 방법이이 작업을 수행하려면?

해결법

  1. ==============================

    1.이 기록은 모든 데이터베이스에서 고유 한 기본 키가없는 경우 데이터베이스를 통합하는 사소한 작업 적이 없습니다. 몇 주 전에 내가 엔티티 프레임 워크를 사용하기로 결정하는 유사한 통합 스크립트를 만들었습니다.

    이 기록은 모든 데이터베이스에서 고유 한 기본 키가없는 경우 데이터베이스를 통합하는 사소한 작업 적이 없습니다. 몇 주 전에 내가 엔티티 프레임 워크를 사용하기로 결정하는 유사한 통합 스크립트를 만들었습니다.

    먼저 좋은 소식. EF의 DbContext API를 그것은 완전한 객체 그래프를 삽입하고 새로 생성 된 기본 키 외래 키의 EF 돌봐를 만들기 위해 엄청나게 쉽다. 이 쉽게 왜 그런지 이유는 객체의 상태가 추가로 변경 될 때 그 준수의 모든 개체가 삽입의 올바른 순서 밖으로 잘 EF 수치로 추가 될 것입니다. 이것은 참으로 위대하다! 그것은 제가 예를 들어 T-SQL에서 일을해야하는 경우 여러 날이었을 것입니다 몇 시간에 복사 루틴의 핵심을 구축했다. 후자는 너무 많은 오류가 발생하기 쉬운입니다.

    물론 생활은 쉬운 일이 아니다. 이제 나쁜 소식 :

    사소한 아니었지만 그래서 그것을 행할이고 작업은 비교적 짧은 시간에 이루어졌다. 나는 확신이 더 많은 시간이 걸렸을 것 이상의 버그가 있었을 것이다 다른 대안 (전혀 행할는 경우 t-SQL, 통합 서비스, BIDS). 그리고이 지역의 버그와 문제는 그들이 훨씬 나중에 명백해질 수 있다는 것이다.

    나중에 내가 2에서 설명하는 문제가) AsNoTracking와 소스 오브젝트를 가져 오는 관련되어 있음을 발견했다. 이 흥미로운 게시물을 참조하십시오 : 엔티티 프레임 워크 (6) - 내 getHashCode ()를 사용합니다. 더 나은 수행하고 메모리 소비를 줄일 수 있기 때문에 나는 AsNoTracking을 사용했다.

  2. from https://stackoverflow.com/questions/21483746/merge-identical-databases-into-one by cc-by-sa and MIT license