2010. 9. 15. 19:17

이번엔 WMI(Windows Management Instrument) 를 이용해 SQL서버를 관리하는 방법에 대해 말씀드릴려고 합니다.

SQL를 관리를 위한 WMI Object 를 아래처럼 가져올 수 있습니다.

이 오브젝트는 클래스들의 인스턴스 집합이기 때문에 SQL를 위한 네임스페이스를 사용합니다

Get-WmiObject -namespace root\Microsoft\SqlServer\ComputerManagement10 –list | Where-Object {-not ($_.Name -like ‘__*’)}

[2005] 의 경우 -namespace root\Microsoft\SqlServer\ComputerManagement



많은 클래스들이 있지만 우선 SQL Service 클래스를 살펴보면

Get-WmiObject -namespace root\Microsoft\SqlServer\ComputerManagement10 -class SqlService | Select-Object ServiceName, DisplayName, SQLServiceType, State, ProcessId | Format-Table -wrap


설치된 SQL 기본 인스턴스들을 확인할 수 있습니다.

여기서 Service States 가 나타내는 숫자는 아래와 같은 의미를 가집니다.

1 Stopped. The service is stopped.

2 Start Pending. The service is waiting to start.

3 Stop Pending. The service is waiting to stop.

4 Running. The service is running.

5 Continue Pending. The service is waiting to continue.

6 Pause Pending. The service is waiting to pause.

7 Paused. The service is paused.



 

그럼 여기서 사용할 수 있는 메소드들을 확인해 볼까요

Get-WmiObject -namespace root\Microsoft\SqlServer\ComputerManagement10 –class SqlService | Get-Member -MemberType method



여기선 주로 서비스 계정을 설정 하거나 서비스를 시작 중지 시키는 메소드들 뿐이네요.


위의 메소드를 활용해서 MSSQL Server Instance 계정을 local system에서 도메인 계정으로 변경해 볼까요


$strUser = "DOMAIN\account"

$strPass= "비밀번호"

$wSqlservice = Get-WmiObject –namespace root\Microsoft\SqlServer\ComputerManagement10 -class SqlService –filter "ServiceName='MSSQLSERVER'"

$wSqlservice.SetServiceAccount($strUser, $strPass)

$wSqlservice.StopService()

$wSqlservice.StartService()



그럼 이번엔 SQL Agent Service를 자동으로 실행되게 변경해 볼까요

$sqlservice = Get-WmiObject –namespace root\Microsoft\SqlServer\ComputerManagement10 -class SqlService –filter "ServiceName='SQLSERVERAGENT'"

$sqlservice.SetStartMode(2)

#2 Service is started automatically

#3 Service is started manually

#4 Service is disabled




변경이 잘 되었네요 ^^

 


참고로 –computerName 이란 프로퍼티를 이용하면 원격지의 WMI Object를 가져올 수 있습니다.

Get-WmiObject .computerName 컴퓨터이름 -namespace

root\Microsoft\SqlServer\ComputerManagement10 -class SqlService -filter

"ServiceName=’MSSQL`$Instance’"




다음편엔 ServerNetworkProtocolProperty 클래스를 확인해 볼 예정입니다.

참고: SQL Server Administration with Windows PowerShell

원본: http://vstarmanv.tistory.com/entry/MSSQLWMI-for-SQL-Management1

'Powershell > @우주인' 카테고리의 다른 글

PowerShell Default Snap-Ins  (0) 2010.09.15
.NET Assembly load  (0) 2010.09.15
파워쉘을 이용한 DOM 사용  (0) 2010.09.09
파워쉘 부팅매크로(Invoke-Item)  (0) 2010.09.09
파워쉘 버전  (0) 2010.09.09
Posted by 알 수 없는 사용자
:
2010. 7. 26. 19:51

안녕하세요. 엉스데브 입니다.

PowerShell 로 필요한 스크립트를 만들던 중, MSSQL 서버에 저장 되어 있는 데이터를 참조해야 하는 경우가 생겼습니다.

PowerShell .NET Framework  기반의 언어이기 때문에 .NET Framework 가 제공하는 여러 클래스를 사용 할 수 있으며, 이 클래스 들 중에는 MSSQL 접속 및 데이터 조회 / 수정을 위한 클래스 들도 있습니다. 이 클래스 들을 이용해서 직접 사용 할 MSSQL 관련 함수들을 만들어 보았습니다. 

Function Query-Mssql
{
  Param(
    [parameter(Mandatory=$true)][String]$Query,
    [parameter(Mandatory=$true)][String]$Server,
    [parameter(Mandatory=$true)][String]$Id,
    [parameter(Mandatory=$true)][String]$Password,
    [parameter(Mandatory=$true)][String]$DBName,
    [Int32]$Timeout = "30"
  )

  $Conn = New-Object System.Data.SqlClient.SqlConnection
  $Conn.ConnectionString = "Server=" + $Server + ";Database=" + $DBName + ";User ID=" + $Id + ";Password=" + $Password
  $Conn.Open()

  $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
  $SqlCmd.CommandText = $Query
  $SqlCmd.Connection = $Conn
  $SqlCmd.CommandTimeout = $Timeout

  Return $SqlCmd.ExecuteNonQuery()
}



Function Get-MssqlData
{
  Param(
    [parameter(Mandatory=$true)][String]$Query,
    [parameter(Mandatory=$true)][String]$Server,
    [parameter(Mandatory=$true)][String]$Id,
    [parameter(Mandatory=$true)][String]$Password,
    [parameter(Mandatory=$true)][String]$DBName,
    [Int32]$Timeout = "30"
  )

  $Conn = New-Object System.Data.SqlClient.SqlConnection
  $Conn.ConnectionString = "Server=" + $Server + ";Database=" + $DBName + ";User ID=" + $Id + ";Password=" + $Password
  $Conn.Open()

  $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
  $SqlCmd.CommandText = $Query
  $SqlCmd.Connection = $Conn
  $SqlCmd.CommandTimeout = $Timeout
 
  $SqlDataAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
  $SqlDataAdapter.SelectCommand = $SqlCmd

  $DataSet = New-Object System.Data.DataSet
  $SqlDataAdapter.Fill( $DataSet )

  Return $DataSet.Tables
}


Query-Mssql 함수는 Insert, Update, Delete 등 결과 레코드가 반환되는 것이 아닌 단순 실행 쿼리를 날릴 때 사용하며, Get-MssqlData 함수는 Select 등 리턴되는 데이터가 있는 쿼리를 날릴 때 사용합니다.

#아래 더보기를 클릭하시면 다소 복잡한 스크립트 설명을 볼 수 있습니다.#

 

이제 PowerShell 에서 MSSQL 데이터도 엑세스 및 수정 할 수 있으니, 좀 더 정교한 스크립트를 만들어 봐야 겠습니다. ^^


<참고 URL>
http://nsjokt.springnote.com/pages/5657751
Posted by 알 수 없는 사용자
:

BLOG main image
Windows Server를 공부 하는 사람들의 팀블로그 by 마성민

카테고리

분류 전체보기 (76)
Windows (2)
Powershell (56)
AD (0)
Exchange (6)
System Center (9)
IIS (0)
SQL (3)
Sharepoint (0)

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

Total :
Today : Yesterday :