0

NET Framework 4.5.1에서 MVC 5를 사용하고 있습니다. 코드 우선. 또한 SQL 2012 서버 및 (localdb) \ v11.0에서 마이그레이션을 사용하고 있습니다.마이그레이션 동기화 개발 및 프로덕션 데이터베이스

저는 C#과 MVC5를 사용하여 프로젝트를 개발하고 있습니다. 개발하는 동안, 나는 발달상의 컴퓨터에 많은 새로운 테이블을 만들고 시스템이 인덱스를 만드는 "Name"필드를 변경했다. 나는 그것을 추가하고 그것을 여러 번 삭제했다.

그 이후로 나는 새로운 무관 한 테이블을 많이 추가했지만 어떤 이유로 "이름"필드에 대한 인덱스로 인해 외부 제약 조건 오류가 발생했습니다. 이러한 오류는 내가 고칠 때마다 계속 증가하므로 마이 그 레이션의 초기 상태로 되돌아 가기로 결정하고 현재 위치를 새로운 시작점으로 사용하여 재설정했습니다. 프로덕션 테이블은 개발 DB에서이 새로운 시작 지점을보고 개발 상태로 다시 동기화되기를 기대했습니다. 나는 프로덕션 db가 개발 DB에 자체적으로 일치하고 업데이트된다는 어딘가를 읽었다 고 생각했습니다. 나는 거기에 개발 DB에있는 파일에 자신을 일치시킬 것이 프로덕션 DB에 마이 그 레이션 파일이 있다고 생각 - 그 파일은 분명히 밖으로 동기화했다. 데이터 삭제를 고려했지만 조언을받을 때까지 기다리지 않습니다.

어쨌든 Dev 컴퓨터에서 migrations 디렉토리의 이름을 변경하고 프로젝트에서 제외했습니다. 그런 다음 dev (내 로컬 db에 새 db 이름을 사용하여) 테이블을 다시 초기화하고 초기화 데이터를 다시로드했습니다. 그것은 모두 효과가있었습니다.

이제 새로운 프로덕션 DB와 개발 DB가 달라졌고 dev 컴퓨터의 마이그레이션이 새 파일을 만들도록 설정되었지만 프로덕션 상태의 사용자는 이전 마이그레이션을 예상했습니다. 개발 용 컴퓨터를 사용하여 프로덕션 DB를 업데이트하려고 할 때마다 파일이 존재한다는 오류가 계속 발생했습니다.

그래서 마이그레이션 파일에있는 모든 파일을 주석으로 작성하고 다시 시도했습니다. 이제 프로덕션 db는 시작할 것이지만, 업데이트 된 코드는 프로덕션 db에서 생성되지 않은 새 필드를 가지고 있기 때문에 실행되지 않습니다. 그래서, 제 제작 DB에서 실종 된 모든 필드의 오류가 발생하기 시작했습니다. 나는 자동 마이그레이션을 사실로 만들려고했으나 작동하지 않았다. 나는 이것을 고칠 수있는 유일한 방법은 수작업으로 들어가서 필드를 하나씩 동기화하는 것입니다.

질문 1 : 프로덕션 데이터베이스와 개발 데이터베이스를 동기화하여 (개발 마이그레이션을 사용하여) 개발 데이터베이스와 동일하게 자동으로 사용할 수 있습니까?

질문 2 : 위의 시나리오를 보면서, 프로덕션 데이터베이스를 사용하여 miggrations을 다시 설정하는 좋은 방법은 무엇입니까?

답변

3

해결책을 찾았습니다. Red-Gate의 사람들은 SQL Compare라는 훌륭한 SQL 도구를 가지고 있습니다. 그것은 데이터베이스 파일 구조를 비교하고 버튼을 한 번만 클릭하면 정확하게 동일하게 만듭니다.

그러나 사용하기 전에 반드시 "사용자"와 "역할"을 포함하는 모든 것과 "테이블"을 비교해야합니다. 그 이유는 소프트웨어를 실행할 때 백업, 삭제 및 재생성을 수행하고, 역할이나 사용자가 삭제되면 소프트웨어가 더 이상 데이터베이스에 액세스 할 수없고 모든 것이 삭제되기 때문입니다! 또한 ... 백업을 만드십시오! . (이것은 내가 그들을 잘 모릅니다 레드 게이트에서의 사람들에 대한 판매 플러그가 아니라 자신의 도구가 대단히 나에게 도움이

http://www.red-gate.com/products/sql-development/sql-compare/

(내 모든 시험 내 첫 번째 시도에서 데이터를 손실) - 자사의를 좋은 도구, 사용하기 쉽고 14 일 동안 무료!- 나는 그래서 다른 사람 여기 목록, 그리고 나를이 도움이 될 수있는 것처럼 붙어있을 수있는, 많은 사람들이 확신)

2015년 4월 24일

좋아.. 두 데이터베이스를 모두 동기화하여 정확히 똑같이 보이게하면 더 많은 작업이 수행됩니다.

  • 는 돌아 *

  • 이 발달 폴더에 마이그레이션 폴더를 삭제 생산까지의 데이터를 생성합니다.

  • 사용 마이그레이션을 다시
  • 초기 마이그레이션
  • 업데이트
  • 는 이제 호스트 데이터베이스에 로컬 완전히 설정 *

  • 이동이 로컬 데이터베이스를 추가

  • 호스트/프로덕션에서 "__MigrationHistory"테이블을 찾으십시오.
  • 모든 데이터를 (당신이 그것을 제거하려는) ("__MigrationHistory"(호스트))
  • 지금 호스팅 "__MigrationHistory"로컬 "__MigrationHistory"의 모든 데이터를 복사가 이 (당신의 하나가 될 것입니다 삭제 즉 처음에 당신이 만든 첫 번째 파일)
  • 이제 데이터가 저장되고 모든 것이 동기화되고 작동합니다. 다시 개발을 시작할 수 있습니다.