Exam Area: Area 2 – Installation, Operation & Configuration (20%)
An Optimizely CMS installation has three main data stores:
| Data Store | Contains | Backup Method |
|---|---|---|
| SQL Server Database | All content, configuration, user data, change log, versions | SQL Server Backup / Azure SQL automated backup |
| Blob Storage | Media files (images, videos, documents) | Azure Blob snapshots / Storage replication |
| Application Files | Code, views, configuration files | Source control (Git) |
Key principle: The database + blob storage together contain all customer data. Application code should always be in source control — it is not "data".
Full backup: Complete snapshot of the entire database
Differential: Changes since last full backup
Transaction log: All transactions since last backup
→ Enables point-in-time recovery
Recommended schedule (production):
Daily: Full backup
Hourly: Transaction log backup
Weekly: Test restore to verify backup integrity
Azure SQL Database provides automated backups by default:
| Backup Type | Frequency | Retention |
|---|---|---|
| Full | Weekly | 1-35 days (configurable) |
| Differential | Every 12 hours | Same as full |
| Transaction Log | Every 5-10 minutes | Same as full |
Point-in-time restore (PITR):
Azure Portal → SQL Database → Restore
→ Select point in time (within retention period)
→ Restores to a new database
→ Switch connection strings to restored DB
Azure Blob Storage → Geo-redundant replication (GRS):
→ Primary region: data written here
→ Secondary region: asynchronously replicated copy
→ RPO: ~15 minutes
Manual snapshot/backup:
# Azure CLI — create blob snapshot
az storage blob snapshot \
--container-name mysitemedia \
--name hero-image.jpg \
--account-name mystorageaccount
The Optimizely DXP portal provides self-service database download:
DXP Portal → Environments → Production → Database
→ Download backup (.bacpac format)
→ Schedule: automatic daily backups retained for 7 days
Full recovery after data loss:
1. Restore SQL database from backup
2. Point application connection string to restored database
3. Verify blob storage is in sync with DB
→ If blobs are more recent than DB: orphaned blobs (OK, clean up later)
→ If DB is more recent than blobs: missing media (restore blobs too)
4. Restart application
5. Verify content is accessible
6. Check Change Log for any suspicious activity
CMS has a built-in Recycle Bin for soft-deleted content:
// Content moved to trash is still in the database
// Access via Admin: /episerver/cms/admin → Manage Waste Basket
// Programmatic restore
public class TrashService
{
private readonly IContentRepository _contentRepository;
public TrashService(IContentRepository contentRepository)
{
_contentRepository = contentRepository;
}
public void RestoreFromTrash(ContentReference deletedRef, ContentReference destination)
{
_contentRepository.Move(deletedRef, destination);
}
}
CMS supports content mirroring between CMS instances:
Source CMS → Mirroring service → Target CMS
→ Replicates published content
→ Useful for: DR environment, regional CDN origin servers
| Metric | Description | Typical Target |
|---|---|---|
| RPO | Max acceptable data loss (how old can the backup be?) | < 1 hour |
| RTO | Max acceptable downtime | < 4 hours |