방법: 두 데이터베이스의 데이터 비교 및 동기화
이 항목은 다음 언어에 적용됩니다.
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
Visual Studio를 사용하면 두 데이터베이스에 포함된 데이터를 비교할 수 있습니다. 비교하는 데이터베이스를 소스와 대상이라고 합니다.
참고
데이터베이스 프로젝트와 데이터 계층 응용 프로그램 프로젝트에는 데이터가 포함되지 않습니다. 그러므로 이러한 프로젝트는 데이터 비교 시 소스나 대상이 될 수 없습니다. 마찬가지로, .dbschema 파일과 .dacpac 파일에도 데이터가 포함되지 않으므로 이러한 파일도 데이터 비교 시 소스나 대상이 될 수 없습니다.
데이터를 비교할 때 대상 데이터베이스의 일부 또는 모든 데이터를 업데이트하여 차이가 나는 데이터베이스를 동기화하는 데 사용할 수 있는 DML(데이터 조작 언어) 스크립트가 생성됩니다. 데이터 비교가 끝나면 결과가 Visual Studio의 데이터 비교 창에 나타납니다.
비교가 완료된 후 다른 단계를 수행할 수 있습니다.
두 데이터베이스 간의 차이점을 볼 수 있습니다. 자세한 내용은 데이터 차이 확인을 참조하십시오.
소스와 일치하도록 대상의 일부 또는 전부를 업데이트할 수 있습니다. 자세한 내용은 데이터베이스 데이터 동기화를 참조하십시오.
자세한 내용은 하나 이상의 테이블에 있는 데이터를 참조 데이터베이스에 있는 데이터와 비교하고 동기화를 참조하십시오.
참고
두 데이터베이스나 같은 데이터베이스의 두 버전에 대한 스키마를 비교할 수도 있습니다. 자세한 내용은 방법: 데이터베이스 스키마 비교를 참조하십시오.
데이터베이스 데이터 비교
새 데이터 비교 마법사를 사용하여 데이터를 비교하려면
데이터 메뉴에서 데이터 비교를 가리킨 다음 새 데이터 비교를 클릭합니다.
새 데이터 비교 마법사가 나타납니다. 또한 데이터 비교 창이 열리며 Visual Studio에서는 DataCompare1과 같은 이름을 해당 창에 자동으로 지정합니다.
소스 및 대상 데이터베이스를 지정합니다.
소스 데이터베이스 목록이나 대상 데이터베이스 목록이 비어 있는 경우 새 연결을 클릭합니다. 연결 속성 대화 상자에서 데이터베이스가 있는 서버와 데이터베이스에 연결할 때 사용할 인증 유형을 지정합니다. 그런 다음 확인을 클릭하여 연결 속성 대화 상자를 닫고 데이터 비교 마법사로 돌아갑니다.
데이터 비교 마법사의 첫 페이지에서 각 데이터베이스의 정보가 올바른지 확인하고 결과에 포함할 레코드를 지정한 후 다음을 클릭합니다. 데이터 비교 마법사의 두 번째 페이지가 나타나고 데이터베이스에 있는 테이블과 뷰의 계층적 목록이 표시됩니다.
비교할 테이블과 뷰에 대한 확인란을 선택합니다. 경우에 따라 데이터베이스 개체의 노드를 확장한 다음 비교할 해당 개체 내의 열에 대한 확인란을 선택합니다.
참고
두 가지 조건을 충족하는 테이블 및 보기만 목록에 표시됩니다. 첫째로 개체의 스키마가 소스와 대상 데이터베이스 간에 일치해야 하며, 둘째로 기본 키, 고유 키 또는 인덱스가 있는 테이블 및 보기만 목록에 표시됩니다. 이 두 조건을 모두 충족하는 테이블이나 보기가 없으면 목록은 비어 있게 됩니다.
키가 둘 이상 있는 경우 비교 키 열을 사용하여 데이터 비교 시 기반이 되는 키를 지정할 수 있습니다. 예를 들어 비교 시 기본 키 열을 기반으로 할 것인지 고유하게 식별 가능한 다른 키 열을 기반으로 할 것인지 지정할 수 있습니다.
마침을 클릭합니다.
비교가 시작됩니다.
참고
데이터 메뉴를 열고 데이터 비교를 가리킨 다음 데이터 비교 중지를 클릭하여 진행 중인 데이터 비교 작업을 중지할 수 있습니다.
비교가 끝나면 두 데이터베이스 간의 데이터 차이를 볼 수 있습니다. 또한 대상 데이터베이스 데이터의 일부나 전체를 소스 데이터베이스의 데이터와 일치하도록 업데이트할 수 있습니다.
Visual Studio 자동화 모델을 사용하여 데이터를 비교하려면
보기 메뉴를 열고 다른 창을 가리킨 다음 명령 창을 클릭합니다.
명령 창에서 다음 명령을 입력합니다.
Data.NewDataComparison /SrcServerName sServerName /SrcDatabaseName sDatabaseName /SrcUserName sUserName /SrcPassword sPassword /SrcDisplayName sDisplayName /TargetServerName tServerName /TargetDatabaseName tDatabaseName /TargeUserName tUserName /TargetPassword tPassword /TargetDisplayName tDisplayName
자리 표시자(sServerName, sDatabaseName, sUserName, sPassword, sDisplayName, tServerName, tDatabaseName, tUserName, tPassword 및 tDisplayName)를 소스 및 대상 데이터베이스의 값으로 바꿉니다.
소스 및 대상을 지정하지 않으면 새 데이터 비교 대화 상자가 나타납니다. Data.NewDataComparison 명령의 매개 변수에 대한 자세한 내용은 Visual Studio의 데이터베이스 기능에 대한 자동화 명령 참조를 참조하십시오.
지정한 소스 및 대상 데이터베이스의 데이터가 비교되고, 데이터 비교 세션에 결과가 표시됩니다. 결과를 보거나 데이터를 동기화하는 방법에 대한 자세한 내용은 데이터 차이 확인 및 데이터베이스 데이터 동기화를 참조하십시오.
데이터 차이 확인
두 데이터베이스의 데이터를 비교하면 데이터 비교 목록에 비교한 각 데이터베이스 개체 및 해당 상태가 나열됩니다. 각 개체 내의 레코드 결과를 상태별로 볼 수도 있습니다. 상태 지정에 대한 자세한 내용은 하나 이상의 테이블에 있는 데이터를 참조 데이터베이스에 있는 데이터와 비교하고 동기화를 참조하십시오.
차이를 확인한 후 서로 다르거나 누락되었거나 새로 추가된 개체 또는 레코드의 일부 또는 모두에 대해 소스와 일치하도록 대상을 업데이트할 수 있습니다. 자세한 내용은 데이터베이스 데이터 동기화를 참조하십시오.
데이터 차이를 보려면
소스 및 대상 데이터베이스의 데이터를 비교합니다. 자세한 내용은 데이터베이스 데이터 비교를 참조하십시오.
(선택 사항) 다음 중 하나 또는 둘 다를 수행합니다.
기본적으로 해당 상태에 관계없이 모든 개체의 결과가 나타납니다. 특정 상태의 개체만 표시하려면 필터 목록에서 옵션을 클릭합니다.
특정 개체 내의 레코드 결과를 보려면 주 결과 창에서 개체를 클릭한 다음 레코드 뷰 창에서 탭을 클릭합니다. 각 탭에는 해당 개체 내에서 특정 상태(다른 레코드, 소스에서만, 대상에서만 및 동일한 레코드)를 가진 모든 레코드가 표시됩니다. 데이터는 레코드 및 열별로 나타납니다.
데이터베이스 데이터 동기화
두 데이터베이스의 데이터를 비교한 후 대상의 모두 또는 일부를 소스와 일치하도록 업데이트하여 동기화할 수 있습니다. 데이터를 비교할 수 있는 두 가지 종류의 데이터베이스 개체는 테이블과 뷰입니다.
업데이트 쓰기 명령을 사용하여 대상 데이터를 업데이트하려면
소스 및 대상 데이터베이스의 데이터를 비교합니다. 자세한 내용은 데이터베이스 데이터 비교를 참조하십시오.
비교가 완료되면 데이터 비교 창에 비교된 개체에 대한 결과가 나열됩니다. "다른 레코드", "소스에서만", "대상에서만" 및 "동일한 레코드" 열에는 같지 않은 개체에 대한 정보가 표시됩니다. 각 해당 개체에 대해 이러한 네 개 열에 서로 다른 레코드 수 및 업데이트 작업에서 변경할 레코드 수가 표시됩니다. 처음에는 두 숫자가 일치하지만 4단계에서 업데이트할 개체를 변경할 수 있습니다.
자세한 내용은 하나 이상의 테이블에 있는 데이터를 참조 데이터베이스에 있는 데이터와 비교하고 동기화를 참조하십시오.
데이터 비교 창의 테이블에서 행을 클릭합니다.
세부 정보 창에 클릭한 데이터베이스 개체의 레코드에 대한 결과가 표시됩니다. 레코드는 상태별로 탭에 그룹화되어 있으며, 이러한 탭을 사용하여 소스에서 대상으로 전파될 데이터를 지정할 수 있습니다.
세부 정보 창에서 이름에 0이 아닌 숫자가 포함된 탭을 클릭합니다.
대상에서만 테이블의 업데이트 열에는 업데이트할 행을 선택하는 데 사용할 수 있는 확인란이 있습니다. 기본적으로 각 확인란은 선택되어 있습니다.
소스 데이터를 사용하여 업데이트하지 않을 대상 레코드의 확인란을 선택 취소합니다.
확인란의 선택을 취소하면 업데이트할 레코드 수가 감소하며 사용자 작업을 반영하여 표시가 변경됩니다. 1단계에서 설명한 것처럼 이 숫자는 세부 정보 창의 상태 줄과 주 결과 창의 해당 열에 나타납니다.
(선택 사항) 편집기로 내보내기를 클릭합니다.
Transact-SQL 편집기 창이 열리고 대상을 업데이트하는 데 사용될 DML(데이터 조작 언어) 스크립트가 표시됩니다.
서로 다르거나 누락되었거나 새로운 레코드를 동기화하려면 업데이트 쓰기를 클릭합니다.
참고
대상 데이터베이스가 업데이트되는 동안 대상에 쓰기 중지를 클릭하여 작업을 취소할 수 있습니다.
대상에서 선택한 레코드의 데이터가 소스의 해당 레코드 데이터를 사용하여 업데이트됩니다.
참고
인덱싱된 뷰를 업데이트하도록 선택하면 이 작업으로 인해 같은 테이블에 중복 키가 삽입될 경우 업데이트 쓰기 작업이 실패할 수도 있습니다.
Transact-SQL 스크립트를 사용하여 대상 데이터를 업데이트하려면
소스 및 대상 데이터베이스의 데이터를 비교합니다. 자세한 내용은 데이터베이스 데이터 비교를 참조하십시오.
비교가 완료되면 데이터 비교 창에 비교된 개체가 나열됩니다. 자세한 내용은 하나 이상의 테이블에 있는 데이터를 참조 데이터베이스에 있는 데이터와 비교하고 동기화를 참조하십시오.
(선택 사항) 이전 절차에서 설명한 것처럼 상제 정보 창에서 업데이트하지 않을 대상 레코드의 확인란을 선택 취소합니다.
편집기로 내보내기를 클릭합니다.
대상 데이터를 소스 데이터와 일치시키는 데 필요한 변경 내용을 전파할 Transact-SQL 스크립트가 새 창에 표시됩니다. 새 창에는 Server.Database - DataUpdate_Database _1.sql과 같은 이름이 지정됩니다.
이 스크립트는 상세 정보 창에서 변경한 내용을 반영합니다. 예를 들어 대상에서만 페이지에서 [dbo].[Shippers] 테이블에 대해 지정된 행의 확인란을 선택 취소했을 수 있습니다. 이 경우 스크립트에서 해당 행을 업데이트하지 않습니다.
(선택 사항) Server.Database - DataUpdate_Database _1.sql 창에서 이 스크립트를 편집합니다.
(선택 사항이지만 권장) 대상 데이터베이스를 백업합니다.
SQL 실행을 클릭하거나 F5를 눌러 대상 데이터베이스를 업데이트합니다.
업데이트할 대상 데이터베이스에 대한 연결을 지정합니다.
중요
기본적으로 업데이트는 트랜잭션 범위 내에서 수행됩니다. 오류가 발생하면 전체 업데이트를 롤백할 수 있습니다. 이 동작은 변경할 수 있습니다. 자세한 내용은 방법: 데이터베이스 데이터 비교 옵션 설정을 참조하십시오.
대상에서 선택한 레코드의 데이터가 소스의 해당 레코드 데이터를 사용하여 업데이트됩니다.