다음을 통해 공유


크로스 데이터베이스 참조 개요

업데이트: 2007년 11월

다른 데이터베이스의 개체를 참조하는 데이터베이스 개체를 만들거나 가져올 수 있습니다. 이러한 크로스 데이터베이스 참조를 사용하려면 데이터베이스 프로젝트의 속성에 해당 참조를 정의해야 합니다. 다른 데이터베이스의 개체를 참조하지만 자신의 프로젝트에 해당하는 참조를 정의하지 않으면 경고가 표시됩니다. 참조하는 데이터베이스마다 참조할 서버 및 데이터베이스에 해당하는 SETVAR 변수를 정의할 수 있습니다. 참조를 포함하도록 개체 정의를 수정하는 경우 서버 및 데이터베이스의 명시적 이름 대신 이러한 변수를 사용하여 정의할 수 있습니다. 데이터베이스 프로젝트를 빌드하면 변수가 지정한 값으로 대체됩니다.

참고:

특정 빌드 구성에만 사용되는 크로스 데이터베이스 참조를 만들려면 MSBuild 변수로 이러한 참조에 대해 SETVAR 변수를 정의해야 합니다. 예를 들어 MSBuild 변수의 집합 하나는 데이터베이스 프로젝트를 빌드하여 스테이징 서버에 배포할 때 사용하고, 다른 집합은 같은 프로젝트를 빌드하여 프로덕션 서버에 배포할 때 사용할 수 있습니다. 서버 및 데이터베이스 이름으로 크로스 데이터베이스 참조에 대해 SETVAR 변수를 정의하는 경우에는 지정한 빌드 구성과 관계없이 참조가 동일한 방식으로 작동합니다.

크로스 데이터베이스 참조 시나리오

Visual Studio Team System Database Edition에서는 다음과 같은 시나리오를 지원합니다.

  • 데이터베이스 프로젝트를 만들고 기존 데이터베이스에서 스키마를 가져왔습니다. 스키마에는 하나 이상의 다른 데이터베이스에 있는 개체를 참조하는 개체가 들어 있습니다. 프로젝트의 속성에서 해당하는 참조를 정의하고 서버 및 데이터베이스의 명시적 이름을 SETVAR 변수로 대체합니다. 이 정의로 인해 크로스 데이터베이스 참조의 유효성은 디자인할 때 검사할 수 있습니다. 또한 데이터베이스 프로젝트를 대상 서버의 이름이 프로덕션 환경의 대상 서버 이름과 다른 격리된 개발 환경에 배포할 수 있습니다.

  • 데이터베이스 프로젝트에 크로스 데이터베이스 참조가 들어 있고, 이러한 참조에서는 SETVAR 변수를 사용하여 서버와 데이터베이스를 식별합니다. 이러한 변수 이름을 변경하고 해당 참조가 들어 있는 개체 정의를 업데이트하려고 합니다.

  • 개발 중인 데이터베이스 프로젝트에서 추가 데이터베이스 스키마를 참조하려고 합니다. 다른 데이터베이스 프로젝트는 팀과 공유하지 않으면서 이러한 스키마만 공유하려 합니다. 이 경우 다른 프로젝트의 데이터베이스 메타파일(.dbmeta)에 대한 참조를 추가하고 해당 메타파일만 버전 제어에 체크 인할 수 있습니다. 이 접근 방식을 사용하면 참조할 스키마가 들어 있는 데이터베이스 프로젝트에 대한 액세스를 제한할 수 있습니다. 또한 데이터베이스 프로젝트는 배포하지만 종속된 프로젝트는 배포하지 않으려는 경우에도 이 접근 방식을 사용해야 합니다.

데이터베이스 리팩터링을 사용하여 크로스 데이터베이스 참조와 관련된 추가 작업을 수행할 수 있습니다. 자세한 내용은 방법: 서버 또는 데이터베이스에 대한 참조 이름 바꾸기를 참조하십시오.

데이터베이스 프로젝트 및 메타파일에 대한 참조

데이터베이스 프로젝트에 참조를 추가하는 경우 데이터베이스 프로젝트를 빌드할 때 생성되는 다른 데이터베이스 프로젝트나 메타파일을 지정할 수 있습니다.

다른 데이터베이스 프로젝트를 참조해야 하는 경우는 다음과 같습니다.

  • 참조가 포함될 데이터베이스와 참조 중인 데이터베이스 모두 스키마를 변경해야 하는 경우. 참조가 들어 있는 데이터베이스 프로젝트를 배포하면 참조 중인 데이터베이스 프로젝트도 함께 배포됩니다.

데이터베이스 메타파일을 참조해야 하는 경우는 다음과 같습니다.

  • 프로젝트가 현재 솔루션에 들어 있지 않은 데이터베이스를 참조해야 하는 경우

  • 종속된 프로젝트를 배포하지 않고 단일 프로젝트만 배포해야 하는 경우

  • 변경 가능성이 없는 데이터베이스 스키마를 참조하고 있는 경우. 이 시나리오에서는 데이터베이스 메타파일을 버전 제어에 체크 인할 수 있습니다.

크로스 데이터베이스 참조의 제한 사항

데이터베이스 스키마를 가져오는 경우 데이터베이스 프로젝트에서는 참조를 배포하기 전에 해당 참조의 유효성을 검사할 수 없으므로 개체 정의에 다른 데이터베이스에 대한 참조가 있으면 경고가 발생합니다. 이 경우 프로젝트 속성에서 데이터베이스 참조를 정의하면 개체 정의의 유효성을 검사하고 경고를 해결할 수 있습니다. 그런 다음 서버 및 데이터베이스의 이름을 변수로 대체하여 개체 정의를 업데이트하면 됩니다. 또한 리팩터링을 사용하여 이러한 대체 작업을 수행할 수도 있습니다. 자세한 내용은 방법: 크로스 데이터베이스 참조 만들기방법: 서버 또는 데이터베이스에 대한 참조 이름 바꾸기를 참조하십시오.

참조하는 서버 및 데이터베이스의 변수와 값은 특정 빌드 구성에만 한정되지 않습니다. 서버와 데이터베이스를 명령 프롬프트에서 지정하려면 배포 시 대체할 수 있는 MSBuild 변수로 해당 서버와 데이터베이스를 참조해야 합니다.

또한 다음과 같은 제한 사항이 적용됩니다.

  • 해당되는 데이터베이스 프로젝트가 있는 경우에만 데이터베이스에 참조를 추가할 수 있습니다.

  • 해당 데이터베이스 프로젝트의 메타파일에 대한 참조를 추가하기 전에 데이터베이스 프로젝트를 빌드해야 합니다.

  • 데이터베이스 프로젝트에 대한 크로스 데이터베이스 참조에서 경고가 발생하지 않도록 참조 중인 해당 데이터베이스 프로젝트를 빌드해야 합니다.

  • 참조하는 솔루션 또는 데이터베이스 프로젝트의 빌드 구성을 변경하는 경우 이에 대한 크로스 데이터베이스 참조에서 경고가 발생하지 않도록 솔루션을 다시 빌드해야 합니다.

  • 다른 서버에 있는 데이터베이스 프로젝트의 개체를 참조하는 경우 이를 대상 서버에서 연결된 서버로 정의해야 합니다. 자세한 내용은 방법: 크로스 데이터베이스 참조 만들기를 참조하십시오.

  • 마스터 데이터베이스를 참조하는 크로스 데이터베이스 참조는 필요하지 않습니다.

  • SETVAR 변수를 포함하는 참조는 항상 "[$(VariableName)]" 형식을 사용해야 합니다. 여기서 대괄호를 생략하면 데이터베이스 프로젝트를 배포할 수 없습니다.

  • SETVAR 변수 이름은 고유해야 합니다. 서버와 데이터베이스의 이름이 같은 경우 이름은 다르지만 같은 값으로 확인되는 변수를 정의해야 합니다.

보안 고려 사항

데이터베이스 프로젝트를 빌드할 때 생성되는 메타파일에는 해당 프로젝트에 대한 스키마 정보가 들어 있습니다. 이러한 스키마 정보를 보호하려면 메타파일에 대한 액세스를 제한해야 합니다. 메타파일을 대상 서버에 배포하는 대신 버전 제어에 체크 인하면 해당 메타파일을 팀과 공유할 수 있습니다. 참조하는 데이터베이스에 대한 데이터베이스 프로젝트가 같은 솔루션에 들어 있는 경우 프로젝트의 다른 개발자들은 버전 제어에 동기화하고 솔루션을 빌드해야 액세스 권한을 가지게 됩니다.

예제

ReportDb와 DependentDb라는 두 개의 데이터베이스 프로젝트가 있는 경우 ReportDb에서 DependentDb의 개체를 참조해야 할 수 있습니다. 이 경우 DependentDb 데이터베이스 프로젝트의 속성에 참조를 추가하고 변수를 다음과 같이 정의하는 방식으로 작업을 시작할 수 있습니다.

  • RefServer

  • RefDatabase

RefServer의 값은 DependentDb가 있는 서버의 이름입니다. RefDatabase의 값은 DependentDb 프로젝트를 통해 배포되는 대상 데이터베이스의 이름입니다. 이 예제에서 RefServer의 값은 StageSvr이고, RefDatabase의 값은 DepDb입니다.

StageSvr 서버의 DepDb 데이터베이스에 배포되는 DependentDb의 Employee 테이블에서 모든 열을 선택하는 ReportDb에 뷰를 추가할 수 있습니다. 이 뷰에 대한 개체 정의는 다음과 같이 만들 수 있습니다.

CREATE VIEW [dbo].[DependentView]
AS
SELECT * FROM [$(RefServer)].[$(RefDatabase)].[dbo].[Employee]
;

참고 항목

작업

방법: 서버 또는 데이터베이스에 대한 참조 이름 바꾸기

개념

데이터베이스 개체 작업 개요

Database Edition의 용어 개요

기타 리소스

방법: 크로스 데이터베이스 참조 만들기