First page of Microsoft's 100,000-partner directory, sorted by responsiveness Microsoft Solutions Partner — Security, Modern Work, Infrastructure, App Innovation Microsoft partner since 2006 1,100+ organizations under management
Home/Services/SQL Server Migration to Azure VM
Migration

SQL Server Migration to Azure VM

A minimal-downtime migration of production SQL Server instances to SQL Server on an Azure VM — the method chosen from your assessment findings, the cutover rehearsed end to end in a dry run, and 'no data loss' demonstrated with reconciliation evidence rather than asserted. Quoted fixed in writing from the assessment, from $2,300; the listed three weeks run from kickoff to the end of hypercare and cover a single source instance — multi-instance estates are quoted and scheduled separately. This is the production-grade path. For a single small database where the cutover window does not matter, the [fixed-price database copy to an Azure VM](/services/sql-server-database-migration-to-azure-vm) is the simpler product.

Timeline 3 weeksService owner Mike MackeyMicrosoft AzureSQL Server

What this engagement is

Moving SQL Server to an Azure VM is not technically difficult. What makes it go wrong is that the mechanism gets chosen before the environment is understood, the cutover is rehearsed for the first time on the night it matters, and 'no data loss' is asserted rather than demonstrated. This engagement inverts all three. The method is decided by the findings of the SQL Server to Azure Migration Assessment, which is a prerequisite. The cutover is rehearsed end to end in a dry run before the real one. And completion requires seven measurable criteria to be met with evidence attached — not a status report saying the databases appear to be there. Our default method is a full backup, differential, and transaction-log restore chain, with the tail-log backup taken at the write freeze. It is the highest-fidelity approach available: the target is a page-level copy of the source, so users, permissions, indexes, constraints, triggers, CDC configuration, and every data type come across intact. It runs on Standard Edition, needs no primary keys, needs no Availability Group, and leaves the source untouched and instantly recoverable if you decide to abort. Where the findings point elsewhere — Azure Site Recovery for a whole-VM lift, the Azure Database Migration Service, or transactional replication for the specific cases where it genuinely is the right tool — we use that instead, and the report states why. Where this sits in our catalog: we also publish a fixed-price single-database copy to an Azure VM on the current SQL Server version, a replication-based move, and an upgrade-in-flight variant. Those are the right products for one or two small databases where a planned evening window is fine. This page is for production estates where the cutover window is measured in minutes, the evidence pack matters to an auditor or an application owner, the whole instance has to come across — logins, jobs, linked servers, permissions — and the target VM has to be built and tuned rather than simply provisioned. The assessment tells you which product you need before you buy either. Target version: unless the assessment says otherwise, we build on the current SQL Server release — SQL Server 2025 became generally available in November 2025 — with the database compatibility level held at the source level until the Query Store comparison says it is safe to raise. That is also the clean way off the Extended Security Update treadmill: SQL Server 2016 left extended support in July 2026, and 2017 follows in October 2027.

Success criteria

Sign-off requires all seven, each with evidence attached to the closeout report. Not one of them is a matter of opinion.

01Cutover downtime within the quoted window — timestamped cutover log, from write freeze to application smoke-test pass.
02Zero data loss — tail-log restored with unbroken LSN continuity (or, for replication, a tracer token confirming zero pending commands before disablement); per-table row counts and `HASHBYTES` aggregates reconciled between source-at-freeze and target; `sys.objects` counts matched.
03Database integrity — `DBCC CHECKDB WITH DATA_PURITY` returns clean on every migrated database.
04Nothing orphaned — zero orphaned users; every in-scope login, SQL Agent job, and linked server present and executing successfully on the target.
05No performance regression — p95 duration of ten agreed business-critical queries within the tolerance agreed at kickoff (our default is 20%) of the pre-migration Query Store baseline.
06Recoverable — one full and one log backup taken on the Azure target and successfully restore-tested.
07Reversible — rollback runbook validated during the dry run; written abort criteria agreed at kickoff.

What you receive

Cutover runbook — every step, in order, with expected duration, owner, and the go/no-go check that gates it.
Rollback runbook — the reverse path, with the abort criteria that trigger it, validated in the dry run.
Validation evidence pack — the seven criteria above, populated with actual output: reconciliation results, CHECKDB output, timestamped cutover log, baseline comparison.
As-built configuration document — VM specification, disk layout and caching, instance settings, tempdb configuration, backup schedule, service accounts, licensing route applied.
Dependency and connection-string inventory — what connects to what, and what was changed at cutover.
Hypercare from cutover to the end of the three-week window, with a named engineer — the exact dates are stated in your quote.
Project closeout report — final status, outstanding issues, final budget.

How the work unfolds

Kickoff and target build (week 1)

Confirm the assessment findings still hold. Agree the cutover window, the fallback period for the source server, the ten queries that form the performance baseline, written abort criteria, and who has authority to call a rollback on the night. Build the target VM to specification — size, disk layout and caching policy, instance configuration, tempdb, instant file initialization, lock pages in memory, max memory, MAXDOP — with SQL Server licensing applied (Azure Hybrid Benefit or pay-as-you-go image); or, where you have built it yourself, validate it against the specification before anything is seeded. Connectivity is a prerequisite, not a week-one task: the window assumes it is in place and throughput-tested at kickoff.

Seed and synchronise (weeks 1–2)

Take the full backup, copy it to Azure, restore `WITH NORECOVERY`. Establish the differential and log-restore chain and keep it warm and monitored until cutover — the source keeps running normally throughout.

Dry run (week 2)

This is the step most migrations skip, and it is why they fail. We execute the entire cutover against a copy: restore with recovery, remap orphaned users, deploy logins, jobs, and linked servers, run the reconciliation queries, execute the application smoke test, and then execute the rollback. Timings from the dry run become the quoted cutover window, and the go/no-go for the week-three cutover is taken on its results. Anything that surprises us happens here, on a Tuesday afternoon, not at 2am on cutover night.

Cutover (week 3)

Revoke application logins → set source databases `READ_ONLY` → tail-log backup → copy → restore `WITH RECOVERY` → remap users → enable jobs and linked servers → DNS or connection-string switch → application smoke test → reconciliation evidence captured. Go/no-go gate before the irreversible step; abort criteria in force throughout.

Validate, hypercare, and hand over (week 3)

`DBCC CHECKDB` on the target. Backup job configured and proven with a restore test. Query Store comparison against the baseline; plan regressions addressed. Evidence pack assembled. Source server retained read-only for the agreed fallback period. Hypercare runs from cutover to the end of the three-week window with a named engineer, then the closeout report is issued.

Prerequisites

A completed SQL Server to Azure Migration Assessment, or an equivalent findings document we can validate. We do not issue fixed prices on unassessed environments.
An active Azure subscription with SQL Server licensing decided — Azure Hybrid Benefit with Software Assurance or subscription licenses, or a pay-as-you-go SQL Server image. Our SQL Server licensing calculator helps you compare the two before the quote.
Site-to-site VPN or ExpressRoute established and throughput-tested between the source site and the Azure virtual network. If it is not, we can build it as a separate engagement, and the quote says so.
`sysadmin` on the source and target SQL Server instances, and local administrator on both Windows hosts — granted for the engagement and removed at closeout.
Sufficient storage for backup staging at both ends.
A verified, restorable current backup of the source databases before work begins.
Application owners available for the dry-run smoke test and the cutover smoke test — both, not just the second.
An agreed maintenance window, and an agreed fallback period during which the source server stays available.
Authority to change DNS records or application connection strings at cutover, and a named person who can execute that change.

Who does what

IT Partner

  • Select and implement the migration method against the assessment findings.
  • Build the target instance to specification, or validate it against specification where you built it.
  • Establish and monitor the seeding and synchronisation chain.
  • Write and execute the dry run, including the rollback rehearsal.
  • Run the cutover, hold the go/no-go gates, and call rollback if abort criteria are met.
  • Capture and assemble all seven evidence criteria.
  • Configure and restore-test backups on the target.
  • Provide hypercare for the agreed period and remove our access at closeout.

Your team

  • Provide a dedicated technical point of contact for the duration.
  • Provide the access listed in prerequisites.
  • Establish network connectivity, or engage us separately to do so.
  • Execute the DNS or connection-string change at cutover.
  • Make application owners available for both smoke tests.
  • Approve the cutover window and the abort criteria in writing.
  • Coordinate any third-party vendor whose application or schema is in scope.

What's not included

Azure consumption and licensing costs — VM, storage, bandwidth, and SQL Server licensing are billed by Microsoft directly.
Network establishment — a site-to-site VPN or ExpressRoute build is the separate VPN and ExpressRoute engagement.
Application code or vendor remediation — if your application needs changes to work against the new endpoint, that is the application owner's work.
Schema modification of third-party databases — including adding primary keys where a vendor's support agreement prohibits it.
Query and index tuning beyond remediating regressions against the agreed baseline.
High availability and disaster recovery in Azure — Availability Groups, failover clustering, or a second region are quoted as an add-on; whole-VM replication for DR is the Azure Site Recovery implementation.
SSIS, SSRS, and SSAS migration — quoted separately.
Decommissioning the source infrastructure after the fallback period.
Support beyond the stated hypercare period — available under the Azure Resource Monitoring and Maintenance service.
Migration to Azure SQL Managed Instance or Azure SQL Database — different targets, different methods, separate services; the assessment says which you need.

Limitations & technical notes

!The quoted cutover window is derived from the dry-run timings against your actual data volume, not from a template. It is confirmed after the dry run and before the cutover is scheduled.
!Zero data loss depends on a genuine write freeze. If an application cannot be quiesced — a background service that reconnects, a scheduled job outside our visibility — the guarantee does not hold, and identifying every writer during the dry run is why the dry run exists.
!The source server is left intact and read-only for the agreed fallback period. Rollback within that period is a recovery, not a re-migration, provided no writes have occurred on the Azure target since cutover.
!Performance on an Azure VM is determined largely by storage configuration. Where you build the VM yourself and deviate from the assessment specification, the performance criterion is waived and the deviation is documented.
!Moving to a newer SQL Server version changes the cardinality estimator and can cause plan regressions. That is why we capture a Query Store baseline and hold the compatibility level until the comparison says it is safe to raise.
!Transactional replication requires a primary key on every published table and does not carry logins, Agent jobs, linked servers, server-level objects, or several data types. Where the assessment selects it, those objects are migrated by a separate parallel process and the quote covers that extra work explicitly.
!The listed three weeks run from kickoff to the end of hypercare and cover a single source instance, with connectivity already in place and one agreed cutover window; the database count and data volume the window holds are confirmed in the assessment, and the quote states them. Multi-instance estates, estates where we build the network as well, or a cutover slot your business can only offer outside the three weeks are quoted and scheduled separately rather than squeezed into the window.
!Microsoft's migration tooling changes — the Azure SQL migration extension for Azure Data Studio was retired in February 2026, and its successors are the Azure Database Migration Service in the Azure portal, the SQL migration experience in Azure Arc, and SQL Server Management Studio. Where we use Microsoft tooling rather than native backup and restore, we verify the currently supported path on the day, not from a runbook written last year.

Frequently asked questions

How much downtime will we actually have?

Minutes, not hours — and we quote the specific number for your environment after the dry run, before the cutover is scheduled. The window is dominated by the tail-log backup, its copy and restore, the DNS or connection-string change, and the smoke test; the bulk of the data was restored `WITH NORECOVERY` days earlier. For a typical single instance it is well under an hour and usually a fraction of that.

How do you prove there was no data loss?

Four ways, all recorded in the evidence pack: the tail-log backup restores with unbroken LSN continuity from the source, meaning every committed transaction is accounted for; per-table row counts match; `HASHBYTES` aggregates over each table match between source-at-freeze and target; and `sys.objects` counts confirm no missing objects. Then `DBCC CHECKDB` confirms the target is internally consistent. That is a demonstration, not an assurance.

What does it cost?

From $2,300, fixed in writing from the assessment findings. The floor covers a single source instance migrated by the restore-chain method within the three-week window, with connectivity already in place. What moves the number above it: a second or third instance, database count and size, whether we build the target VM or validate one you built, the replication method where the assessment selects it, a network build, and hypercare beyond the window — each stated as a line in the quote, never discovered afterwards. The $950 assessment produces the quote, and you pay for the migration after you approve delivery.

How long does it take?

Three weeks from kickoff to the end of hypercare for a single instance: target build or validation and seeding in week one, a warm restore chain and the dry run in week two, and the cutover itself — one evening — followed by validation and hypercare in week three. The window assumes connectivity is already in place and that the cutover slot falls in week three; if your business can only offer a later slot, the quote schedules around it. Multi-instance estates are quoted and scheduled separately.

How is this different from your fixed-price database copy to an Azure VM?

Scope and rigour. The fixed-price database copy backs up your databases, restores them onto a new Azure VM running the current SQL Server version, and verifies they are available — a planned window, a small estate, a one-week job. This engagement is for production instances where the cutover has to be minutes, the instance has to come across whole — logins, jobs, linked servers, permissions — the target has to be built and tuned to a specification, and you need a reconciliation evidence pack and a rehearsed rollback. If you are not sure which you need, the assessment tells you; and if the smaller product fits, we will say so.

Your replication page recommends transactional replication. Why doesn't this one?

Because for a one-time move between two SQL Servers it is usually the wrong tool. Replication only carries the articles you publish — it does not bring logins, Agent jobs, linked servers, server-level objects, or several data types, and it cannot publish a table without a primary key at all. A log-restore chain brings the database across as an exact copy with none of those restrictions, needs no Enterprise features, and leaves the source untouched. It is faster to set up, lower risk, and higher fidelity. Replication is the right method when the source genuinely cannot tolerate a write freeze of any length, when you are migrating a filtered subset rather than a whole database, when changes must flow back to the source during a transition, or when the version span rules out a restore-based method. The assessment identifies those cases; where it does, we use it, and the replication-based service exists for exactly that.

Do we need Enterprise Edition or an Availability Group?

No. Neither the default method nor the replication method requires an Availability Group, and both run on Standard Edition. If a vendor has told you that minimal-downtime migration requires Always On, that is not correct.

Some of our tables have no primary keys. Is that a problem?

Not for the default method — a log-restore chain copies the database at page level and does not care about keys. It is an absolute blocker for transactional replication, which is one of the main reasons we do not default to it.

Do you build the Azure VM?

Yes, where the quote includes it — size, disk layout and caching policy, instance configuration, tempdb, and the rest, to the assessment's specification. If you would rather build it yourself to that specification, the quote drops accordingly and we validate what you built before seeding. Building it wrong is the single most common cause of 'the migration worked but everything is slower', so if you are not confident, let us build it.

Which SQL Server version will we land on?

The current release unless the assessment says otherwise — SQL Server 2025 became generally available in November 2025. Your database compatibility level is held at the source level until the Query Store comparison shows it is safe to raise. If an application vendor only certifies an older version, the assessment records it and we build that version instead. A version move is also how you leave the Extended Security Update question behind: SQL Server 2016 left extended support in July 2026, and Microsoft's current guidance is that its ESUs are paid even on an Azure VM — check Microsoft's lifecycle pages for the terms that apply to you.

Do you configure the VPN?

Not within this engagement. Working, throughput-tested connectivity is a prerequisite. We build site-to-site VPN and ExpressRoute as a separate service, or your network team can do it. It is called out separately because it is the most common reason a migration slips.

What happens if something goes wrong during cutover?

We stop and roll back, using a runbook that was rehearsed during the dry run against written abort criteria you approved at kickoff. Because the source is left intact and read-only rather than decommissioned, rollback is a matter of restoring write access and reverting the connection change — minutes, not hours. Nobody has to improvise at 2am. The source stays available for an agreed fallback period afterwards; decommissioning it is your decision and outside this engagement.

Will performance be the same after the move?

That is one of the seven success criteria, not a hope. We capture a Query Store baseline of ten business-critical queries before the move and compare after. Regressions are addressed — usually cardinality-estimator changes from the version upgrade, handled by holding the compatibility level or applying Query Store hints.

Will our new Azure database be backed up?

Yes. We configure backups on the target and prove them with a restore test before handover — leaving a newly migrated production database with no backup is not an acceptable end state. Ongoing monitoring and maintenance after hypercare are available under the Azure Resource Monitoring and Maintenance service.

Should we be moving to Azure SQL Managed Instance instead?

Possibly. Managed Instance removes the patching, backup, and HA burden and is the better answer for a substantial share of migrations. It also imposes surface-area constraints that some applications cannot meet. The assessment compares the two against your actual environment and recommends one. We migrate to either.

Do you need to do the assessment first?

Yes, or provide an equivalent findings document we can validate. Fixed pricing on an unassessed environment is guesswork that ends in a change order or a rushed cutover, and we would rather do neither.

Didn’t find your question?

Ask it here. A real engineer answers by email within one business day — and if it’s a good one, it becomes part of this page so the next person finds it.

Answered by a person, one time, to your inbox. Nothing you type here is published without a human reviewing and anonymizing it first.

Often combined with

from $2,300
3 weeks
Request a migration quote