W świecie SQL do raportu dotyczącego wielkości baz danych, zupełnie naturalne jest wykorzystanie poleceń języka TSQL.
W świecie SSAS odpowiednikiem tego języka jest XMLA. Czy to nie dziwne, że polecenia/zapytania buduje się w XML. No cóż – tak to ktoś wymyślił i nie zmienimy tego. Na pewno nie da się do SSAS wysłać zapytania SQL.
Co w takim razie zrobić kiedy trzeba zaraportować wielkość baz danych w SSAS? Z pomocą przyjdzie moduł, za pomocą którego można w bardzo prosty sposób (jeśli choć trochę się zna powershella) wysłać zapytanie do SSAS i skonsumować wynik w postaci obiektów o intuicyjnych właściwościach. Oto funkcja, która pobiera informacje o bazach danych SSAS i raportuje ich rozmiar i status:
function Get-SSASDBSize { param($ServerName="localhost") $loadInfo = [Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices") $server = New-Object Microsoft.AnalysisServices.Server $server.connect($ServerName) if ($server.name -eq $null) { Write-Output ("Server '{0}' not found" -f $ServerName) return } foreach ($d in $server.Databases ) { Write-Output ( "{0}; {1}; {2}; {3}MB" -f $ServerName, $d.Name, $d.State, ($d.EstimatedSize/1024/1024).ToString("#,##0") ) } }
Prawda, że krótkie? Po kolei:
- funkcja przyjmuje tylko jeden parametr – nazwę serwera SSAS
- na początku ładuje namespace – czyli bibliotekę pozwalającą wykonywać operacje na SSAS
- następnie tworzy obiekt $server, który łączy się do konkretnej instancji SSAS
- gdyby coś poszło nie tak, to funkcja kończy się
- a jeśli wszystko się udało, to wykonujemy iterację po bazach danych
- dla każdej z nich wyświetlamy nazwę serwera, nazwę bazy, status bazy i jej rozmiar
A jak wywołać tą funkcję? Też prosto:
$list = 'server1','server2','server3' foreach ($s in $list) { Get-SSASDBSize $s }
i raporcik gotowy!