Azure Cheatsheet

SQL Database

Use this Azure reference while you build software engineering projects, review code, or refresh the syntax you reach for most.

Service Tiers

TierModelMax sizeUse case
ServerlessvCore, auto-pause4 TBDev, intermittent workloads
General PurposevCore (5th gen)4 TBMost production workloads
Business CriticalvCore, local SSD4 TBLow latency, In-Memory OLTP
HyperscalevCore, distributed100 TBVery large DBs, read scale-out
Basic / Standard / PremiumDTU model (legacy)1 TBSimpler pricing, smaller apps

Prefer vCore (General Purpose / Serverless) for new workloads — more tuning control and reservation discounts.

Create a Server + Database

# Create a logical SQL server
az sql server create \
  --name mysqlserver \
  --resource-group myRG \
  --location eastus \
  --admin-user sqladmin \
  --admin-password "P@ssw0rd1234!"

# Allow Azure services through firewall
az sql server firewall-rule create \
  --server mysqlserver -g myRG \
  --name AllowAzureServices \
  --start-ip-address 0.0.0.0 \
  --end-ip-address 0.0.0.0

# Allow your IP
az sql server firewall-rule create \
  --server mysqlserver -g myRG \
  --name MyIP \
  --start-ip-address $(curl -s ifconfig.me) \
  --end-ip-address $(curl -s ifconfig.me)

# Create a database — General Purpose, 2 vCores
az sql db create \
  --server mysqlserver -g myRG \
  --name mydb \
  --edition GeneralPurpose \
  --service-objective GP_Gen5_2 \
  --max-size 32GB \
  --backup-storage-redundancy Local

# Create serverless (auto-pause after 1 hour)
az sql db create \
  --server mysqlserver -g myRG \
  --name mydb \
  --edition GeneralPurpose \
  --service-objective GP_S_Gen5_2 \
  --auto-pause-delay 60       # minutes; -1 to disable

List & Inspect

az sql server list -g myRG -o table
az sql db list --server mysqlserver -g myRG -o table
az sql db show --server mysqlserver -g myRG --name mydb
az sql db list-usages --server mysqlserver -g myRG --name mydb -o table

Connection String

# Show ADO.NET connection string
az sql db show-connection-string \
  --server mysqlserver \
  --name mydb \
  --client ado.net

# Common client options: ado.net, jdbc, odbc, php, php_pdo, sqlcmd

# Full connection details
az sql server show --name mysqlserver -g myRG \
  --query "{FQDN:fullyQualifiedDomainName}" -o tsv
# Server: mysqlserver.database.windows.net

Sample connection strings

ADO.NET:
Server=tcp:mysqlserver.database.windows.net,1433;
Initial Catalog=mydb;Persist Security Info=False;
User ID=sqladmin;Password=***;
MultipleActiveResultSets=False;Encrypt=True;
TrustServerCertificate=False;Connection Timeout=30;

JDBC:
jdbc:sqlserver://mysqlserver.database.windows.net:1433;
database=mydb;user=sqladmin@mysqlserver;
password=***;encrypt=true;trustServerCertificate=false;
loginTimeout=30;

ODBC (for pyodbc):
Driver={ODBC Driver 18 for SQL Server};
Server=mysqlserver.database.windows.net,1433;
Database=mydb;Uid=sqladmin;Pwd=***;Encrypt=yes;

Scaling

# Scale up database
az sql db update \
  --server mysqlserver -g myRG --name mydb \
  --service-objective GP_Gen5_4     # 4 vCores

# Scale to DTU-based Standard tier
az sql db update \
  --server mysqlserver -g myRG --name mydb \
  --edition Standard --service-objective S3

# Show current service objective
az sql db show --server mysqlserver -g myRG --name mydb \
  --query currentServiceObjectiveName -o tsv

Backup & Restore

# List restore points
az sql db restore-point list \
  --server mysqlserver -g myRG --database-name mydb -o table

# Restore to point in time (creates a new DB)
az sql db restore \
  --server mysqlserver -g myRG \
  --name mydb-restored \
  --source-database mydb \
  --time "2024-06-01T12:00:00Z"

# Create a long-term backup (manual)
az sql db ltr-backup list \
  --server mysqlserver -g myRG \
  --database mydb -o table

# Export to BACPAC (Storage Account)
az sql db export \
  --server mysqlserver -g myRG --name mydb \
  --storage-key-type StorageAccessKey \
  --storage-key <key> \
  --storage-uri "https://mystorageacct.blob.core.windows.net/backups/mydb.bacpac" \
  --admin-user sqladmin --admin-password "P@ssw0rd1234!"

# Import from BACPAC
az sql db import \
  --server mysqlserver -g myRG --name mydb-import \
  --storage-key-type StorageAccessKey \
  --storage-key <key> \
  --storage-uri "https://mystorageacct.blob.core.windows.net/backups/mydb.bacpac" \
  --admin-user sqladmin --admin-password "P@ssw0rd1234!" \
  --service-objective GP_Gen5_2 --max-size-bytes 34359738368

Geo-Replication & Failover Groups

# Create a geo-replica in another region
az sql db replica create \
  --server mysqlserver -g myRG \
  --name mydb \
  --partner-server mysqlserver-dr \
  --partner-resource-group myRG-DR

# Create a failover group
az sql failover-group create \
  --server mysqlserver -g myRG \
  --name myfailovergroup \
  --partner-server mysqlserver-dr \
  --failover-policy Automatic \
  --grace-period 1

# Manual failover (promote secondary)
az sql failover-group set-primary \
  --server mysqlserver-dr -g myRG-DR \
  --name myfailovergroup

Security

# Enable Microsoft Defender (Advanced Threat Protection)
az sql db threat-policy update \
  --server mysqlserver -g myRG --db-name mydb \
  --state Enabled \
  --storage-account mystorageacct

# Enable auditing to a storage account
az sql server audit-policy update \
  --server mysqlserver -g myRG \
  --state Enabled \
  --storage-account mystorageacct

# Enable Transparent Data Encryption (TDE — on by default)
az sql db tde set \
  --server mysqlserver -g myRG --database mydb \
  --status Enabled

# Enable Microsoft Entra (AAD) authentication
az sql server ad-admin create \
  --server mysqlserver -g myRG \
  --display-name myAADAdmin \
  --object-id <aad-object-id>

Elastic Pools

# Create elastic pool
az sql elastic-pool create \
  --server mysqlserver -g myRG \
  --name myPool \
  --edition GeneralPurpose \
  --capacity 4 --max-size 50GB

# Move a database into the pool
az sql db update \
  --server mysqlserver -g myRG --name mydb \
  --elastic-pool myPool