개요(SMO)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

SMO(SQL Server 관리 개체)는 Microsoft SQL Server의 프로그래밍 방식 관리를 위해 설계된 개체입니다. SMO를 사용하여 사용자 지정된 SQL Server 관리 애플리케이션을 빌드할 수 있습니다. SQL Server Management Studio는 SQL Server를 관리하기 위한 강력하고 광범위한 애플리케이션이지만 SMO 애플리케이션에서 더 나은 서비스를 제공하는 경우가 있을 수 있습니다.

예를 들어 SQL Server 관리 작업을 제어하는 사용자 애플리케이션은 새 사용자의 요구 사항을 충족하고 학습 비용을 줄이기 위해 간소화해야 할 수 있습니다. 사용자 지정된 SQL Server 데이터베이스를 만들거나 인덱스의 효율성을 만들고 모니터링하기 위한 애플리케이션을 만들어야 할 수 있습니다. 또한 타사 하드웨어나 소프트웨어를 데이터베이스 관리 애플리케이션에 원활하게 통합하기 위해 SMO 애플리케이션을 사용할 수도 있습니다.

SMO는 SQL Server 2005(9.x) 이상 버전과 호환되므로 다중 버전 환경을 쉽게 관리할 수 있습니다.

SMO의 기능은 다음과 같습니다.

  • 캐시된 개체 모델 및 최적화된 개체 인스턴스 생성. 개체는 참조될 때만 로드됩니다. 개체 속성은 개체를 만들 때만 부분적으로 로드됩니다. 나머지 개체와 속성은 직접 참조될 때 로드됩니다.

  • Transact-SQL 문의 일괄 처리 실행 문은 네트워크 성능을 향상시키기 위해 일괄 처리됩니다.

  • Transact-SQL 문을 캡처합니다. 모든 작업을 스크립트로 캡처할 수 있습니다. Management Studio는 이 기능을 사용하여 작업을 즉시 실행하는 대신 스크립팅합니다.

  • WMI 공급자를 사용하여 SQL Server 서비스 관리 SQL Server 서비스를 프로그래밍 방식으로 시작, 중지 및 일시 중지할 수 있습니다.

  • 고급 스크립팅. Transact-SQL 스크립트를 생성하여 SQL Server 인스턴스의 다른 개체에 대한 관계를 설명하는 SQL Server 개체를 다시 만들 수 있습니다.

  • URL(고유 리소스 이름)을 사용합니다. URN을 사용하면 SMO 개체의 인스턴스를 만들고 참조할 수 있습니다.

또한 SMO는 SQL Server 2005(9.x)에서 도입된 많은 기능과 구성 요소 또는 새 개체 또는 속성으로 나타냅니다. 이러한 새로운 기능 및 구성 요소에는 다음이 포함됩니다.

  • 파티션 구성표의 데이터 스토리지에 대한 테이블 및 인덱스 분할입니다. 자세한 내용은 Partitioned Tables and Indexes을 참조하세요.

  • SOAP 요청을 관리하기 위한 HTTP 엔드포인트입니다. 자세한 내용은 엔드포인트 구현을 참조 하세요.

  • 동시성을 높이기 위한 스냅샷 격리 및 행 수준 버전 관리 자세한 내용은 Working with Snapshot Isolation을 참조하세요.

  • XML 스키마 컬렉션, XML 인덱스 및 XML 데이터 형식은 XML 데이터의 유효성 검사 및 스토리지를 제공합니다. 자세한 내용은 XML 스키마 컬렉션(SQL Server)XML 스키마 사용을 참조하세요.

  • 데이터베이스의 읽기 전용 복사본을 만들기 위한 스냅샷 데이터베이스입니다.

  • 메시지 기반 통신에 대한 Service Broker 지원. 자세한 내용은 SQL Server Service Broker을 참조하세요.

  • SQL Server 데이터베이스 개체의 여러 이름에 대한 동의어 지원입니다. 자세한 내용은 동의어(데이터베이스 엔진)를 참조하세요.

  • SQL Server에서 전자 메일 서버, 전자 메일 프로필 및 전자 메일 계정을 만들 수 있는 데이터베이스 메일 관리 자세한 내용은 데이터베이스 메일을 참조하세요.

  • 등록된 서버는 연결 정보 등록을 지원합니다. 자세한 내용은 서버 등록을 참조 하세요.

  • SQL Server 이벤트의 추적 및 재생 자세한 내용은 SQL Server Profiler, SQL Trace, SQL Server Distributed Replay확장 이벤트를 참조하세요.

  • 보안 제어를 위한 인증서 및 키 지원 자세한 내용은 암호화 계층 구조를 참조 하세요.

  • DDL 이벤트가 발생할 때 기능을 추가하기 위한 DDL 트리거입니다. 자세한 내용은 DDL 트리거를 참조 하세요.

SMO 네임스페이스는 Microsoft.SqlServer.Management.Smo입니다. SMO는 Microsoft .NET Framework 어셈블리로 구현됩니다. 즉, SMO 개체를 사용하기 전에 Microsoft .NET Framework 버전 2.0의 공용 언어 런타임을 설치해야 합니다. SMO 어셈블리는 기본적으로 SQL Server SDK 옵션을 사용하여 GAC(전역 어셈블리 캐시)에 설치됩니다. 어셈블리는 C:\Program Files\Microsoft SQL Server\130\SDK\Assemblies에 있습니다. 자세한 내용은 Visual Studio .NET Framework 설명서를 참조하세요.

SMO 클래스

SMO 클래스에는 인스턴스 클래스 및 유틸리티 클래스라는 두 개의 범주가 포함되어 있습니다.

인스턴스 클래스

인스턴스 클래스는 서버, 데이터베이스, 테이블, 트리거 및 저장 프로시저와 같은 SQL Server 개체를 나타냅니다. 이 ServerConnection 클래스는 SQL Server 인스턴스에 대한 연결을 설정하고 이 클래스에 전송된 명령의 캡처 모드를 제어하는 데 사용됩니다.

SMO 인스턴스 개체는 데이터베이스 서버의 계층 구조를 나타내는 계층 구조를 형성합니다. 맨 위에는 데이터베이스가 있는 SQL Server 인스턴스가 있으며 테이블, 열, 트리거 등이 있습니다. 하나 이상의 열이 있는 테이블과 같이 여러 자식 관계에 하나의 부모가 있다는 것이 논리적인 경우 자식은 개체 컬렉션으로 표시됩니다. 그렇지 않으면 자식이 하나의 개체로 표시됩니다.

유틸리티 클래스

유틸리티 클래스는 특정 작업을 수행하기 위해 명시적으로 만들어진 개체 그룹입니다. 함수에 따라 서로 다른 개체 계층으로 나뉘어져 있습니다.

  • 전송 클래스. 이 클래스는 다른 데이터베이스로 스키마와 데이터를 전송하는 데 사용됩니다.

  • 백업 및 복원 클래스. 데이터베이스를 백업하고 복원하는 데 사용됩니다.

  • 스크립터 클래스입니다. 개체 및 해당 종속성을 다시 생성하기 위한 스크립트 파일을 만드는 데 사용됩니다.

SMO 기능

최적화된 성능

SMO 아키텍처는 처음에는 개체가 부분적으로만 인스턴스화되고 서버에서 최소 속성 정보가 요청되기 때문에 메모리 측면에서 효율적입니다. 개체가 명시적으로 참조될 때까지 개체의 전체 인스턴스화가 지연됩니다. 개체는 처음 검색된 속성 집합에 없는 속성을 요청하거나 이러한 속성이 필요한 메서드를 호출할 때 완전히 인스턴스화됩니다. 부분적으로 인스턴스화된 개체와 완전히 인스턴스화된 개체 간의 전환은 사용자에게 투명합니다. 또한 많은 메모리를 사용하는 일부 속성은 해당 속성이 명시적으로 참조되지 않는 한 검색되지 않습니다. 예를 Size 들어 개체 속성의 속성이 있습니다 Database . 그러나 부분 인스턴스화에는 더 많은 네트워크 왕복이 필요하며 애플리케이션에 가장 적합한 옵션이 아닐 수 있습니다.

시스템 환경에 맞게 인스턴스화를 제어할 수 있습니다. 지연 인스턴스화를 사용하면 속성이 참조될 때 많은 서버 요청이 트리거될 수 있지만 애플리케이션에서 필요로 하는 메모리의 양은 최소화됩니다.

실제 데이터베이스 개체를 나타내는 개체인 인스턴스 클래스는 세 가지 인스턴스화 수준에서 존재할 수 있습니다. 최소 인스턴스화(최소 필수 속성만 한 블록에서 읽음), 부분적으로 인스턴스화되고(상대적으로 많은 양의 메모리를 사용하는 모든 속성이 한 블록에서 읽음) 완전히 인스턴스화됩니다. 입증되지 않고 완전히 인스턴스화되는 것은 기존의 인스턴스화 상태입니다. 부분적으로 인스턴스화된 개체에는 전체 개체 속성 집합에 대한 값이 포함되지 않으므로 부분적으로 인스턴스화된 상태가 효율성을 높입니다. 부분 인스턴스화는 직접 참조되지 않는 개체의 기본 상태입니다. 이러한 속성 중 하나를 참조하면 개체의 전체 인스턴스화를 묻는 오류가 생성됩니다.

캡처 실행

직접 실행이 일반적인 실행 방법입니다. 문이 발생하면 SQL Server 인스턴스로 직접 전송됩니다. 캡처 실행이 대안입니다.

캡처 실행을 사용하면 일반적으로 실행되는 Transact-SQL 일괄 처리를 캡처할 수 있습니다. 이렇게 하면 SMO 프로그래머가 스크립트를 연기하거나, 나중에 실행하기 위해 저장하거나, 최종 사용자에 대한 미리 보기를 제공할 수 있습니다. 예를 들어 데이터베이스 만들기, 테이블 만들기 및 인덱 스 만들기 문을 하나의 일괄 처리로 보낸 다음 세 개의 순차적 단계로 실행할 수 있습니다. 이 기능은 개체를 사용하여 사용자가 제어합니다 Server .

WMI 공급자

WMI 공급자 개체는 SMO로 래핑됩니다. 이렇게 하면 SMO 프로그래머에게 네임스페이스로 표현되는 프로그래밍 모델 및 SQL Server WMI 공급자의 세부 정보를 이해할 필요가 없이 SMO 클래스와 비슷한 간단한 개체 모델을 제공합니다. WMI 공급자를 사용하면 SQL Server 서비스, 별칭, 클라이언트 및 서버 네트워크 라이브러리를 구성할 수 있습니다.

스크립팅

SMO에서는 스크립팅 기능이 향상되어 Scripter 클래스로 이전되었습니다. Scripter 클래스는 종속성을 검색하고, 개체 간의 관계를 이해하고, 종속성 계층 구조를 조작할 수 있습니다. 기본 스크립팅 개체는 Scripter 개체입니다. 또한 종속성을 처리하고 진행 상태나 오류 이벤트에 응답하는 다양한 지원 개체가 있습니다.

Scripter 개체는 다음과 같은 고급 스크립팅 옵션을 지원합니다.

  • 간단한 1단계 스크립팅(한 단계에서 스크립트 만들기)

  • 고급 3단계 스크립팅(종속성 검색, 목록 생성, 스크립트 생성 등 3단계로 스크립트 만들기)

  • 양방향 종속성 검색(종속성 또는 종속성 검색 허용)

  • 진행률 이벤트에 대한 응답

  • 오류 이벤트에 대한 응답

고유 리소스 이름

SMO 개체 라이브러리를 사용하는 주요 개념은 URN(Unique Resource Name)입니다. URN은 XPath와 유사한 구문을 사용합니다. XPath는 각 수준에 한정자와 함수가 있는 개체를 지정하는 데 사용되는 계층 경로입니다. SMO에서 URN은 경로와 제한된 기능의 특성 명명이라는 두 가지 요소를 가집니다. 경로는 개체의 위치를 지정하는 데 사용되고 특성 명명은 필터링 수준을 제어하는 데 사용됩니다.

다음은 데이터베이스에 대한 URN의 예입니다.

/Server/Database[@Name='AdventureWorks2022']  

개체에 대한 URN은 URN 속성을 참조하여 검색할 수 있습니다. Scripter 개체도 Scripter 개체의 메서드에 개체 참조를 전달하는 매개 변수로 URN을 사용합니다. 또한 서버 개체의 GetSmoObject 메서드에 대해 URN을 지정할 수 있습니다. SMO 개체의 인스턴스를 만드는 데 사용됩니다.

SMO에 표시되는 SQL Server 기능

테이블 및 인덱스 분할

인덱스 테이블 분할을 사용하면 파일 그룹 전체의 테이블 및 인덱스에서 데이터 분포를 관리할 수 있습니다. 이 새로운 기능은 SMO 개체로 표시됩니다.

끝점

SOAP 및 데이터베이스 미러링 요청은 개체를 사용하여 엔드포인트에서 Endpoint 처리됩니다.

스냅샷 격리/행 수준 버전 관리

스냅샷 격리(행 수준 버전 관리)는 새 Database 개체 속성으로 표시됩니다.

XML 스키마 네임스페이스, XML 인덱스 및 XML 데이터 형식

XML 스키마 네임스페이스는 개체 컬렉션으로 SMO에 표시됩니다. XML 인덱스는 인덱스 개체 속성으로 SMO에 표시됩니다.

전체 텍스트 검색 향상된 기능

전체 텍스트 검색의 향상된 기능을 나타내는 새 개체가 SMO에 제공됩니다.

페이지 확인

개체는 PageVerify 데이터베이스 페이지 확인 옵션을 나타냅니다.

스냅샷 데이터베이스

스냅샷 데이터베이스는 특정 시점에 대한 지정된 데이터베이스의 읽기 전용 복사본입니다. 개체의 Database 속성을 사용하여 스냅샷 데이터베이스를 IsDatabaseSnapshot 지정할 수 있습니다.

Service Broker

Service Broker 및 해당 기능은 개체 그룹으로 표시됩니다.

인덱스 향상

SQL Server 인덱스 개선 사항은 개체의 새 속성으로 Index 표시됩니다.

참고 항목

Replication Management Objects Concepts