본문 바로가기

MSSQL

SQL Server 2005 개발자 가이드[10/13]


SMO(SQL Management Objects) 지원

관리자가 수행해야 하는 관리작업을 자동화하면, 관리작업에 대한 오류나 일관성이 없는 관리작업의 발생가능성을 줄여줄 수 있습니다. 특히, 다수의 SQL Server 와 인스턴스가 존재하는 엔터프라이즈 환경에서는 더욱 관리작업의 자동화가 필요합니다. SQL Server 2005에서는 반복적인 공통 관리 작업의 자동화를 지원하기 위한 SQL 관리 개체(SMO) API를 제공합니다.

SMO 란?
SMO는 관리작업을 위한 프로그램과 스크립트를 생성할 수 있는 기반의 역할을 합니다. SQL Server 개체와 작업을 관리하기 위해서 사용할 프로그램을 개발하기 위한 프로그래밍 개체 집합을 의미합니다.

SMO는 .NET 어셈블리(Microsoft.SqlServer.Smo.dll)로 구현되어 있습니다. SMO는 개체의 계층구조와 고유의 개체 모델을 제공합니다.

SMO를 사용하여 서버 구성 옵션의 조회 및 변경, SQL Server 에이전트 작업 관리, 백업일정계획 관리 등과 같은, 대부분의 관리작업을 수행하기 위한 어플리케이션을 개발할 수 있습니다.

SMO에서 지원하는 SQL Server 버전
SMO는 SQL Server 7.0, SQL Server 2000, SQL Server 2005가 구동중인 서버에 대한 프로그래밍 기반을 제공합니다. 단, SQL Server 가 호환성 수준 60이나 65로 구동중인 경우에 는, 일부 작업에 대해서 오류가 발생하게 됩니다.

SMO 구현
SQL 관리 개체는 .NET 어셈블리내에 클래스로 구현되어 있습니다. SMO를 사용하여 어플리케이션을 개발하고자 할 때에서는, 기본적으로 다음과 같은 어셈블리를 사용해야 합니다.

    Microsoft.SqlServer.Smo.dll - 대부분의 SMO 클래스를 제공합니다.
    Microsoft.SqlServer.ConnectionInfo.dll - SQL Server 인스턴스와 연결에 사용되는 클래
       스를 제공합니다.

각 어셈블리에는 다수의 네임스페이스와 클래스가 포함되어 있습니다.

기존 SQL-DMO의 대체기능
SQL 분산관리개체(SQL-DMO)는 이전 버전 SQL Server 에서 지원되던 데이터베이스 관리를 위한 프로그래밍 인터페이스입니다. SMO는 기존 SQL-DMO를 대체하는 역할을 합니다. SMO는 SQL-DMO에 비해서 좀 더 효율적으로 자원을 사용하여, 관리작업을 자동화하기 위해 좀 더 세밀한 부분까지 통제할 수 있습니다. 기존 SQL-DMO에 대한 지식을 보유하고 있는 사용자라면, SMO에 대한 학습에 도움이 될 것입니다.

SMO의 기능

SQL Server 2005에서 지원하는 SMO의 주요기능은 다음과 같습니다.

   최적화된 인스턴스 생성. SMO는 SQL-DMO에서 사용하는 것처럼 전체 개체에 대한 인스턴스
       를 생성하지 않고 가능한 범위내에서 필요한 부분에 대한 인스턴스를 생성하기 때문에 성능을
       향상시킬 수 있습니다. 코드에서 명시적으로 개체에 대한 참조를 설정하는 경우에만, 전체 개체에
       대해서 인스턴스를 생성하게 됩니다.
   실행 보류. SMO는 기본값으로 각 명령을 즉시 수행합니다. 실행 보류 기능을 통해, 데이터베이
       스에 변경사항을 적용하기 전에 검토하기 위해서, 특정 시점까지 명령의 실행을 보류할 수 있습
       니다.
   WMI 호환. SMO는 SQL Server WMI 공급자에 대한 래퍼 클래스를 제공하여, SQL Server 에
       대한 자동화된 코드의 일관성을 위지하기 위해 WMI 프로그래밍 인터페이스를 제공합니다.
   스크립트 작성. SMO는 Scripter 클래스를 통해, 단일 개체를 기반으로 하여 전체 종속성 트리에
       대한 스크립트 작업을 자동화하는 것과 같은, 개선된 스크립트 기능을 제공합니다.
   서버옵션구성. SMO 는 sp_configure 저장 프로시저와 동일한 방법으로 서버 구성 옵션을 조회
       하고 변경할 수 있는 기능을 제공합니다.
SMO와 SQL Server 분산 관리 개체(SQL-DMO) 비교
SMO는 이전 버전 SQL Server 에서 제공하던 SQL Server 분산관리개체(SQL-DMO)의 역할을 완전히 대체합니다. SQL Server 2005 데이터베이스 엔진에 상당히 많은 내부구조상의 변경이 있었기 때문에, 이러한 변경사항의 효과를 충분히 활용할 수 있는 SMO를 사용해야 합니다. SMO는 가장 효율적인 자원활용을 할 수 있도록 최적화되어 있으며, 네트워크상에서 개체에 대한 인스턴스를 생성하기 위해 사용하는 메모리 사용량을 절감해 줍니다. SMO를 사용하면, 개발자가 개체에 대한 인스턴스를 생성하는 시점에 대해서 좀 더 세밀하게 통제할 수 있습니다.

[참고]
SQL Server 2005에도 SQL-DMO가 여전히 지원되지만, SQL-DMO는 하위버전호환성을 보장하기 위한 목적으로만 사용해야 합니다. SQL-DMO는 SQL Server 2005 환경에 최적화되어 있지 않습니다. 새로운 개발 프로젝트에서는 반드시 SMO를 사용해야 합니다.


SMO and WMI
SQL-DMO는 SQL Server 에 대해 프로그래밍 관점에서의 인터페이스를 제공하였습니다.
SMO에서는 프로그래밍 기능에 추가하여, WMI 와의 인터페이스를 단순화하는 기능을 통해 좀 더 관리자적인 접근이 가능하도록 지원합니다. SMO와 WMI을 사용하여 관리자는, SQL Server 2005 서버와 인스턴스에 대한 모니터링 및 구성작업을 효율적으로 관리할 수 있습니다.

SMO Scripting
SMO는 Scripter 클래스를 통해 좀 더 개선된 스크립트 작성 기능을 제공합니다. 예를 들어, Scripter 클래스를 사용하여, 단일 개체을 기반으로 한 전체 종속성 트리에 대한 스크립트 작업을 자동화할 수 있습니다.
SMO 개체모델

SMO 개체 모델에는 데이터베이스와 데이터베이스 서버를 관리하기 위한 전체 프로그래밍 인터페이스를 제공하는 역할을 하는 여러 개의 네임스페이스와 클래스가 포함되어 있습니다. 일부 클래스는 쉽게 찾을 수 있지만, 일부 클래스는 참조하기 위해 좀 더 자세한 탐색이 필요한 경우도 있습니다. SMO에서는 관리작업을 지원하기 위해, 크게 instance 클래스와 utility 클래스를 지원합니다.

 



계층구조로 된 Instance 클래스
Instance 클래스는 데이터베이스 서버, 데이터베이스, 테이블, 뷰, 사용자정의함수 등과 같은, SQL Server 개체를 포함하고 있습니다. 각 클래스는 표준 데이터베이스 개체 계층구조와 직접적으로 매핑되어 있기 때문에 좀 더 쉽게 개발작업을 수행할 수 있습니다. 부모개체는 다수의 자식 개체(예를 들어, 하나의 테이블에 다수의 컬럼 포함 가능)를 포함할 수 있고, 각 자식개체의 집합은 컬렉션 개체로 표현할 수 있습니다. 자식 개체가 하나만 존재한다면, 해당 자식 개체를 별도의 독립된 개체로 표현할 수 있습니다.

모든 컬렉션 클래스는 컬렉션 클래스에 포함된 개별개체에 접근하기 위한 인터페이스를 제공합니다. 예를 들어, Views 컬렉션 클래스에는 데이터베이스에 따라 하나 또는 그 이상의 View 개체를 포함할 수 있습니다. 또한, Views 컬렉션 클래스에 View 개체가 하나도 포함되지 않을 수도 있습니다.

Utility 클래스
Utility 클래스는 개별 서버나 데이터베이스 개체에 매핑되지 않고, 부가기능을 제공하기 위해서 존재합니다.

SMO 개체 참조
SMO를 사용하여 관리작업을 자동화하는 처리절차는 다음과 같습니다.

1. .NET 기반 클라이언트 어플리케이션 생성.
2. SQL SMO 어셈블리 참조.
3. 코드내에서 Imports (Microsoft Visual C# 에서는 using 구문)구문을 사용하여, 필요한 네임스페이스에 대한 참조를 설정

.NET 기반 클라이언트 어플리케이션 생성
SMO는 모든 .NET 기반 어플리케이션(Windows Form 어플리케이션, 콘솔 어플리케이션, ASP.NET 웹 어플리케이션)에서 사용할 수 있습니다. 어플리케이션의 목적에 따라 개발할게 될 클라이언트의 유형이 결정됩니다. 예를 들어, 본사에서 전체 데이터베이스를 통합관리해야 하는 상황이라면, 클라이언트 컴퓨터에 별도의 설치가 필요없는 ASP.NET 기반 인트라넷 어플리케이션을 개발하는 것이 바람직합니다. 또한, 전세계 어느 곳에서도 관리작업을 수행할 수 있도록, ASP.NET 인트라넷 어플리케이션에서 보안이 보장된 연결을 사용할 수 있습니다.

SMO 어셈블리 참조
어플리케이션에서 관리작업을 수행하기 위해서는, 반드시 Microsoft.SqlServer.Smo.dll 어셈블리에 대한 참조를 .NET 프로젝트에 추가해야 합니다. 필요에 따라 추가적인 기능을 위해 다음과 같은, 관련 어셈블리도 추가할 수 있습니다.

어셈블리 설명
Microsoft.SqlServer.ConnectionInfo.dll SQL Server 인스턴스에 대한 연결을 명시적으로 관리하기 위한 클래스 제공
Microsoft.SqlServer.SmoEnum 일부 SMO 개체의 작업을 보조하기 위한 열거형 포함

SMO 어셈블리는 SQL Server 2005의 클라이언트 도구 설치 옵션의 일부로 포함되어 전역 어셈블리 캐시(GAC)에 등록됩니다. SMO 관련 어셈블리는 클라이언트 어플리케이션의 설치패키지에 일부로 포함되어 클라이언트 컴퓨터에 배포할 수 있습니다.

Microsoft Visual Studio.. .NET 프로젝트에서 참조를 추가하기 위해서는 다음 절차를 수행합니다.

1. 프로젝트 메뉴-참조추가 옵션을 선택합니다.
2. 참조 추가 대화상자의 어셈블리 목록에서 각 어셈블리를 선택한 다음 확인을 클릭합니다.

네임스페이스 추가
코드에 대한 가독성을 높이기 위해, 다음 예제와 같이, Visual Basic .NET에서는 Import 구문, Visual C#.NET에서는 using 구문을 사용하여, SMO 네임스페이스를 추가할 수 있습니다. .NET 프로젝트에 네임스페이스를 추가하면, 각 클래스에 대한 전체 이름을 지정하지 않고서도 해당 네임스페이스에 포함된 클래스에 쉽게 접근할 수 있습니다.
‘Visual Basic
   Imports Microsoft.SqlServer.Management.Smo
   Imports Microsoft.SqlServer.Management.Common
//Visual C#
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

서버속성조회
SMO를 사용하여 서버 및 데이터베이스 개체에 대한 정보를 조회할 수 있습니다. 서버 및 데이터베이스 개체에 대한 정보를 조회하기 위해서는, 다음과 같은 절차를 수행합니다.

1. 특정 서버명을 지정하여, Server 개체의 인스턴스를 생성합니다.
2. Databases 컬렉션이나 서버의 다양한 속성에 대해 필요한 작업을 수행합니다.

Server 개체 인스턴스 생성
서버에 대한 작업을 수행하기 위해서는, 먼저, Server 개체를 선언하고 초기화해야 합니다. Server 개체는 Server 개체가 초기화될 때, 생성자 클래스내부에서 자동적으로 Windows 인증을 사용하여 SQL Server 에 연결됩니다. 다음 예제는 DBSERVER라는 SQL Server 인스턴스에 연결하는 방법을 나타냅니다.
‘Visual Basic
Dim svr As New Server“( DBSERVER”) //Visual C#
Server svr = new Server“( DBSERVER”);
SQL Server 인증을 사용하거나, 명시적으로 연결정보를 통제해야할 필요가 있는 경우에는, ConnectionInfo 어셈블리에 대한 참조를 설정한 다음, 다음 예제와 같이, ServerConnection 개체를 사용해야 합니다.
'Visual Basic
Dim conn As New ServerConnection“( DBSERVER”,“ sa”,“ P@ssword”)
Dim svr As New Server(conn)
//Visual C#
ServerConnection conn = new ServerConnection“( DBSERVER”,“ sa”,
“P@ssword”);
Server svr = new Server(conn);

다음 예제와 같이, SqlConnectionInfo 개체를 사용하여 좀 더 상세한 수준까지 연결정보를 설정할 수 있습니다.
‘Visual Basic
Dim conInfo As New SqlConnectionInfo“( DBSERVER”)
With conInfo
.DatabaseName =“ AdventureWorks”
.EncryptConnection = True
.ApplicationName =“ AWClient”
End With
Dim conn As New ServerConnection(conInfo)
Dim svr As New Server(conn)
//Visual C#
SqlConnectionInfo conInfo = new SqlConnectionInfo“( DBSERVER”);
conInfo.DatabaseName =“ AdventureWorks”;
conInfo.EncryptConnection = true; conInfo.ApplicationName =“ AWClient”;
ServerConnection conn = new ServerConnection(conInfo);
Server svr = new Server(conn);
속성에 대한 작업 수행
SQL Server 인스턴스에 연결을 생성한 다음, 다음 예제와 같이, Information, Settings, Configuration 속성을 사용하여 서버속성 정보를 조회할 수 있습니다.
’Visual Basic
Console.WriteLine(svr.Information.VersionString)
Console.WriteLine(svr.Settings.MasterDBPath)
Console.WriteLine(svr.Configuration.NestedTriggers.RunValue.ToString( )) // Visual C#
Console.WriteLine(svr.Information.VersionString);
Console.WriteLine(svr.Settings.MasterDBPath);
Console.WriteLine(svr.Configuration.NestedTriggers.RunValue.ToString( ));’

또한, Databases 속성을 사용하여, 설치된 데이터베이스와 데이터베이스 개체에 대한 정보를 조회할 수 있습니다. 다음 예제는, 특정 SQL Server 인스턴스에 포함된 각 데이터베이스에 대한 간단한 정보(데이터베이스명과 데이터베이스 크기)를 조회하는 방법을 나타냅니다.
‘Visual Basic
For Each db As Database In svr.Databases
      Console.WriteLine(db.Name &“ :“ & db.Size &“ K”)
Next

//Visual C#
foreach (Database db in svr.Databases)
{
Console.WriteLine(db.Name +“ :“ + db.Size +“ K”);
}

SMO 개체 생성
SMO를 사용하여 새 데이터베이스 개체(데이터베이스, 테이블, 저장프로시저, 트리거, 뷰 등)를 생성할 수 있습니다. 데이터베이스 개체를 생성하는 처리절차는 다음과 같습니다.

1. 테이블, 컬럼 등 생성하고자 하는 데이터베이스 개체에 대한 적절한 변수를 생성합니다.
2. 해당 개체에 적절한 속성을 설정합니다.
3. 해당 개체에 대한 부모 개체에 자식 개체를 추가하기 위해서, 부모 개체에서 제공하는 Create 메서드를 호출합니다.

변수 생성 및 초기화
속성을 설정하기 전에 추가하고자 하는 새 데이터베이스 개체에 대한 로컬 변수를 생성해야 합니다. 각 개체의 생성자 클래스에서는 개체를 생성하기 위해 다양한 속성값을 지정할 수 있도록 허용합니다. 생성자 클래스는 별도이 코딩없이 속성값을 설정할 수 있는 가장 효율적인 방법입니다. 하지만, 각 클래스별로 다른 생성자 클래스를 제공하기 때문에, 각 개체에 대한 자세한 정보를 확인하기 위해 해당 클래스에 대한 문서자료를 참조해야 합니다.

다음 예제는 데이터베이스 개체를 저장하기 위한 로컬 변수를 생성하고, AdventureWorks 데이터베이스를 참조하기 위해 Databases 컬렉션 속성에 인수로 데이터베이스명을 지정합니다. 그 다음, 해당 데이터베이스에 Table 개체와 두 개의 Column 개체를 추가하는 방법을 나타냅니다.
‘Visual Basic
Dim AWDBase As Database = Svr.Databases“( AdventureWorks”)
Dim DiscountsTable As New Table(AWDBase,“ Discounts”)
Dim DiscountID As New Column(DiscountsTable, _
“DiscountID”, DataType.Int)
Dim DiscountName As New Column(DiscountsTable, _
“DiscountName”, DataType.NVarChar(40)) //Visual C#
Database AWDBase = svr.Databases“[ AdventureWorks”];
Table DiscountsTable = new Table(AWDBase,“ Discounts”);
Column DiscountID = new Column(DiscountsTable,
“DiscountID”, DataType.Int);
Column DiscountName = new Column(DiscountsTable,
“DiscountName”, DataType.NVarChar(40));
속성 설정
개체에 대한 변수를 생성한 다음, 데이터베이스에 변경사항을 적용하기 전에 적절한 부가 속성을 지정할 수 있습니다. 다음 예제는 DiscountID 컬럼에 identity 속성을 설정하는 방법을 나타냅니다.
‘Visual Basic
DiscountID.Identity = True //Visual C#
DiscountID.Identity = true;
데이터베이스 서버에 변경사항 적용
데이터베이스 개체를 저장할 변수를 생성하고, 적절한 속성을 설정한 다음, 새로 추가된 개체를 실제로 데이터베이스 서버에 추가하는 작업을 수행해야 합니다. 일반적으로, 다음의 예제와 같이, 부모 개체에 자식 개체를 추가하기 위해서 컬렉션 개체의 Add 메서드를 호출 한 다음, 변경사항을 실제 데이터베이스 서버에 반영하기 위해 부모 개체에서 제공하는 Create 메서드를 호출합니다.
‘Visual Basic
DiscountsTable.Columns.Add(DiscountID)
DiscountsTable.Columns.Add(DiscountName)
DiscountsTable.Create( ) //Visual C#
DiscountsTable.Columns.Add(DiscountID);
DiscountsTable.Columns.Add(DiscountName);
DiscountsTable.Create( );
현재 연결이 기본 실행 모드로 운영중인 상태라면, SMO에서는 해당 변경사항을 즉시 데이터베이스 서버에 반영합니다. 현재 연결의 SqlExecutionModes 속성이 CaptureSql 모드로 운영중인 상태라면, 향후 일정 시점이 경과된 이후에 실행될 수 있도록, 기존 T-SQL 문장이 해당 연결의 CapturedSql 속성에 저장됩니다.
SMO를 사용하여 기존 개체 변경
SMO를 사용하여 기존에 생성되어 있는 데이터베이스 개체(뷰, 테이블, 사용자정의함수, 트리거 등)를 변경할 수 있습니다.

1. 수정대상이 되는 저장 프로시저나 테이블과 같은 적절한 개체를 지정합니다.
2. 해당 개체에 필요한 속성을 수정하거나, 해당 개체의 적절한 메서드를 호출합니다.
3. 변경사항을 데이터베이스 서버에 반영하기 위해 Alter 메서드를 호출합니다.

수정할 대상 개체 지정
개체를 변경하기 전에, 적절한 개체 컬렉션에서 수정할 대상이 되는 개체의 위치를 지정해야 합니다. 다음 예제는 데이터베이스에 있는 테이블과 컬럼의 위치를 지정하는 방법을 나타냅니다.
‘Visual Basic
Dim AWDBase As Database = Svr.Databases“( AdventureWorks”)
Dim DiscountsTable As Table = AWDBase.Tables“( Discounts”)
Dim DiscountName As Column = DiscountsTable.Columns“( DiscountName”) //Visual C#
Database AWDBase = svr.Databases“[ AdventureWorks”];
Table DiscountsTable = AWDBase.Tables“[ Discounts“ ];
Column DiscountName = DiscountsTable.Columns“[ DiscountName”];

속성 변경
수정할 대상이 되는 개체의 위치를 지정한 다음, 해당 개체에 대한 변경사항을 데이터베이스 서버로 반영하기 전에 필요한 속성을 수정합니다. 다음 예제는 컬럼의 Null 허용여부를 변경하는 방법을 나타냅니다.
‘Visual Basic
DiscountName.Nullable = False
//Visual C#
DiscountName.Nullable = false;
또한, 개체의 속성값을 변경하는 대신 해당 개체에서 제공하는 메서드를 호출해야 하는 경우도 존재합니다. 예를 들어, Table 클래스, Column 클래스를 포함한 많은 클래스는 데이터베이스에 해당 개체를 삭제하기 위한 Drop 메서드를 제공합니다. 속성값을 변경하는 경우, 명시적으로 명령을 실행할 때까지 데이터베이스 서버에 변경사항이 적용되지 않는 것에 비해, 메서드를 호출하는 유형의 변경사항은 즉시 데이터베이스 서버에 변경사항이 반영됩니다. 다음 예제는 테이블에서 특정 컬럼을 즉시 삭제하는 방법을 나타냅니다.
‘Visual Basic
DiscountName.Drop( ) //Visual C#
DiscountName.Drop( );

서버에 속성값 변경사항을 적용
데이터베이스 개체에 대한 속성을 변경한 다음, 해당 변경사항을 명시적으로 데이터베이스 서버에 반영해야 합니다. 다음의 예제와 같이, 대부분의 SMO 개체는 변경된 속성값을 데이터베이스 서버에 반영하기 위해, Alter 메서드를 제공합니다.
‘Visual Basic
DiscountName.Alter( ) //Visual C#
DiscountName.Alter( );

SMO를 사용한 어플리케이션 개발 및 서버정보조회
Visual Studio 2005를 사용하여 SMO 기반 어플리케이션을 개발할 수 있습니다. VisualStudio 2005에서는 비즈니스 요구사항에 따라, Windows Form 어플리케이션, ASP.NET 웹어플리케이션, 콘솔 어플리케이션을 모두 개발할 수 있습니다. 예를 들어, 본사에서 각 지사에서 위치한 데이터베이스를 관리해야 하는 경우, 클라이언트에 별도의 설치가 필요없는 인트라넷 기반 ASP.NET 어플리케이션을 개발할 수 있습니다.

.NET 기반 SMO 어플리케이션 개발
다음은 .NET 기반 SMO 어플리케이션을 개발하기 위한 단계를 나타냅니다.

1. Visual Studio 2005 실행.

2. 필요한 비즈니스 요구조건에 따라 적절한 어플리케이션 유형의 프로젝트를 새로 생성합니다. 예를 들어, Visual Basic.NET Windows Form 프로젝트를 생성합니다.

3. SQL SMO 어셈블리에 대한 참조를 설정합니다. SQL Server 에 대한 작업을 수행하기 위해서는 반드시 Microsoft.SqlServer.SMO 어셈블리를 참조해야 합니다. 어플리케이션의 기능상의 요구조건에 따라, Microsoft.SqlServer 네임스페이스에 포함된 다른 어셈블리(예를 들어, Microsoft.SqlServer.ConnectionInfo)도 추가해서 사용할 수 있습니다.

4. Visual Basic.NET의 경우 Import 명령을 사용하고, Visual C#.NET의 경우 using 명령을 사용하여, SMO 네임스페이스를 추가합니다.

5. Server 개체를 생성하고, ConnectionContext 개체를 획득한 다음, 서버명을 지정하고, 해당 서버에 연결하는 과정을 통해, 현재 운영 중인 SQL Server 에 연결을 생성합니다. SMO 어플리케이션을 개발하는 경우, 기본값으로, Windows 인증을 사용하여 서버에 연결합니다.

6. 어플리케이션 코드를 작성합니다.

서버 정보 조회
SQL Server 가 운영중인 서버에 연결을 생성한 다음, Server 개체를 사용하여 서버 정보를조회할 수 있습니다. Server 개체에는 서버 속성중 변경할 수 없는 속성을 포함하고 있는 information 속성이 포함되어 있습니다.

다음 표에는 어플리케이션에서 Information 개체에 포함되어 있는 변경할 수 없는 속성의 목록이 나타나 있습니다.
속성 설명
Edition 현재 운영중인 SQL Server 의 에디션 정보를 저장
IsClustered 현재 서버에 클러스터 환경이 구축되어 있는지 여부를 Boolean
값으로 저장
IsSingleUser 현재 서버가 읽기전용상태로 운영중인지 여부를 Boolean 값으로 저장
Language SQL Server 가 운영중인 컴퓨터의 기본 언어 정보를 저장
NetName 현재 서버의 NETBIOS 명을 저장
OSVersion 현재 서버의 운영체제 버전 정보를 저장
Parent 현재 Information 개체의 부모 개체에 해당하는 Server 개체를 저장
PhysicalMemory 현재 서버의 총 RAM 정보를 저장
Platform 현재 서버의 하드웨어 플랫폼 정보를 저장
Processors 현재 서버에 설치된 CPU 수를 저장
Product 현재 SQL Server 가 운영 중인 컴퓨터의 제품 타이틀 정보를 저장
ProductLevel 현재 SQL Server 가 운영 중인 컴퓨터의 제품 레벨 정보를 저장
VersionString 현재 SQL Server 가 운영 중인 컴퓨터의 버전 정보를 저장

SMO를 사용하여 데이터베이스 백업
SMO를 사용하여 데이터베이스 백업과 같은, 주기적으로 반복되는 관리작업을 수행할 수 있습니다. Backup 개체의 속성을 커스터마이즈하여, 필요한 비즈니스 요구사항을 충족할 수 있는 백업 작업을 수행할 수 있습니다.

데이터베이스 백업
다음은 SMO를 사용하여, 데이터베이스를 백업하기 위한 처리절차입니다.

1. SQL Server 가 운영중인 서버에 연결을 생성합니다.
2. Backup 개체를 선언하고 초기화합니다.
3. Backup 개체에 다음과 같은 속성을 설정합니다.
    Action
    BackupSetName
    Database
    DeviceType
    기타 필요한 속성(예를 들어, Incremental, NoRewind)
4. Backup 개체의 Devices.Add 메서드를 호출하고, 백업 디바이스에 대한 경로 정보를 전달합니다. Backup 개체의 SqlBackup 메서드를 호출하고, Server 개체를 전달합니다.

백업관련속성
비즈니스 요구조건을 충족시키는 백업 작업을 수행하기 위해, Backup 개체의 속성을 커스터마이즈할 수 있습니다. 다음 표는 Backup 개체의 핵심 속성의 목록이 나타나 있습니다.
속성 설명
Action 수행할 백업의 유형
BackupSetDescription 백업 세트에 대한 텍스트 설명
BackupSetName 백업 세트를 식별하기 위한 명칭
BlockSize 백업 테이프를 포맷하기 위한 블록 크기
Checksum 백업 및 복원 작업동안 유효성검사를 위한 체크섬(checksum)값을 계산할 것인지 지정하기 위한 Booleam 값
Database 백업 또는 복원 작업을 수행할 대상 데이터베이스
DatabaseFileGroups 백업 작업의 대상이 되는 SQL Server 파일 그룹
DatabaseFiles 백업 작업의 대상이 되는 운영체제 파일
Devices 백업 작업을 수행할 백업 디바이스
DeviceType 백업 작업을 수행할 백업 디바이스의 디바이스 유형
ExpirationDate 백업데이터가 더 이상 유효성을 보장할 수 없다고 판단하는, 백업 세트의 최종유효기간을 위한 일자와 시간 정보
FormatMedia 백업 작업의 첫번째 단계로 백업 테이프를 포맷할 것인지 여부를 지정하기 위한 Boolean 값
Incremental 차등 백업을 수행할 것인지 여부를 지정하기 위한 Boolean 값
Initialize 백업 작업의 일부로, 백업작업 수행할 디바이스를 초기화할 것인지 여부를 지정하기 위한 Boolean 값
LogTruncation 백업 작업의 일부로 데이터베이스 로그 파일을 삭제하기 위해서 사용할 메서드 명칭
MediaDescription 백업 세트를 포함하고 있는 백업 미디어에 대한 텍스트 설명
MediaName 특정 미디어 세트를 식별하기 위한 미디어 명칭
NoRewind 백업 작업 후에 백업 데이프를 오픈된 상태로 유지할 것인지 여부를 지정하기 위한 Boolean 값
Restart 백업이 중단된 경우, 해당 백업 작업을 다시 시작할 것인지를 지정하기 위한 Boolean 값
RetainDays 백업 세트를 덮어쓰기(overwrite)전에 경과해야 하는 기간 일수
SkipTapeHeader 백업 미디어가 정상적으로 로드되었는지 체크하기 위한 운영 로직을 적용할 것인지 여부를 결정
UnloadTapeAfter 백업 작업이 완료된 다음, 백업 테이프 미디어를 다시 감아서 언로드할 것인지 여부를 지정하기 위한 Boolean 값

SMO를 사용하여 데이터베이스 목록 생성 및 새 데이터베이스 생성
다음 예제는 SMO 네임스페이스에 대한 참조를 추가하고, 데이터베이스에 연결을 생성하고, 서버로부터 데이터베이스 목록을 조회한 다음, 새 데이터베이스를 추가하는 처리절차를 나타냅니다.

SMO 네임스페이스 참조
SMO를 사용하여 데이터베이스 관리 솔루션을 개발하는 경우에는, SMO 어셈블리에 대한 참조를 반드시 추가해야 합니다. 또한, 다음의 예제와 같이, SMO 클래스를 사용하기 위해서는 코드 파일에 SMO 네임스페이스를 추가해야 합니다. SMO 네임스페이스를 추가하면, 코드에 대한 가독성을 개선할 수 있습니다.
using System.SqlServer.Management.Common;
using System.SqlServer.Management.Smo;

서버에 연결
다음 예제는 ConnectionContext 관리 개체를 사용하여 서버에 연결을 생성합니다. 서버명은 텍스트 박스 컨트롤에서 지정됩니다.
Server myServer = new Server( );
ServerConnection conn = myServer.Connection.Context;
conn.ServerInstance = txtServerName.Text;
conn.Connect( );

데이터베이스목록생성
다음 예제는 Server 개체의 Databases 컬렉션을 사용하여 특정 서버의 모든 데이터베이스의 목록을 리스트박스 컨트롤에 표시하는 방법을 나타냅니다.
1stDatabases.Items.Clear( );
for (int i = 0; i < myServer.Databases.Count; i++)
{
1stDatabases.Items.Add(myServer.Databases[i].Name);
}

데이터베이스생성
다음 예제는 Database 개체의 Create 메서드를 사용하여 NewDatabase 라는 새 데이터베이스를 생성하는 방법을 나타냅니다.
Database newDb = new Database(myServer,“ NewDatabase”);
newDb.Create( );



[출처] DBGuide.net