2011年1月18日火曜日

◆SQL Server PowerShellの環境を作る

SQL Server PowerShellとはPowershellからSQL Serverを管理するためのツールセット(実体は、いくつかのコマンドレットとプロバイダー、環境変数、型定義等)である。

SQL Server2008をインストールすると一緒にインストールされる。(R2の場合はインストール時の機能選択で管理ツールを選ぶとインストールされるようだ)
Expressでもwith Advanced Services 版をインストールすれば使える。

一番簡単な使い方はコマンドラインから「sqlps」と打ち込む。20110118140923

するとSQL Server用の機能が組み込まれたPowershellが起動する。
SQLプロバイダーがルートになっているのでdirコマンドを打つと以下のような内容が表示される。

20110118141648

ルートのsqlを潜っていくとDatabasesが現れる。
image

この中身をまた潜っていくとTableやColumnが現れる。

というように、SQLプロバイダーのおかげでSQL Serverも通常のファイルツリーの様にアクセスが可能になっている。

あとはこれらのオブジェクトを使って様々な情報を引き出せば良い。

以下を参考にサンプルを作ってみた。
SQL Server PowerShell を使用した管理手法 第 2 回 実践編

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023

$server = get-item SQLSERVER:\sql\localhost\sqlexpress\databases

$dbinfos = @()
$fmt = "#,##0.0"
 
#データベースの数だけ繰り返し
foreach ( $db in $server.
Collection )
{
 
$dbinfo = New-Object PsObject |
 
     
select データベース名,DB,空き, データ,インデクス
  #データベース名
  $dbinfo.データベース名 = $db.
Name
 
#DBの容量
  $dbinfo.DB = $db.Size.ToString($fmt) + "MB"
  #DBの空き容量
  $dbinfo.空き = ($db.SpaceAvailable / 1024).ToString($fmt) + "MB"
  #データの容量
  $dbinfo.データ = ($db.DataSpaceUsage / 1024).ToString($fmt) + "MB"
  #インデックスの容量
  $dbinfo.インデクス = ($db.IndexSpaceUsage / 1024).ToString($fmt) + "MB"
  $dbinfos += $dbinfo
}
$dbinfos | ft
-Auto

結果
20110118152238

ちなみに、スクリプトファイルを実行するときは、
sqlps -noexit -command "d:\desktop\db.ps1"
の様に起動してあげれば良い。

0 件のコメント:

コメントを投稿