SQL Azure : Récupérer la liste des bases de données et leurs tailles respectives d’un serveur SQL Azure

SQL Azure ne propose pas de mécanisme qui permet de changer le contexte de bases de données comme avec les autres bases de données. En effet, l’utilisation de la clause USE n’est pas permise avec SQL Azure du fait de son architecture. En réalité, les bases de données ne sont pas hébergées sur un même serveur et peuvent être répartis sur plusieurs noeuds dans un datacenter. Par conséquent il est impossible de naviguer au travers des bases de données et de récupérer en une seule requête SQL leurs propriétés. Comment faire alors pour récupérer l’ensemble des informations de taille des bases données d’une instance SQL Server Azure ? Un script PowerShell dans ce cas peut très bien faire l’affaire.

Ce script prend en paramètre les informations de connexion au serveur SQL Azure à savoir :

  • Le nom du serveur
  • Le login de connexion
  • Le mot de passe de connexion

L’exécution du script se fait de la manière suivante :

.\serveur_size.ps1 [serveur] [login] [password]

Le contenu du script est le suivant :

######################################
# @author = David BARBARIN           #
# @Description =                     # 
# Récupération de la taille des      #
# bases de données sur SQL Azure     #
######################################

# Parameters
# $server = SQL Azure server
# $user   = login SQL Azure
# $pwd    = Password SQL Azure
param([string]$server, [string]$user, [string]$pwd)

# Load SQL Server SMO Assembly
[System.Reflection.Assembly]::LoadWithPartialName(‘Microsoft.SqlServer.SMO’) | out-null

Write-Host «  »
Write-Host «  »
Write-Host « SQL Azure Server : $server  »
Write-Host « ———————————————————— »
Write-Host «  »
$cn = « Server=tcp:$server;Database=master;User ID=$user;Password=$pwd;Trusted_Connection=False; »

$conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = $cn

$srv = New-Object (« Microsoft.SqlServer.Management.Smo.Server ») $conn
$db = $srv.Databases | sort

Foreach ($database in $db)
{
$ds = $database.ExecuteWithResults(« IF DB_NAME() <> ‘master’ SELECT CAST(SUM(reserved_page_count)* 8.0 / 1024 AS DECIMAL(10,2))  AS size FROM sys.dm_db_partition_stats »)
$ds.Tables | foreach { $_.Rows | foreach { $size = $_[0]} }   
Write-Host « | » $database.name  »  ————>  »    $size  » (MB)     »
}

Write-Host «  »
Write-Host «  »

Voici le résultat sur mon serveur SQL Azure :

image

 

Bien entendu il reste la méthode graphique via le portail d’administration.

image

David BARBARIN (Mikedavem)
MVP SQL Server

Laisser un commentaire