• Pricing
  • Performance
  • About Us
PricingPerformanceAbout Us
Sign InSign Up
  • Pricing
  • Performance
  • About Us
PricingPerformanceAbout Us
Sign InSign Up
Sign InGet Started

High-Performance Cloud Infrastructure

Empowering businesses with enterprise-grade cloud solutions at competitive prices. Built for reliability and simplicity. Designed for growth.

SOC 2 Compliant
ISO 27001
99.9% Uptime

Stay Updated

3000+

Customers

15,000+

VMs Deployed

24/7

Human Support

Products

Build

  • Raff VM
  • Raff Windows VM
  • Raff Apps
  • Kubernetes

Templates

  • Linux VM
  • Forex VM
  • n8n VM

Store

  • Raff S3
  • Raff Databases

Support

  • Documentation
  • API Reference
  • CLI
  • Terraform Provider
  • Contact
  • FAQ
  • Status

Company

  • About
  • Pricing
  • Blog
  • Release Notes
  • Performance
  • Status

Account

  • Sign In
  • Sign Up
  • Reset Password

Legal

  • Terms of Service
  • Privacy Policy
  • Service Level Agreement
  • Acceptable Use Policy

© 2026 Raff Technologies. All rights reserved.

System Status
SQL Server & Databases
SQL Server & Databasesintermediate10 min read·Updated May 26, 2026

MSSQL Backup Strategy on a Windows VPS: Full, Differential, and Log Backups

Back up SQL Server on a Windows VPS with a practical strategy for full, differential, and log backups, off-server copies, retention, and restore testing.

Serdar Tekin
Serdar Tekin
Co-Founder & Head of Infrastructure
Genuine, fully-licensed Windows
Spin up a Windows Server: full admin, RDP-ready
Genuine Windows Server 2019, 2022, or 2025 with full administrator access. We handle the Microsoft licensing, billed monthly with nothing to buy upfront.
Deploy Windows NowLearn MoreTalk to Windows Engineer
PowerShell output showing SQL Server full, differential, and log backup files created on disk.

In short

A production MSSQL backup strategy on a Windows VPS should include full backups, differential backups, transaction log backups for databases in FULL recovery model, off-server copies, retention rules, and restore testing. For many SMB workloads, a practical starting point is daily FULL backups, DIFFERENTIAL backups every few hours, and LOG backups every 15 minutes when point-in-time recovery matters. The most important rule: an untested backup is not a real backup.

Quick verdict

SituationRecommended backup approach
Production database with important transactionsFULL + DIFFERENTIAL + LOG backups
Database in FULL recovery modelTake LOG backups regularly
Database in SIMPLE recovery modelFULL + DIFFERENTIAL backups only
Small test or dev databaseFULL backup may be enough
Business-critical SQL workloadCopy backups off-server and test restores
SQL Server ExpressUse Task Scheduler + sqlcmd; SQL Server Agent is not included
SQL Server Standard / EnterpriseUse SQL Server Agent jobs where available

The goal is not just to create .bak files. The goal is to know how much data you can lose, how fast you can recover, and whether the backup actually restores.

What we tested on Raff

We tested the backup workflow on a Raff Windows VPS running Windows Server 2025 Datacenter Evaluation and SQL Server 2025 Express.

PowerShell output showing the original SQL-related services on the Raff Windows VPS before installing SQL Server Express.

Test environment:

ItemValue
ProviderRaff Technologies
OSWindows Server 2025 Datacenter Evaluation
SQL ServerSQL Server 2025 Express
InstanceSQLEXPRESS
SQL version17.0.1000.7, RTM
DatabaseRaffBackupTest
Test date2026-05-26
TesterSerdar Tekin

We verified:

  • SQL Server 2025 Express installation
  • SQL Server service status
  • sqlcmd command-line access
  • SQL Server version query
  • Sample database creation
  • Recovery model check
  • FULL recovery model configuration
  • Backup folder creation
  • FULL backup
  • DIFFERENTIAL backup
  • LOG backup
  • Backup files written to disk
  • RESTORE VERIFYONLY backup validation

We tested with SQL Server Express, so some production features differ. SQL Server Agent is not included in Express, and backup compression was not supported in our Express test. For Standard or Enterprise editions, SQL Server Agent and backup compression may be available depending on edition and configuration.

Why backup strategy matters

A SQL Server database can fail in several ways:

  • Accidental delete
  • Bad application update
  • Corrupt data
  • Ransomware
  • Disk issue
  • Failed migration
  • Human error
  • Broken Windows Update or software change
  • VPS-level incident
  • Application bug writing bad data

A local backup protects against some database-level mistakes. It does not protect against every risk.

A proper strategy needs:

  1. Backups created on schedule
  2. Backups copied away from the server
  3. Backups retained for the right amount of time
  4. Restore tests
  5. Clear RTO and RPO targets

RTO and RPO: decide before designing backups

Before choosing a schedule, define two things.

TermMeaningExample
RTORecovery Time Objective: how fast you need to restore serviceBack online within 1 hour
RPORecovery Point Objective: how much data you can loseLose no more than 15 minutes of data

If your business can only lose 15 minutes of transactions, you need transaction log backups around every 15 minutes.

If your business can tolerate losing one day of changes, a daily full backup may be enough.

Do not design backup schedules blindly. Start with the business risk.

The practical 3-3-2 backup rule

For many SMB SQL Server workloads, use this pattern:

LayerMeaning
3 backup levelsFULL, DIFFERENTIAL, and LOG backups
3 copies of dataProduction database, local backup, off-server backup
2 storage locationsLocal VPS storage plus external storage/provider

A practical example:

Backup typeFrequencyPurpose
FULLDailyComplete restore baseline
DIFFERENTIALEvery 4 hoursFaster restore with fewer log files
LOGEvery 15 minutesPoint-in-time recovery
Off-server copyWithin 30 minutes of backup creationProtection from server loss or deletion

This is a starting point. Adjust it based on your RTO, RPO, database size, and workload.

Recovery models: choose first

SQL Server recovery model controls whether transaction log backups are meaningful.

Check current recovery models:

Sql
SELECT name, recovery_model_desc FROM sys.databases;
Recovery modelUse forBackup pattern
FULLProduction OLTP, accounting, ERP, financial systemsFULL + DIFFERENTIAL + LOG
SIMPLEDev/test, reporting, low-risk databasesFULL + DIFFERENTIAL
BULK_LOGGEDSpecial bulk-load workflowsFULL + DIFFERENTIAL + LOG, with caveats

In our test, we created a sample database and checked its recovery model.

SQL command output showing the RaffBackupTest sample database and its recovery model.

For point-in-time recovery, set the database to FULL recovery model:

Sql
ALTER DATABASE RaffBackupTest SET RECOVERY FULL;

Then confirm:

Sql
SELECT name, recovery_model_desc FROM sys.databases WHERE name = 'RaffBackupTest';

SQL command output showing the RaffBackupTest database set to FULL recovery model.

Important: after switching to FULL recovery model, take a FULL backup to start the log backup chain.

SQL Server Express vs Standard / Enterprise

SQL Server Express is useful for small workloads and testing, but it has limitations that affect backup automation.

FeatureSQL Server ExpressSQL Server Standard / Enterprise
Database backupsYesYes
FULL / DIFF / LOG backupsYes, depending on recovery modelYes
SQL Server AgentNoYes
Scheduled backup jobs inside SQL Server AgentNoYes
Task Scheduler + sqlcmdYesYes
Backup compressionNot supported in our Express testOften available, edition-dependent
Good for this article testYesYes

For SQL Server Express, use Windows Task Scheduler with sqlcmd or another automation tool.

For SQL Server Standard or Enterprise, use SQL Server Agent jobs.

Step 1 - Confirm SQL Server is installed

First, check whether a normal SQL Server instance is installed.

Run PowerShell as Administrator:

Powershell
Get-Service | Where-Object {$_.Name -like "MSSQL*"} | Select-Object Name, Status, DisplayName

After installing SQL Server 2025 Express, our test server showed the SQLEXPRESS instance running.

PowerShell output showing SQL Server SQLEXPRESS service running and sqlcmd available on the Raff Windows VPS.

We also confirmed that sqlcmd was installed:

Powershell
sqlcmd -?

If sqlcmd is not recognized, install the SQL Server command-line tools or use SSMS for manual testing.

Step 2 - Confirm SQL Server version

Check the SQL Server version:

Powershell
sqlcmd -S localhost\SQLEXPRESS -E -C -Q "SELECT @@VERSION AS SQLVersion;"

The -C flag tells sqlcmd to trust the server certificate. With newer ODBC drivers, encrypted connections are common by default, and local test instances may use certificates that are not trusted by the client.

SQL Server 2025 Express installer showing successful installation with the SQLEXPRESS instance and SQL engine installed. In our test, SQL Server 2025 Express was installed successfully.

Step 3 - Create the backup directory

Create a local backup directory:

Powershell
New-Item -ItemType Directory -Path 'C:\SQL\Backups' -Force

Grant SQL Server Express access to the folder:

Powershell
icacls 'C:\SQL\Backups' /grant 'NT SERVICE\MSSQL$SQLEXPRESS:(OI)(CI)F'

Verify the folder exists:

Powershell
Get-ChildItem C:\SQL

SQL command output showing the RaffBackupTest database set to FULL recovery model.

For production, do not rely only on the system drive. If possible, use a separate data or backup volume, then copy backups off-server.

Don’t have a server yet?

Deploy Windows NowLearn MoreTalk to Windows Engineer

Step 4 - Take a FULL backup

A FULL backup is the foundation of the restore chain.

For SQL Server Express, we used this command without COMPRESSION because Express did not support backup compression in our test:

Powershell
sqlcmd -S localhost\SQLEXPRESS -E -C -Q "BACKUP DATABASE [RaffBackupTest] TO DISK = N'C:\SQL\Backups\RaffBackupTest_FULL.bak' WITH INIT, CHECKSUM, STATS = 10;"

sqlcmd output showing a successful full backup of the RaffBackupTest database.

For editions that support backup compression, you can use:

Sql
BACKUP DATABASE [YourDB] TO DISK = N'C:\SQL\Backups\YourDB_FULL.bak' WITH INIT, COMPRESSION, CHECKSUM, STATS = 10;

Use CHECKSUM whenever possible. It helps detect backup corruption during the backup process.

Use INIT when you want to overwrite the existing backup file instead of appending to it.

For production, prefer timestamped file names instead of overwriting the same file every day.

Step 5 - Take a DIFFERENTIAL backup

A DIFFERENTIAL backup captures changes since the most recent FULL backup.

Run:

Powershell
sqlcmd -S localhost\SQLEXPRESS -E -C -Q "BACKUP DATABASE [RaffBackupTest] TO DISK = N'C:\SQL\Backups\RaffBackupTest_DIFF.bak' WITH DIFFERENTIAL, INIT, CHECKSUM, STATS = 10;"

sqlcmd output showing a successful differential backup of the RaffBackupTest database.

Differential backups reduce restore complexity.

Without differentials, a restore may require yesterday's full backup plus many transaction log files. With differentials, you restore the latest full backup, the latest differential, then only the log files after that differential.

Step 6 - Take a LOG backup

For a database in FULL recovery model, transaction log backups are required for point-in-time recovery.

Run:

Powershell
sqlcmd -S localhost\SQLEXPRESS -E -C -Q "BACKUP LOG [RaffBackupTest] TO DISK = N'C:\SQL\Backups\RaffBackupTest_LOG.trn' WITH INIT, CHECKSUM, STATS = 10;"

SQL command output showing the RaffBackupTest database set to FULL recovery model.

If you use FULL recovery model but never take log backups, the transaction log can keep growing until it fills the disk.

That is one of the most common SQL Server backup mistakes.

Step 7 - Confirm backup files exist

After running FULL, DIFFERENTIAL, and LOG backups, check the backup folder:

Powershell
Get-ChildItem 'C:\SQL\Backups' | Select-Object Name, Length, LastWriteTime

You should see:

Text
RaffBackupTest_FULL.bak RaffBackupTest_DIFF.bak RaffBackupTest_LOG.trn

PowerShell output showing SQL Server full, differential, and log backup files created on disk.

The exact file sizes and timestamps will differ.

What matters:

FileExpected
.bak full backupPresent and larger than 0 bytes
.bak differential backupPresent and larger than 0 bytes
.trn log backupPresent and larger than 0 bytes
TimestampMatches the backup test window

Step 8 - Verify the backup file

A backup file existing on disk is not enough. Verify that SQL Server can read it.

Run:

Powershell
sqlcmd -S localhost\SQLEXPRESS -E -C -Q "RESTORE VERIFYONLY FROM DISK = N'C:\SQL\Backups\RaffBackupTest_FULL.bak' WITH CHECKSUM;"

Expected result:

Text
The backup set on file 1 is valid.

sqlcmd output showing RESTORE VERIFYONLY successfully validated the SQL Server backup file.

RESTORE VERIFYONLY does not replace a real restore drill, but it is a useful first check.

For production, perform periodic restore tests to a separate database or separate test server.

Recommended production schedule

For a production database in FULL recovery model, use this as a starting point:

Backup typeFrequencyPurpose
FULLDaily, usually overnightComplete restore baseline
DIFFERENTIALEvery 4 hours during business hoursFaster restore
LOGEvery 15 minutesPoint-in-time recovery
Off-server copyWithin 30 minutesProtection from local server loss
Restore testQuarterlyProve the backup actually works

Adjust the schedule for your workload.

If the database changes rarely, you may not need aggressive log backups.

If the database handles orders, accounting, payments, or customer operations, 15-minute log backups may be appropriate.

Use timestamped backup files in production

Our test used fixed file names for clarity:

Text
RaffBackupTest_FULL.bak RaffBackupTest_DIFF.bak RaffBackupTest_LOG.trn

For production, use timestamped file names.

Example naming pattern:

Text
YourDB_FULL_20260526_020000.bak YourDB_DIFF_20260526_100000.bak YourDB_LOG_20260526_101500.trn

This prevents accidental overwrite and makes restore sequencing easier.

Automating backups on SQL Server Express

SQL Server Express does not include SQL Server Agent.

Use Windows Task Scheduler with sqlcmd.

Example full backup command:

Powershell
sqlcmd -S localhost\SQLEXPRESS -E -C -Q "BACKUP DATABASE [YourDB] TO DISK = N'C:\SQL\Backups\YourDB_FULL.bak' WITH INIT, CHECKSUM, STATS = 10;"

Create separate scheduled tasks for:

  • FULL backup
  • DIFFERENTIAL backup
  • LOG backup
  • Off-server copy
  • Cleanup

For SQL Server Standard or Enterprise, use SQL Server Agent jobs instead.

Automating backups on SQL Server Standard or Enterprise

For paid SQL Server editions with SQL Server Agent:

  1. Open SQL Server Management Studio.
  2. Expand SQL Server Agent.
  3. Create a new Job.
  4. Add a T-SQL backup step.
  5. Add a schedule.
  6. Configure notifications.
  7. Test the job manually.
  8. Review job history.

Use separate jobs or separate job steps for FULL, DIFFERENTIAL, and LOG backups.

Off-server backup is not optional

Local backups are useful, but they are not enough.

Local backups do not protect you from:

  • VPS deletion
  • Compromised administrator account
  • Ransomware deleting backup files
  • Disk failure
  • Accidental cleanup
  • Region/provider-level incident

Copy backups to another location.

Options include:

  • Object storage such as S3-compatible storage
  • Backblaze B2
  • Cloudflare R2
  • Another backup server
  • Managed backup storage
  • Separate Raff storage option, if available for your plan

A simple pattern:

Powershell
rclone copy 'C:\SQL\Backups\' 'remote:sql-backups/' --transfers 4

Schedule the off-server copy after each backup window.

Retention policy

Do not keep backups forever on the VPS. You will fill the disk.

A practical SMB retention policy:

Backup typeKeep locallyKeep off-server
FULL7 days30 days
DIFFERENTIAL3 days7 days
LOG24 hours7 days
Monthly FULLOptional12 months

Retention depends on compliance, storage cost, and business need.

For production, document the retention policy and verify cleanup does not delete files needed for restore.

Restore sequence

A typical restore sequence for FULL recovery model:

  1. Restore the most recent FULL backup with NORECOVERY.
  2. Restore the most recent DIFFERENTIAL backup with NORECOVERY.
  3. Restore LOG backups in order with NORECOVERY.
  4. Restore the final LOG with RECOVERY, or run RESTORE DATABASE ... WITH RECOVERY.

Example:

Sql
RESTORE DATABASE [YourDB_RestoreTest] FROM DISK = 'D:\BackupCopy\YourDB_FULL.bak' WITH NORECOVERY, REPLACE; RESTORE DATABASE [YourDB_RestoreTest] FROM DISK = 'D:\BackupCopy\YourDB_DIFF.bak' WITH NORECOVERY; RESTORE LOG [YourDB_RestoreTest] FROM DISK = 'D:\BackupCopy\YourDB_LOG_001.trn' WITH NORECOVERY; RESTORE DATABASE [YourDB_RestoreTest] WITH RECOVERY;

After restore, run:

Sql
DBCC CHECKDB('YourDB_RestoreTest') WITH NO_INFOMSGS;

Document how long the restore took. That is your real RTO.

Common mistakes

No off-server backup

If backups only live on the same VPS, they can disappear with the server. Copy them somewhere else.

FULL recovery model without LOG backups

This causes transaction log growth and can eventually fill the disk. If you use FULL recovery model, take log backups.

Never testing restores

A backup strategy is incomplete until you prove restore works.

Backing up to the same disk as the database

It is better than nothing, but not enough. Use a separate volume or off-server location where possible.

Assuming SQL Server Express has SQL Server Agent

It does not. Use Task Scheduler and sqlcmd for Express.

Copying backup scripts without checking edition support

In our SQL Server 2025 Express test, BACKUP ... WITH COMPRESSION was not supported. Use compression only on SQL Server editions that support it.

Overwriting the same file forever

Fixed file names are fine for a lab. Production should use timestamped files and retention rules.

What Raff recommends

For production SQL Server workloads on a Windows VPS, Raff recommends:

  1. Choose the right recovery model.
  2. Use FULL recovery for business-critical databases.
  3. Take regular FULL, DIFFERENTIAL, and LOG backups.
  4. Copy backups off-server.
  5. Use CHECKSUM.
  6. Verify backups with RESTORE VERIFYONLY.
  7. Run real restore drills.
  8. Monitor disk usage.
  9. Document RTO and RPO.
  10. Review the backup schedule after application or workload changes.

A backup is only useful if you can restore it in time.

Tested on

Tested on Raff Windows VPS, Windows Server 2025 Datacenter Evaluation, SQL Server 2025 Express, SQLEXPRESS instance, SQL Server version 17.0.1000.7 RTM, 2026-05-26. We installed SQL Server Express, verified the SQL service and sqlcmd, created the RaffBackupTest database, set FULL recovery model, created FULL, DIFFERENTIAL, and LOG backups, confirmed backup files on disk, and validated the full backup with RESTORE VERIFYONLY. Tester: Serdar Tekin.

What's next

  • Install MSSQL Server 2025 on a Windows VPS - install and prepare SQL Server on a Raff Windows VPS
  • Windows Update Strategy on Production Servers - patch Windows Server safely with snapshots and maintenance windows
  • Configure Windows Firewall on a Windows VPS - review inbound rules for SQL Server, RDP, and IIS
  • Windows Server Hardening Checklist - secure a Windows Server VPS before production
  • Raff Windows VPS - deploy a Windows Server VPS for SQL Server, IIS, business apps, and remote administration

Sources

  • Microsoft Learn - Back up and restore of SQL Server databases
  • Microsoft Learn - Recovery models
  • Microsoft Learn - BACKUP Transact-SQL
  • Microsoft Learn - RESTORE VERIFYONLY Transact-SQL
  • Microsoft Learn - SQL Server editions and supported features
  • Date last verified: 2026-05-26
Was this article helpful?

Published May 26, 2026 · Updated May 26, 2026

Back to hub
Get started
Deploy a Windows Server

Genuine, fully-licensed Windows. Full admin, RDP-ready in ~55 seconds.

Deploy Windows Now
Full admin · RDP-ready · 14-day money-back
On this page
In shortQuick verdictWhat we tested on RaffWhy backup strategy mattersRTO and RPO: decide before designing backupsThe practical 3-3-2 backup ruleRecovery models: choose firstSQL Server Express vs Standard / EnterpriseStep 1 - Confirm SQL Server is installedStep 2 - Confirm SQL Server versionStep 3 - Create the backup directoryStep 4 - Take a FULL backupStep 5 - Take a DIFFERENTIAL backupStep 6 - Take a LOG backupStep 7 - Confirm backup files existStep 8 - Verify the backup fileRecommended production scheduleUse timestamped backup files in productionAutomating backups on SQL Server ExpressAutomating backups on SQL Server Standard or EnterpriseOff-server backup is not optionalRetention policyRestore sequenceCommon mistakesWhat Raff recommendsTested onWhat's nextSources
Ready when you are

Your Windows Server, live in ~55 seconds

Genuine, fully-licensed Windows with full admin and RDP. We handle the Microsoft licensing, billed monthly with nothing upfront. On NVMe SSD, backed by a 14-day money-back guarantee.

Deploy Windows Now
Learn MoreTalk to Windows Engineer

Related articles

SQL Server & DatabasesAlways On Availability Groups on Two Windows VPSesLearn how to plan and set up SQL Server Always On availability groups on Windows Server VPS infrastructure, including WSFC, SQL editions, replicas, listener, quorum, seeding, failover tests, backups, and common mistakes.10 min read7/6/2026SQL Server & DatabasesConfigure TempDB for MSSQL Performance on a Windows VPSEliminate TempDB allocation contention with multiple equal-sized data files. Min(8, vCPU) files, fixed autogrowth, optional separate disk.8 min read5/29/2026SQL Server & DatabasesMSSQL Standard vs Enterprise — When to Pay MoreCompare SQL Server Standard and Enterprise for Windows VPS workloads, including SQL Server 2025 limits, licensing, high availability, and when Enterprise is worth paying for.8 min read5/29/2026