Introduction
Azure SQL Database est le service PaaS managé de Microsoft pour SQL Server dans le cloud, offrant une scalabilité horizontale et verticale inégalée. En 2026, avec l'essor de l'IA et des workloads massifs, maîtriser son déploiement avancé est crucial pour les architectes : Hyperscale pour les TB de données, serverless pour l'auto-scaling, geo-réplication active pour la DRP, et Query Store pour l'optimisation automatique.
Ce tutoriel avancé vous guide pas à pas, du provisionning IaC à l'optimisation fine, avec codes complets et fonctionnels (Azure CLI, SQL, Bicep). Vous apprendrez à créer une DB Hyperscale, configurer la sécurité Zero Trust, tuner les performances via Intelligent Insights, et monitorer en temps réel. À la fin, vous disposerez d'une architecture production-ready, scalable à 100 TB, résiliente et optimisée pour réduire les coûts de 40%. Prévu pour pros qui bookmarkent : zéro fluff, 100% actionable. (128 mots)
Prérequis
- Compte Azure actif avec abonnement (crédits suffisent pour tester).
- Azure CLI 2.65+ installé (télécharger).
- PowerShell 7+ pour scripts avancés.
- Azure Data Studio ou SSMS pour exécuter SQL.
- Connaissances avancées en SQL Server (indexing, query plans) et ARM/Bicep.
- Région Azure proche (ex: France Central).
Installer Azure CLI et se connecter
az login
az account set --subscription "VotreSubscriptionID"
az versionCe script authentifie votre session Azure CLI et sélectionne l'abonnement. Remplacez VotreSubscriptionID par votre ID réel (trouvé via az account list). Évite les pièges d'auth multi-comptes en settant explicitement ; vérifiez avec az version pour confirmer CLI >=2.65.
Créer le Resource Group et le SQL Server
Nous provisionnons un groupe de ressources et un serveur logique Azure SQL avec authentification SQL (admin/password). Utilisez Bicep pour l'IaC déclarative, plus moderne qu'ARM JSON.
Déployer serveur via Bicep
param location string = resourceGroup().location
param sqlAdmin string = 'sqladmin2026'
param sqlPassword string {
@secure()
minLength: 12
}
resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' Existing = {
name: resourceGroup().name
}
resource sqlServer 'Microsoft.Sql/servers@2023-05-01-preview' = {
name: 'sqlserver-${uniqueString(resourceGroup().id)}'
location: location
properties: {
administratorLogin: sqlAdmin
administratorLoginPassword: sqlPassword
version: '16.0'
}
}
output serverName string = sqlServer.name
output fullServerName string = '${sqlServer.name}.database.windows.net'Ce template Bicep crée un serveur SQL Server v16 avec admin sécurisé. @secure() masque le password en param. Déployez via az deployment group create --resource-group MonRG --template-file main.bicep --parameters sqlPassword=MonPassSecurise123!. Piège : version '16.0' pour compatibilité Hyperscale.
Déployer la Bicep (CLI)
az group create --name "rg-sql-advanced-2026" --location "francecentral"
az deployment group create --resource-group "rg-sql-advanced-2026" --template-file main.bicep --parameters sqlPassword='P@ssw0rdAvance2026!SqlDb' --query properties.outputs.serverName.value -o tsvCrée le RG et déploie le serveur. Capturez l'output serverName pour les étapes suivantes (ex: myserverabc.database.windows.net). Password doit respecter complexité Azure (12+ chars, maj/min/chiffre/special). Évite les erreurs de région en spécifiant francecentral.
Créer une DB Hyperscale et configurer firewall
Provisionnez une DB Hyperscale (scale-out natif jusqu'à 100TB) et ouvrez le firewall pour votre IP. Hyperscale excelle pour OLTP massifs grâce aux compute pools distribués.
Créer DB Hyperscale et firewall
SERVER_NAME=$(az deployment group show --resource-group "rg-sql-advanced-2026" --name "bicep-deployment" --query properties.outputs.serverName.value -o tsv)
az sql db create --resource-group "rg-sql-advanced-2026" --server $SERVER_NAME --name "hyperscale-db-2026" --service-objective "HS_Gen5_2" --family "Gen5" --edition Hyperscale
az sql server firewall-rule create --resource-group "rg-sql-advanced-2026" --server $SERVER_NAME --name AllowMyIP --start-ip-address $(curl -s ifconfig.me) --end-ip-address $(curl -s ifconfig.me)Crée une DB Hyperscale Gen5 avec 2 vCores initiaux. HS_Gen5_2 = SKU scalable. Firewall rule pour votre IP publique (via ifconfig.me). Piège : Hyperscale nécessite --edition Hyperscale ; scalez plus tard via portal/CLI.
Se connecter et créer schéma initial
USE [hyperscale-db-2026];
GO
CREATE TABLE Users (
Id INT IDENTITY(1,1) PRIMARY KEY,
Email NVARCHAR(255) NOT NULL UNIQUE,
CreatedAt DATETIME2 DEFAULT SYSDATETIMEOFFSET()
);
GO
CREATE INDEX IX_Users_Email ON Users(Email) INCLUDE (CreatedAt);
GO
CREATE TABLE Orders (
Id INT IDENTITY(1,1) PRIMARY KEY,
UserId INT NOT NULL,
Amount DECIMAL(10,2),
OrderDate DATETIME2 DEFAULT SYSDATETIMEOFFSET(),
FOREIGN KEY (UserId) REFERENCES Users(Id)
);
GO
INSERT INTO Users (Email) VALUES ('test@exemple.com');
INSERT INTO Orders (UserId, Amount) VALUES (1, 99.99);
GOExécutez via Azure Data Studio (connexion : server=$SERVER_NAME, db=hyperscale-db-2026, user=sqladmin2026, pass=P@ssw0rd...). Crée tables OLTP avec FK, index columnstore-like. Piège : IDENTITY pour auto-inc, SYSDATETIMEOFFSET pour UTC-aware.
Sécuriser avec Auditing et TDE
Activez l'auditing blob storage, Transparent Data Encryption (TDE), et Advanced Threat Protection pour Zero Trust.
Activer sécurité avancée
SERVER_NAME=$(az deployment group show --resource-group "rg-sql-advanced-2026" --name "bicep-deployment" --query properties.outputs.serverName.value -o tsv)
# Auditing to Log Analytics
az sql server create-audit-policy --resource-group rg-sql-advanced-2026 --server $SERVER_NAME --state Enabled --storage-key-type ServiceManaged
# TDE
az sql db tde set --resource-group rg-sql-advanced-2026 --server $SERVER_NAME --database-name hyperscale-db-2026 --status Enabled
# Threat Detection
az sql server advanced-threat-protection-settings create --resource-group rg-sql-advanced-2026 --server $SERVER_NAME --state Enabled --retention-days 90 --storage-endpoint 'https://mystorageacct.blob.core.windows.net/blobcontainer/'Auditing vers Log Analytics (service-managed). TDE chiffre data-at-rest. ATP détecte injections SQL. Piège : Fournir storage endpoint valide pour ATP ; retenez 90 jours pour conformité GDPR.
Configurer Geo-Réplication active
SERVER_NAME=$(az deployment group show --resource-group "rg-sql-advanced-2026" --name "bicep-deployment" --query properties.outputs.serverName.value -o tsv)
az sql db replica create --resource-group rg-sql-advanced-2026 --server $SERVER_NAME --name geo-replica-db --partner-server myserver-secondary.database.windows.net --service-objective HS_Gen5_4
az sql db failover --resource-group rg-sql-advanced-2026 --server myserver-secondary.database.windows.net --name geo-replica-dbCrée réplique active geo pour RPO=0s, RTO<1min. Failover manuel pour DRP. Scalez secondary à 4 vCores. Piège : Secondary server pré-créé ; utilisez pour HA cross-région (ex: France Central -> West Europe).
Optimiser performances avec Query Store
Query Store (activé par défaut) + Automatic Tuning pour index intelligents. Analysez et forcez plans.
Queries Query Store et Auto-Tune
-- Activer Automatic Tuning
ALTER DATABASE [hyperscale-db-2026] SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON, CREATE_INDEX = ON, DROP_INDEX = ON);
GO
-- Top queries by CPU
SELECT TOP 10
qt.query_sql_text,
rs.avg_cpu_time,
rs.count_executions
FROM sys.query_store_query_text qt
JOIN sys.query_store_query q ON qt.query_text_id = q.query_text_id
JOIN sys.query_store_plan p ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id
ORDER BY rs.avg_cpu_time DESC;
GO
-- Créer index recommandé
CREATE INDEX IX_Orders_UserId_Amount ON Orders(UserId) INCLUDE (Amount, OrderDate);
GOActive auto-tuning : force plans stables, crée/drop indexes. Query top CPU pour bottleneck. Piège : avg_cpu_time en µs ; exécutez post-load pour insights réels.
Bonnes pratiques
- Toujours IaC : Bicep/ARM pour reproducibility, intégrez à GitHub Actions.
- Scale serverless pour workloads variables :
--compute-model Serverless --min-capacity 0.5 --max-capacity 4. - Monitoring pro : Azure Monitor + Query Performance Insight ; alertes sur DTU/CPU >80%.
- Backup custom : PITR jusqu'à 35 jours ; geo-restore pour DR.
- Cost-optim : Auto-pause après 1h idle, reserved capacity pour -65%.
Erreurs courantes à éviter
- Oublier firewall : DB inaccessible post-création ; ajoutez toujours rule IP ou VNet.
- SKU incompatible : Hyperscale refuse General Purpose ; vérifiez
--edition. - Pas de connection string pooling : Utilisez
Pooling=true;Min Pool Size=5en app. - Ignorer Query Store : Sans tuning, CPU spike x10 ; queryz régulièrement.
Pour aller plus loin
- Docs officielles : Azure SQL Hyperscale.
- Outils : Azure Data Studio, Query Performance Insight.
- Formations avancées : Formations Learni sur Azure pour cert. DP-300.
- Repo GitHub exemple : Forkez et testez ce setup.