SQL Server 2005/2008: conteggio database [powershell]
Posted by belthazor78 su 29 settembre 2011
Piccolo script che ci permette di fare un conteggio di tutte le nostre istanze e di tutti i nostri db che gestiamo.
Lo script è il seguente:
trap
{
write-error $(“DLL In Errore: ” + $_.Exception.GetType().FullName);
write-error $(“Messaggio: ” + $_.Exception.Message);
write-error $(“ID Errore: ” + $_.Exception.Number);
exit
}
#Pulizia Output
cls
#per conteggio database
[int]$TotSQLDB = 0
#per conteggio istanze
[int]$TotSQLIst = 0
#loop su tutte le istanze
ForEach ($instance in Get-Content “c:\ElencoIstanze.txt”)
{
#Stringa di connessione
$connectionString = “Server=$instance;Database=master;Trusted_Connection=True;”
$SqlConn = New-Object -Typename System.Data.SqlClient.SqlConnection
$SqlConn.ConnectionString = $connectionString
#Si apre la connessione
$SqlConn.open();
#Comando SQL da eseguire
$cmd = “SELECT COUNT(*) AS cnt FROM sys.databases WITH(NOLOCK) where database_id > 4”;
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand $cmd, $SqlConn
#Esecuzione query
$result = $SqlCmd.ExecuteReader()
$result.Read() > $null
#Risultato della query
$dbCount = $result[0]
#Chiusura connessione
$SqlConn.close()
Write-Host ‘========’ $instance ‘=======’
Write-Host ‘Database totali’ $dbCount
$TotSQLDB = $TotSQLDB + $dbCount
$TotSQLIst = $TotSQLIst + 1
}
Write-Host ”
Write-Host ‘ISTANZE SQL TOTALI:’ $TotSQLIst
Write-Host ‘DATABASE TOTALI:’ $TotSQLDB
#Ripuliamo tutto
[GC]::Collect()
L’output prodotto sarà simile a questo:
Per ogni istanza SQL trovata nel file ci sarà un report su quanti DB sono presenti in quella istanza; alla fine delle script verrà, inoltre, riportato un riassunto di tutte le istanze e relativi db 😀
Alcune cose da notare sullo script:
- Non tiene in considerazione i DB di sistema (where database_id > 4)
- Lo script per prendere le istanze su cui controllare il numero dei db usa il file c:\ElencoIstanze.txt…o create questo file o ne create un altro a vostro piacimento ricordandovi di cambiare anche il percorso al nuovo file nello script.
- Lo script, nella query da eseguire, aggiunge l’hint WITH(NOLOCK) per evitare di “bloccare” inutilmente le tabelle di sistema.
- Viene usato alla fine dello script il comando [GC]::Collect() per ripulire la cache del programma
Lascia un commento