다음을 통해 공유


포함된 데이터베이스

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance

포함된 데이터베이스는 다른 데이터베이스 및 해당 데이터베이스를 호스팅하는 SQL Server instance에서 격리된 데이터베이스입니다. SQL Server를 사용하면 사용자가 4가지 방법으로 instance에서 데이터베이스를 격리할 수 있습니다.

  • 데이터베이스를 설명하는 대부분의 메타데이터는 데이터베이스에서 유지 관리됩니다. (대신 master 데이터베이스에서 메타데이터를 유지 관리하거나 유지 관리)

  • 모든 메타데이터는 동일한 데이터 정렬을 사용하여 정의됩니다.

  • 데이터베이스에서 사용자 인증을 수행하여 SQL Server instance의 로그인에 대한 데이터베이스 종속성을 줄일 수 있습니다.

  • SQL Server 환경(DMV, XEvents 등)은 포함 정보를 보고하고 조치를 수행할 수 있습니다.

데이터베이스에 메타데이터 저장과 같이 부분적으로 포함된 데이터베이스의 일부 기능은 모든 SQL Server 데이터베이스에 적용됩니다. 데이터베이스 수준 인증 및 카탈로그 데이터 정렬 등의 부분적으로 포함된 데이터베이스의 일부 이점은 먼저 사용하도록 설정해야만 사용할 수 있습니다. CREATE DATABASEALTER DATABASE 문을 사용하거나 SQL Server Management Studio를 사용하여 부분 포함을 사용하도록 설정할 수 있습니다. 부분 데이터베이스 포함을 사용하도록 설정하는 방법은 Migrate to a Partially Contained Database을 참조하십시오.

부분적으로 포함된 데이터베이스.

전체가 포함된 데이터베이스에는 데이터베이스를 정의하는 데 필요한 데이터베이스 설정과 메타데이터가 모두 포함되며 데이터베이스가 설치된 SQL Server 데이터베이스 엔진 instance와 어떠한 구성 종속 관계도 없습니다. 이전 버전의 SQL Server에서 데이터베이스를 SQL Server instance와 분리하는 작업은 시간이 많이 걸릴 수 있으며 이 작업을 위해서는 데이터베이스와 SQL Server instance 간 관계를 자세히 알고 있어야 합니다. 부분적으로 포함된 데이터베이스를 사용하면 SQL Server 및 기타 데이터베이스의 instance에서 데이터베이스를 쉽게 분리할 수 있습니다.

포함된 데이터베이스는 포함과 관련된 기능을 고려합니다. 데이터베이스에 상주하는 함수에만 의존하는 사용자 정의 엔터티는 완전히 포함된 것으로 간주됩니다. 데이터베이스 외부에 있는 함수를 사용하는 사용자 정의 엔터티는 포함되지 않은 것으로 간주됩니다. 더 자세한 내용은 이 주제의 후반부에 있는 포함됨 섹션을 참조하세요.

다음 용어는 포함된 데이터베이스 모델에 적용됩니다.

데이터베이스 경계
데이터베이스와 SQL Server instance 간의 경계입니다. 데이터베이스와 다른 데이터베이스 간의 경계입니다.

포함됨
데이터베이스 경계에 완전히 존재하는 요소입니다.

포함되지 않음
데이터베이스 경계를 넘는 요소입니다.

포함되지 않은 데이터베이스
포함이 NONE으로 설정된 데이터베이스입니다. SQL Server 2012(11.x) 이전 버전의 모든 데이터베이스는 포함되지 않은 데이터베이스입니다. 기본적으로 모든 SQL Server 2012(11.x) 이상 데이터베이스에는 NONE으로 설정된 포함이 있습니다.

부분적으로 포함된 데이터베이스.
부분적으로 포함된 데이터베이스는 데이터베이스 경계를 넘는 일부 기능을 허용할 수 있는 포함된 데이터베이스입니다. SQL Server에는 포함 경계가 교차할 때 확인할 수 있는 기능이 있습니다.

포함된 사용자
포함된 데이터베이스에는 두 가지 유형의 사용자가 있습니다.

  • 비밀번호가 있는 포함된 데이터베이스 사용자

    비밀번호가 있는 포함된 데이터베이스 사용자는 데이터베이스로 인증됩니다. 자세한 내용은 포함된 데이터베이스 사용자 - 데이터베이스를 이식 가능하게 만들기를 참조하세요.

  • Windows 보안 주체

    권한이 부여된 Windows 사용자 및 권한 있는 Windows 그룹의 구성원은 데이터베이스에 직접 연결할 수 있으며 master 데이터베이스에 로그인할 필요가 없습니다. 데이터베이스는 Windows에 의한 인증을 신뢰합니다.

master 데이터베이스의 로그인을 기반으로 하는 사용자는 포함된 데이터베이스에 대한 액세스를 허용할 수 있지만 SQL Server 인스턴스에 대한 종속성을 만듭니다. 따라서 로그인을 기반으로 사용자를 만들려면 부분 포함이 필요합니다.

Important

부분적으로 포함된 데이터베이스를 사용하도록 설정하면 데이터베이스 소유자에게 SQL Server instance에 대한 액세스를 제어할 수 있습니다. 자세한 내용은 Security Best Practices with Contained Databases를 참조하세요.

데이터베이스 경계
부분적으로 포함된 데이터베이스는 instance의 데이터베이스 기능과 분리되므로 데이터베이스 경계라는 두 요소 사이에 명확하게 정의된 줄이 있습니다.

데이터베이스 경계 내에는 데이터베이스가 개발 및 관리되는 데이터베이스 모델이 있습니다. 데이터베이스 내부에 있는 엔터티의 예로는 sys.tables와 같은 시스템 테이블, 암호가 있는 포함된 데이터베이스 사용자 및 두 부분으로 구성된 이름으로 참조되는 현재 데이터베이스의 사용자 테이블이 있습니다.

데이터베이스 경계 외부에는 instance 수준 함수 및 관리와 관련된 관리 모델이 있습니다. 데이터베이스 경계 외부에 있는 엔터티의 예로는sys.endpoints와 같은 시스템 테이블, 로그인에 매핑된 사용자 및 세 부분으로 구성된 이름으로 참조되는 다른 데이터베이스의 사용자 테이블이 있습니다.

억제

데이터베이스 내에 전적으로 상주하는 사용자 엔터티는 포함된 것으로 간주됩니다. 데이터베이스 외부에 있거나 데이터베이스 외부 기능과의 상호 작용에 의존하는 사용자 엔터티는 포함되지 않은것으로 간주됩니다.

일반적으로 사용자 엔터티는 다음과 같은 포함 범주로 분류됩니다.

  • 완전히 포함된 사용자 엔터티(데이터베이스 경계를 넘지 않는 엔터티)(예: sys.indexes). 이러한 기능 또는 이러한 엔터티만 참조하는 개체를 사용하는 모든 코드도 완전히 포함됩니다.

  • 연결되지 않은 사용자 엔터티(데이터베이스 경계를 넘어가는 엔터티)(예: sys.server_principals 또는 서버 보안 주체(로그인) 자체)입니다. 이러한 엔터티 또는 이러한 엔터티를 참조하는 함수를 사용하는 모든 코드는 포함되지 않습니다.

부분적으로 포함된 데이터베이스.

포함된 데이터베이스 기능은 현재 부분적으로 포함된 상태에서만 사용할 수 있습니다. 부분적으로 포함된 데이터베이스는 포함되지 않은 기능을 사용하도록 허용하는 포함된 데이터베이스입니다.

sys.dm_db_uncontained_entitiessys.sql_modules(Transact-SQL) 보기를 사용하여 연결되지 않은 개체 또는 기능에 대한 정보를 반환합니다. 데이터베이스 요소의 포함 상태를 확인하여 포함 수준을 승격하기 위해 대체하거나 변경해야 하는 개체 또는 기능을 검색할 수 있습니다.

Important

특정 개체에는 NONE의 기본 포함 설정이 있으므로 이 보기는 가양성 값을 반환할 수 있습니다.

부분적으로 포함된 데이터베이스의 동작은 데이터 정렬과 관련하여 포함되지 않은 데이터베이스의 동작과 가장 뚜렷하게 다릅니다. 데이터 정렬 문제에 대한 더 자세한 내용은 Contained Database Collations를 참조하세요.

부분적으로 포함된 데이터베이스 사용의 이점

부분적으로 포함된 데이터베이스를 사용하여 해결할 수 있는 포함되지 않은 데이터베이스와 관련된 문제 및 복잡성이 있습니다.

데이터 이동

데이터베이스를 이동할 때 발생하는 문제 중 하나는 데이터베이스를 한 instance에서 다른 instance로 이동할 때 몇 가지 중요한 정보를 사용할 수 없다는 것입니다. 예를 들어 로그인 정보가 데이터베이스 대신 인스턴스 내에 저장되어 있는 경우, 포함되지 않은 데이터베이스를 한 instance에서 SQL Server의 다른 instance로 이동하는 경우 이 정보는 남아 있습니다. 누락된 정보를 식별하고 데이터베이스를 사용하여 SQL Server의 새 instance로 이동해야 합니다. 이 프로세스는 어렵고 시간이 많이 걸립니다.

부분적으로 포함된 데이터베이스는 데이터베이스에 중요한 정보를 저장할 수 있으므로 데이터베이스가 이동된 후에도 정보가 계속 포함됩니다.

참고 항목

부분적으로 포함된 데이터베이스는 instance와 분리할 수 없는 데이터베이스에서 사용되는 기능을 설명하는 설명서를 제공할 수 있습니다. 여기에는 다른 상호 관련된 데이터베이스 목록, 데이터베이스에 필요하지만 포함할 수 없는 시스템 설정 등이 포함됩니다.

Always On을 사용하는 포함된 데이터베이스 사용자의 이점

SQL Server instance와의 관계를 줄이면 Always On 가용성 그룹을 사용할 때 장애 조치(failover) 중에 부분적으로 포함된 데이터베이스가 유용할 수 있습니다.

포함된 사용자를 만들면 사용자가 포함된 데이터베이스에 직접 연결할 수 있습니다. 이는 Always On 솔루션과 같은 고가용성 및 재해 복구 시나리오에서 매우 중요한 기능입니다. 사용자가 포함된 경우 장애 조치(failover)의 경우 사용자는 보조를 호스팅하는 instance에 로그인을 만들지 않고 보조 데이터베이스에 연결할 수 있습니다. 이는 즉각적인 이점을 제공합니다. 자세한 내용은 Always On 가용성 그룹 개요(SQL Server)Always On 가용성 그룹에 대한 필수 조건, 제한 사항 및 권장 사항(SQL Server)을 참조하세요.

초기 데이터베이스 개발

개발자는 새 데이터베이스가 배포될 위치를 알 수 없으므로 배포된 환경 영향을 데이터베이스에 제한하면 개발자의 작업과 우려가 줄어듭니다. 포함되지 않은 모델에서 개발자는 새 데이터베이스 및 프로그램에 대한 가능한 환경적 영향을 고려해야 합니다. 하지만 개발자는 부분적으로 포함된 데이터베이스를 사용하여 데이터베이스에 대한 인스턴스 수준의 영향과 인스턴스 수준에서 개발자가 고려해야 할 요소를 검색할 수 있습니다.

데이터베이스 관리

데이터베이스 설정을 master 데이터베이스 대신 데이터베이스에 유지하면 데이터베이스 소유자에게 sysadmin 권한을 제공할 필요 없이 각 데이터베이스 소유자가 해당 데이터베이스를 더 세밀하게 제어할 수 있습니다.

제한 사항

부분적으로 포함된 데이터베이스는 다음 기능을 허용하지 않습니다.

  • 복제, 변경 데이터 캡처 또는 변경 내용 추적

  • 번호를 매긴 프로시저

  • 데이터 정렬이 변경된 기본 제공 함수에 의존하는 스키마 바인딩된 개체

  • 개체, 열, 기호 또는 형식에 대한 참조를 포함하여 데이터 정렬 변경으로 인한 바인딩 변경입니다.

Warning

임시 저장 프로시저는 현재 허용됩니다. 포함 조건을 위반하므로 이후 버전의 포함된 데이터베이스에서는 지원되지 않을 것입니다.

데이터베이스 포함 식별

데이터베이스의 포함 상태를 식별할 수 있는 도구가 두 가지 있습니다. sys.dm_db_uncontained_entities(Transact-SQL)는 데이터베이스에서 잠재적으로 연결되지 않은 모든 엔터티를 보여 주는 뷰입니다. database_uncontained_usage 이벤트는 런타임에 실제 연결되지 않은 엔터티를 식별할 때 발생합니다.

sys.dm_db_uncontained_entities

이 보기는 데이터베이스 경계를 교차하는 엔터티와 같이 연결되지 않을 가능성이 있는 데이터베이스의 모든 엔터티를 보여줍니다. 여기에는 데이터베이스 모델 외부의 개체를 사용할 수 있는 사용자 엔터티가 포함됩니다. 그러나 런타임까지 일부 엔터티(예: 동적 SQL을 사용하는 엔터티)를 포함할 수 없으므로 뷰에 실제로 연결되지 않은 일부 엔터티가 표시될 수 있습니다. 더 자세한 내용은 sys.dm_db_mirroring_connections(Transact-SQL)를 참조하세요.

database_uncontained_usage 이벤트

이 XEvent는 런타임에 연결되지 않은 엔터티를 식별할 때마다 발생합니다. 여기에는 클라이언트 코드에서 시작된 엔터티가 포함됩니다. 이 XEvent는 실제로 포함되지 않은 엔터티에 대해서만 발생합니다. 그러나 이벤트는 런타임에만 발생합니다. 따라서 실행하지 않은 연결되지 않은 사용자 엔터티는 이 XEvent로 식별되지 않습니다.

참고 항목

수정된 기능(포함된 데이터베이스)
포함된 데이터베이스 데이터 정렬
포함된 데이터베이스의 보안 모범 사례
부분적으로 포함된 데이터베이스로 마이그레이션
포함된 데이터베이스 사용자 - 휴대용 데이터베이스 만들기