본문 바로가기

Server Story..../Windows Server

MS sql power shell 사용방버.. 퍼옴

http://www.sqler.com/318208

에서 퍼왔어요...

========================================================================================================

오늘은 DBA를 위한 파워쉘 사용에 대해 간단히 말씀드릴려고 합니다.

많은 분들이 파워쉘이란 것에 대한 존재는 아시지만 뭐 때문에 사용해야 하는지 의아해하시는 부분이 많습니다.

 

우선 생각나는 장점을 간단히 말씀드리면

첫째로 반복적인 업무나 대량작업를 파워쉘로 최소화 할 수 있습니다.
많은 SE나 개발자 분들께서 괴로워하시는 반복작업을 간단한 스크립트로 최소화할 수 있습니다.
실제가 같은 스크립트를 python과 powershell로 개발했을때 대부분의 경우 파워쉘로 제작시 소스코드 자체의 양부터 확 줄어들게 됩니다.

 

둘재로 한 스크립트로 여러서버에 동시 쿼리나 명령실행이 가능하고 그 결과를 다양한 형태로 받아볼 수 있습니다.
파워쉘은 기본적으로 결과값을 HTML, CVS, XML로 변경해주는 cmdlet이 존재하기 때문에 명령어 하나로 결과 값가공이 매우 편리하게 이뤄집니다.

 

셋째로 쉬운 원격관리입니다.
 파워쉘의 현버전은 2.0부터는 WinRM이 자동지원되므로 원격서버에 세션연결이나 명령실행이 매우 간단하게 실행가능합니다.

그외에도 다양한 장점이 있는데 그부분은 앞으로 계속 연재를 해나가면서 말씀드리겠습니다.

 

첫부분이고 해서 간단히 실행하는 부분에 대해 적어보았습니다.

 

Sql 서버설치 시 자동 설치되는 SQL파워쉘을 실행시키는 방법은 크게 4가지가 있습니다.
첫째는 시작-> 실행 -> sqlps  를 실행시키는 방법
두 번째는 아래 그림처럼 SSMS에서 마우스 오른쪽 클릭메뉴를 이용하는방법
세 번째는 일반 파워쉘 커맨드 창에서 Sql 스냅인을 로딩하는 방법
네 번째는 SQL설치경로에 XML를 로딩하는 방법인데 번거로운점이 있어 생략합니다.
(C:\Program Files\Microsoft SQL Server\100\Tools\Binn)
Sql 서버설치 시 자동 설치되는 SQL파워쉘을 실행시키는 방법은 크게 4가지가 있습니다.
첫째는 시작-> 실행 -> sqlps  를 실행시키는 방법
두 번째는 아래 그림처럼 SSMS에서 마우스 오른쪽 클릭메뉴를 이용하는방법
세 번째는 일반 파워쉘 커맨드 창에서 Sql 스냅인을 로딩하는 방법
네 번째는 SQL설치경로에 XML를 로딩하는 방법인데 번거로운점이 있어 생략합니다.
(C:\Program Files\Microsoft SQL Server\100\Tools\Binn)

1360610D4CB419475DA85A



저는 주로 세번째 SQL스냅인을 로딩하는 법을 씁니다. SQL에 한정되지 않은 가장 파워쉘다운 보편적인 방식이라고 보시면 되는데요
아래명령어로 등록가능한 스냅인 목록을 확인합니다.

Get-PSSnapin -registered

 1143E50D4CB41980CA6A76

 

 

여러 스냅인이 있을 수 있지만 SQL에 관련된 스냅인은 아래 두가지이므로 해당 스냅인을 로딩합니다.

Add-PSSnapin SqlServerProviderSnapin100
Add-PSSnapin SqlServerCmdletSnapin100



로딩후 사용할 수 있는 각 커맨드를 아래의 명령어로 확인해 보면

Get-Command -commandtype cmdlet | where-object {$_.PSSnapin -match
"SqlServerCmdletSnapin100"}
Get-Command -commandtype cmdlet | where-object {$_.PSSnapin -match
"SqlServerProviderSnapin100"}

  1248FA0D4CB419B5B6E2DA

 


이 명령어들은 다음포스팅에서 좀더 자세히 알아보겠습니다.


SQL 내장 파워쉘을 이용하면 SQL의 구조를 파일시스템처럼 확인이 가능합니다.

Get-PSDrive  

 1947D40E4CB41DF8BDA058

 

 

 

Set-Location SQLSERVER:
Get-ChildItem | Select-Object Name
192FA50C4CB41EFC16F42A


Set-Location SQL  #기본 인스턴스 명등 각 속성값들을 확인하실 수 있습니다..
Get-ChildItem

  136D4A0B4CB41F372CF28C

 

 
내 인스턴스에 해당되는 다양한 정보를 볼 수 있습니다.

Set-Location 인스턴스명
Get-ChildItem


 

Set-Location SQLServer:\SQLRegistration #등록된 서버목록 확인
Get-ChildItem | select RegisteredServers

 202CC90C4CB41FA60F3F00



 
Set-Location SQLSERVER:\sql\spaceships\default #기본인스턴스안에 목록들
Get-ChildItem


 

계속해서 Set-Location 과 GetChildItem을 통해 각 데이터베이스, 테이블, 컬럼 등 계층적으로 이뤄진 경로를 탐색할 수 있습니다.
아래명령으로 는 각 DB목록을 보실 수 있습니다

$server = Get-Item SQLSERVER:\sql\기본 인스턴스\Default
$server.Databases | Select-Object Name,RecoveryModel | Format-Table -auto

Get-ChildItem SQLSERVER:\SQL\기본인스턴스\Default\Databases -force | Select-Object Name #시스템DB를 보기위해선 -force를


 

각 DB에 실제 쿼리를 날리고 결과를 보기위해선 Invoke-Sqlcmd를 활용하시면 됩니다.

Set-Location SQLSERVER:\SQL\SPACESHIPS\Default\Databases\AdventureWorks2008R2
Invoke-Sqlcmd -Query "select top 10 * from Person.Address" | format-table -Auto
Invoke-Sqlcmd -Query "SELECT @@servername" -ServerInstance "SPACESHIPS"


 

아래는 참고로 원격접속쿼리방법입니다.

Invoke-Sqlcmd -Query "SELECT @@servername+’: ‘+@@version" -ServerInstance "SPACESHIPS\DEFAULT" -User "sa" -Password "비밀번호"



다음엔 파워쉘을 이용해서 SQL 구성관리자를 컨트롤하는 부분에 대해 말씀드리겠습니다.