동기화를 위해 서버 데이터베이스를 준비하려면 동기화 범위를 설명하고 범위와 관련된 아티팩트를 사용하여 서버 데이터베이스를 프로비전해야 합니다.
동기화 범위를 설명하여 동기화할 항목을 정의합니다. 동기화 범위는 한 단위로 동기화해야 할 테이블 집합입니다. 이러한 테이블은 데이터베이스에 이미 있거나 Sync Framework 개체 모델을 사용하여 설명된 후 기본 저장소가 프로비전될 때 런타임에 생성될 수 있습니다. 이 연습에서는 서버 데이터베이스에 이미 있는 Products 테이블을 사용합니다.
데이터베이스 프로비전 작업에는 추적 테이블, 트리거 및 저장 프로시저와 같은 동기화 범위 관련 아티팩트를 데이터베이스에 추가하는 과정이 포함되어 있습니다. 이러한 아티팩트는 런타임에 동기화 프로세스에서 사용됩니다. 필요한 경우 앞 단락에서 명시한 대로 데이터베이스에 기본 테이블이 추가되기도 합니다. 프로비전에 대한 보다 자세한 기술 정보는 방법: 데이터베이스 동기화 구성 및 실행(SQL Server) 및 동기화를 위한 프로비전(SQL Server)을 참조하십시오.
이 연습에서는 Products 테이블을 포함하는 ProductsScope 동기화 범위를 정의하고 동기화 범위와 관련된 아티팩트를 사용하여 이전 연습에서 만든 SQL Server 데이터베이스를 프로비전하는 콘솔 응용 프로그램을 만듭니다.
범위를 정의하고 범위와 관련된 아티팩트를 사용하여 서버를 프로비전하려면
시작을 클릭하고 프로그램 및 Microsoft Visual Studio 2008을 차례로 가리킨 다음 Microsoft Visual Studio 2008을 클릭하여 Visual Studio 2008을 시작합니다.
메뉴 모음에서 파일을 클릭하고 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.
프로젝트 형식에서 **Visual C#**을 선택하고 템플릿에서 콘솔 응용 프로그램을 선택합니다.
프로젝트 이름에 ProvisionServer를, 위치에 **C:\**를, 솔루션 이름에 SyncSQLServerAndSQLExpress를 입력합니다.
확인을 클릭하여 새 프로젝트 대화 상자를 닫습니다.
솔루션 탐색기 창에서 ProvisionServer를 마우스 오른쪽 단추로 클릭하고 참조 추가를 클릭합니다.
.NET 탭에서 Microsoft.Synchronization, Microsoft.Synchornization.Data, Microsoft.Synchronization.Data.SqlServer를 선택합니다. 이것은 Microsoft Sync Framework과 함께 제공되는 어셈블리입니다.
확인을 클릭하여 참조 추가 대화 상자를 닫습니다.
Program.cs 파일 시작 부분에서 기존 using 문 다음에 아래의 using 문을 추가합니다. 이러한 네임스페이스에는 이 콘솔 응용 프로그램을 위해 코드에서 사용할 클래스가 포함되어 있습니다.
using System.Data; using System.Data.SqlClient; using Microsoft.Synchronization; using Microsoft.Synchronization.Data; using Microsoft.Synchronization.Data.SqlServer;다음 문을 Main 메서드에 추가하여 SyncDB 서버 데이터베이스에 대한 연결을 만듭니다.
// connect to server database SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");중요
기본 인스턴스를 사용하지 않는 경우 위의 문에서 서버 이름을 사용자 서버의 인스턴스 이름으로 바꿉니다. 예를 들어 SQL Server 인스턴스의 이름이 MYSQLINSTANCE인 경우 (로컬)을 .\MYSQLINSTANCE로 바꿉니다.
다음 코드 줄을 Main 메서드에 추가하여 SyncDB 데이터베이스의 Products 테이블을 기준으로 하는 동기화 범위를 정의합니다. 이 코드에서는 ProductsScope 동기화 범위를 만들고, SyncDB 데이터베이스에 있는 Products 테이블에 대한 설명을 가져오고, ProductsScope에 설명을 추가합니다. 동기화 범위를 정의하는 대략적인 단계는 다음과 같습니다.
DbSyncScopeDescription 클래스의 인스턴스를 만듭니다. DbSyncScopeDescription 클래스를 사용하여 동기화 범위의 이름 및 동기화할 테이블 목록을 지정합니다. 테이블은 DbSyncTableDescription 클래스를 사용하여 지정됩니다.
SyncDB 서버 데이터베이스에서 검색된 Products 테이블의 스키마를 기준으로 하는 DbSyncTableDescription 클래스의 인스턴스를 만듭니다. DbSyncTableDescription 클래스를 사용하여 테이블 이름, 동기화할 테이블의 열, 테이블의 데이터 형식, 동기화에 필요한 기타 정보를 지정합니다. 이러한 정보는 명시적으로 지정하거나 GetDescriptionForTable(String, SqlConnection) 메서드를 사용하여 데이터베이스를 쿼리함으로써 얻을 수 있습니다.
이 연습에서는 SqlSyncDescriptionBuilder 클래스의 GetDescriptionForTable(String, SqlConnection) 메서드를 사용하여 테이블에 대한 설명을 검색합니다.
Add 메서드를 사용하여 DbSyncScopeDescription 개체의 Tables 컬렉션에 DbSyncTableDescription 개체를 추가합니다.
// define a new scope named ProductsScope DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("ProductsScope"); // get the description of the Products table from SyncDB dtabase DbSyncTableDescription tableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Products", serverConn); // add the table description to the sync scope definition scopeDesc.Tables.Add(tableDesc);다음 코드 줄을 Main 메서드에 추가하여 동기화 관련 아티팩트를 통해 SQL Server를 프로비전합니다. 이 코드에서는 SqlSyncScopeProvisioning 개체를 만들고, 테이블이 이미 있으므로 서버에서의 Products 테이블 만들기를 건너뛰고, 범위와 관련된 아티팩트를 사용하여 SyncDB 데이터베이스를 프로비전합니다. 동기화 범위 관련 아티팩트를 사용하여 서버 데이터베이스를 프로비전하는 대략적인 단계는 다음과 같습니다.
DbSyncScopeDescription 개체를 기준으로 하는 SqlSyncScopeProvisioning 클래스의 인스턴스를 만들고 서버 데이터베이스에 대한 연결을 만듭니다. SqlSyncScopeProvisioning 클래스는 DbSyncScopeDescription 개체에서 나타내는 특정 범위에 대한 SQL Server 데이터베이스의 프로비전을 표시합니다.
서버 데이터베이스에 Products 테이블이 이미 있으므로 DbSyncCreationOption 값을 Skip으로 지정하여 SetCreateTableDefault(DbSyncCreationOption) 메서드를 호출합니다. SetCreateTableDefault(DbSyncCreationOption) 메서드를 사용하여 범위가 구성된 경우 기본 테이블을 만들지 여부를 지정합니다.
SqlSyncScopeProvisioning 개체에서 Apply() 메서드를 호출하여 서버 데이터베이스의 변경 내용 추적 인프라를 만드는 프로비전 프로세스를 시작합니다.
// create a server scope provisioning object based on the ProductScope SqlSyncScopeProvisioning serverProvision = new SqlSyncScopeProvisioning(serverConn, scopeDesc); // skipping the creation of table since table already exists on server serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip); // start the provisioning process serverProvision.Apply();솔루션 탐색기에서 ProvisionServer를 마우스 오른쪽 단추로 클릭하고 빌드를 선택합니다.
Ctrl+F5를 눌러 프로그램을 실행합니다.
Enter 키를 눌러 명령 프롬프트 창을 닫습니다.
SQL Server Management Studio에서 SyncDB 노드와 테이블을 차례로 확장합니다. 이 경우 프로비전 프로세스에서 만든 Products_Tracking, schema_info, scope_config, scope_info 등의 추가 테이블이 표시되어야 합니다. 프로비전 프로세스에서 만든 트리거 및 저장 프로시저와 같은 다른 데이터베이스 개체도 있습니다.
Visual Studio와 SQL Server Management Studio를 열어 둡니다.
전체 코드 예제
using System;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Synchronization;
using Microsoft.Synchronization.Data;
using Microsoft.Synchronization.Data.SqlServer;
namespace ProvisionServer
{
class Program
{
static void Main(string[] args)
{
// create connection to the server database
SqlConnection serverConn = new SqlConnection("Data Source=localhost; Initial Catalog=SyncDB; Integrated Security=True");
// define a new scope named ProductsScope
DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("ProductsScope");
// get the description of the Products table from SyncDB dtabase
DbSyncTableDescription tableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Products", serverConn);
// add the table description to the sync scope definition
scopeDesc.Tables.Add(tableDesc);
// create a server scope provisioning object based on the ProductScope
SqlSyncScopeProvisioning serverProvision = new SqlSyncScopeProvisioning(serverConn, scopeDesc);
// skipping the creation of table since table already exists on server
serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);
// start the provisioning process
serverProvision.Apply();
}
}
}