Still running Dynamics AX 2012? When to upgrade to Finance and Operations and when to start over
AX 2012 has been out of Microsoft support since 2023. Here's how the upgrade to Finance and Operations works, what blocks it, when reimplementing wins, and the order we'd run it in.
part 5 of 5 · Running enterprise platforms wellthe ideaOnly R2 and R3 can upgrade. Read the analyzer report before you pick a route.
after reading, you can- Tell the board what stops when Microsoft no longer fixes AX 2012, and why that needs a decision
- Work out, from the analyzer report, whether to upgrade AX 2012 or start over on Finance and Operations
- Spot the upgrade blockers early: virtual companies, data partitions, overlayering and attachments
Microsoft stopped fixing Dynamics AX 2012 R3 in January 2023, and R2 lost support the spring before that. If your finance, inventory or distribution still runs on AX 2012, the real choice now is between Microsoft's upgrade path to Dynamics 365 Finance and Operations and a fresh implementation with a data migration. This guide covers what each route involves, what blocks the upgrade outright, and how long the pieces usually take.
Your ERP still posts invoices. Nobody at Microsoft is fixing it anymore
Dynamics AX 2012 is the ERP many mid-size companies use for the general ledger, purchasing, warehouses and production. Microsoft's support for the last version, R3, ended in January 2023. The system keeps running, but there are no security fixes, no tax or regulatory updates and no help from Microsoft when it breaks. Its successor is Dynamics 365 Finance and Operations, which runs in Microsoft's cloud and gets updated several times a year. You can upgrade into it and bring your history along, or start clean and move only the data you need.
It's like a building whose lift maker has stopped making parts for your model. The lift still goes up and down every day. When something wears out, though, you're paying a local mechanic to improvise, and the inspector keeps asking when you'll replace it.
- Companies still running AX 2012 R2 or R3
- CFOs and finance controllers
- IT and ERP managers
- X++ developers and AX admins
- Auditors and risk owners
Why it matters to you
Nothing stops on a fixed day, which is exactly why AX 2012 estates linger. Each year, though, something underneath it ages out as well. Microsoft added SQL Server 2016 support for AX 2012 R3 back in 2016, and SQL Server 2016 itself left extended support in July 2026. The third and last year of paid security updates for Windows Server 2012 R2 ended in October 2026. So the ERP, the database and often the operating system are all past their vendor's support at once.
The cost shows up in three places. Tax rates and e-invoicing rules change, and someone has to patch them in house. Security teams flag the servers at every audit. And the upgrade gets slower the longer you wait, because Microsoft ties upgrade time to database size and every year adds more rows.
-
01 Analyze the AX database
Run Microsoft's SQL script against the AX database first. It tells you what to purge and what no longer exists, and the code service puts a size on the rework.
-
02 Rework the code
Changes made inside Microsoft's code get rebuilt as extensions. AX code is frozen except for emergencies.
-
03 Clean and shrink the data
Old records are archived, big tables compressed and file-share attachments pulled into the database.
-
04 Rehearse the data upgrade
First in a development box, where reruns take minutes. Then in a sandbox, where each rerun costs hours.
-
05 Mock cut-over, then go live
Time every technical and business task against the downtime you're allowed, then repeat it for real.
For engineers: Microsoft calls its tools "a framework rather than a complete solution" and warns not to assume the process will run end to end without cleanup, tuning and customization work. The data upgrade itself runs ReleaseUpdate X++ batch classes, much like the AX 2012 upgrade framework did. In sandboxes the database gets there through SQL Server transactional replication, using the AX 2012 Database Upgrade Toolkit, and production is filled by copying the upgraded sandbox database across.
Your options: upgrade, reimplement or stay put
Most companies end up choosing between two serious routes. Staying on AX 2012 is a third, but it's a holding pattern, and every year of it adds data to move later.
| Route | What you do | What comes across | The catch |
|---|---|---|---|
| Upgrade | Run Microsoft's code and data upgrade from R2 or R3 | All transactional history, security role assignments, attachments loaded into the database first | Every overlayered change must become an extension, and some old features block the upgrade outright |
| Reimplement | Configure Finance and Operations fresh and load data through data entities | Only what you choose: masters, open items, balances, some history | History stays behind in AX or an archive, and every process gets redesigned and retested |
| Stay on AX 2012 | Keep the servers running and patch tax changes yourself | Nothing moves | No vendor fixes, aging SQL Server and Windows underneath, and a bigger database to move later |
| Upgrade to on-premises | Run the data upgrade into Dynamics 365 Finance + Operations (on-premises) | Same as the cloud upgrade | You still run the servers, and code upgrade tooling only lives in Lifecycle Services |
The upgrade makes sense when people are mostly happy with how AX works and the history has to stay, for instance when auditors expect years of transactions in one place. Role assignments survive too, because the preupgrade checklist copies them into the business database before the upgrade runs.
Reimplementation wins when the customizations are a mess nobody wants to keep, or when the upgrade analyzer finds a feature that blocks the upgrade. On the mibuso forum this year, one reply said most mid-size companies it saw were choosing reimplementation over a code upgrade, and warned that data quality problems tend to surface late if nobody handles them early. That's one practitioner's view, not a survey.
- Full transaction history comes across
- Security role assignments are preserved
- Overlayered code must be rebuilt as extensions
- Virtual companies or data partitions block it
- Downtime is set by how fast the data upgrade runs
- You inherit old data quality problems
- You pick which data to load and how much history
- Processes get redesigned on standard features
- History lives in AX or an archive afterwards
- No blocked features, because nothing is upgraded
- Every master and open balance needs a load and a check
- Expect more training. People open the same records through different screens and steps
The blockers to find first, and what's different once you're across
Run Microsoft's upgrade analysis report before anyone writes a project plan. It's a SQL script you run in SQL Server Management Studio against the AX business database, and it reports data you can purge, database settings, application settings and deprecated features you still use. Microsoft notes that part of the subscription cost is based on database size, so the purge list is also a budget line.
Eight AX features you'll have to deal with, two of them blockers
Virtual company accounts stop the upgrade. Shared data has to move to global tables, and Microsoft says there's currently nothing that replaces the feature as such.
Also an upgrade blocker. Microsoft's answer for companies that need that separation is to run more than one Finance and Operations instance.
Finance and operations apps don't allow overlayering of Microsoft models. Every change to standard objects has to be refactored into extensions before you upgrade.
Microsoft says AIF couldn't scale to a cloud service. Integrations move to the Data Import/Export framework, data entities and OData.
One web client replaces the AX desktop client and Enterprise Portal. Role Center pages give way to workspaces.
Attachments can't sit on a file share anymore, and keeping them in the database is deprecated. They belong in Azure Blob storage, or linked to SharePoint Online in your tenant.
AX signs people in against your on-premises Active Directory. Finance and Operations signs them in through Microsoft Entra ID, so someone has to map every AX user to an Entra account before the data upgrade.
Updates stop being a once-a-decade project. There are four a year, applied in February, April, July and October, and you can't skip more than one in a row or take fewer than two.
Look hardest at the overlayering numbers, because they drive the code side of the estimate. Export the model store with axutil, upload it to the code upgrade service in Lifecycle Services, and tick Estimation only. The service converts what it can, logs the rest as Azure DevOps tasks, and leaves a conflict list a developer can size. Microsoft says a large solution takes 40 to 60 minutes to analyze, and that the service only runs in the United States Lifecycle Services region, so projects elsewhere create a temporary US project for it.
Don't skip the data dictionary. An AX developer writing about his company's own R2 upgrade on Cloud Wars dropped the customer-layer models expecting to lose only the fields they'd added to tables. The extended data types they'd lengthened went back to standard size as well, and the data upgrade failed on unique index violations. His takeaway was that table, field, EDT and enum changes are the minimum that has to move into extensions. Microsoft's troubleshooting page describes the same trap on the InventDim table, where an InventSizeId widened from 10 to 12 characters in AX produces duplicate hash keys during the final sync.
| Your version | Microsoft support | Upgrade to Finance and Operations | First step |
|---|---|---|---|
| AX 2012 R3 | Ended Jan 2023 | Supported | Get to CU13, which includes the preupgrade checklist |
| AX 2012 R2 | Ended Apr 2022 | Supported | Install KB 4048614 for the checklist and take the latest CU |
| AX 2012 (RTM) | Ended Apr 2022 | Not supported | Reimplement, or move to R2 or R3 first |
Dates that frame an AX 2012 decision
- Oct 2021AX 2012 R3 mainstream support ends
- Apr 2022AX 2012 and R2 extended support ends
Microsoft had already pushed this back from October 2021.
- Jan 2023AX 2012 R3 extended support ends
The last Microsoft fixes for any AX 2012 version.
- Jul 2026SQL Server 2016 extended support ends
After this, fixes cost extra and are sold a year at a time. Budget for them if the upgrade runs long.
- Oct 2026Windows Server 2012 R2 updates end
There's no paid option left after this. Servers still on it run without any fixes.
- Dec 22, 202610.0.50 available to self-update
The next service update after 10.0.49.
- Mar 12, 202710.0.51 available, a major release
The release schedule matters more than it looks. Microsoft recommends the latest quality update before you run the data upgrade, and your sandbox has to match the application version and customizations of the development box where the upgrade last ran clean. A long project will cross several service updates, so plan to re-run the upgrade on each new version instead of hoping one rehearsal carries you to go-live.
Before: AX 2012 R3 on your own servers
Users run the AX client against AOS servers and a SQL Server database. Custom code is overlayered onto Microsoft's objects, partners connect through AIF, and attachments sit on file shares.
After the move: the same ledgers and warehouses, now on Microsoft's cloud
Users sign in with Entra ID through a browser. Custom code sits beside Microsoft's as extensions, partners use data entities and OData, and attachments live in Blob storage.
The order we'd run it in, from the first analyzer run to go-live weekend
- 01Run the analyzer and the code estimate
Run UpgradeAnalysisReport.SQL against the business database and the code upgrade service with Estimation only ticked. If the analyzer finds virtual companies or data partitions, stop and price a reimplementation instead.
- 02Get AX to a supported baseline
Bring R3 to CU13, or install KB 4048614 on R2, and run every task in the preupgrade checklist. If anything changes in AX afterwards, run the whole checklist again.
- 03Rebuild the code as extensions
Start with the data dictionary, then business logic, then reports. Freeze AX code except for emergencies, and port any emergency fix by hand.
- 04Shrink the database and pull in attachments
Purge or archive what the analyzer lists, compress the largest tables with PAGE or ROW compression, and move file-share attachments into the DocuValue table with Microsoft's FastTrack script.
- 05Rehearse in development until it's clean
Restore a backup of the AX database into a development environment and run the data upgrade. Reruns there take minutes, so fix every error here.
- 06Replicate into a sandbox and test
Use the AX 2012 Database Upgrade Toolkit to replicate into a Tier 2 or higher sandbox, upgrade it, then run a full functional test pass with the business.
- 07Mock cut-over against the real window
Time the technical and functional tasks together inside the downtime the business allows. Microsoft wants at least one successful mock cut-over before the real one.
- 08Go live
Start replication the weekend before, stop the AOS servers, finish replication and the data upgrade in the sandbox, then copy that database into production with a self-service refresh.
If you want the versions and support dates in one place, our Finance and Operations page has them. For ERP work beyond Dynamics, see our ERP systems page.
What to do now
What to do now, by who you are
- Ask IT which AX version and cumulative update you run, and which SQL Server and Windows versions sit under it.
- Ask for the upgrade analysis report and a code estimate before anyone quotes a timeline or a price.
- Pick the route by quarter end. Upgrade if the history and processes matter, reimplement if the customizations don't.
- Run UpgradeAnalysisReport.SQL against the business database and save the results.
- Check every company for virtual companies or data partitions. Either one blocks the upgrade.
- Bring R3 to CU13 or install KB 4048614 on R2, so the preupgrade checklist is available.
- Ask who knows where the attachments live. Then count what's on the file share, by document type.
- Export the model store with axutil and run the code upgrade service with Estimation only.
- List every changed table, field, EDT and enum. That's the first code you'll move to extensions.
- Write down every AIF service and file drop, and which data entity or OData call will replace it.
- Build the AX user to Entra ID mapping as a two-column CSV of UserId and EmailAddress.
- Disable leavers and shared AX logins before mapping, so they don't arrive in the cloud.
- Give the code upgrade service a token that expires soon. Revoke it once the run finishes.
Set it up so the next change isn't another project
An ERP gets stuck like AX 2012 did when everyone treats it as finished after go-live. On Finance and Operations the updates arrive whether you're ready or not, since Microsoft applies the latest one automatically once a pause runs out. The aim is to make those updates routine from the first month.
What keeps Finance and Operations boring after go-live
- 01Automate the regression tests
Microsoft recommends the Regression suite automation tool for service updates. If your tests are manual, each of the two or more updates a year turns into a small project of its own.
- 02Keep extensions small and in source control
Every customization lives as an extension in Azure DevOps. Retire anything nobody uses, because each one is something to retest four times a year.
- 03Clean up who can sign in
Map only active users to Entra ID, review security roles before the upgrade preserves them, and give integration accounts their own narrow roles.
- 04Treat tokens and SQL logins as secrets
The code upgrade service wants an Azure DevOps token with full access, and the toolkit wants a sysadmin SQL login. Set expiry dates, keep them in a vault and remove them when the upgrade ends.
- 05Turn off the old servers on a date
Keep AX read-only for lookups only as long as finance needs it, then archive and shut it down. Unsupported SQL Server and Windows hosts shouldn't stay on the network indefinitely.
If the upgrade goes wrong
If a data upgrade run fails or the cut-over overruns
AX 2012 keeps running until you switch it off, and the sandbox upgrade can be rolled back to the replicated state. Know which point you're past before the window opens.
- 01Stop and holdfirst hour
- Don't keep resuming a failed run. Save the toolkit's ds output and the upgrade logs first.
- Tell finance, the warehouse and the help desk whether AX is back in use or still off.
- 02Find the failing stepfirst hours
- Query DBUPGRADE.DATAUPGRADESTATUS for the step, then RELEASEUPDATESCRIPTSERRORLOG for the X++ job that failed.
- Check the usual causes Microsoft lists: widened InventDim fields, orphaned asset journal lines, custom SQL triggers.
- If the AX log files filled the disk, switch the database to the Simple recovery model and free space.
- 03Fix or roll backinside the window
- Fix the cause and resume from the toolkit. If that won't work, trigger its rollback, which puts the sandbox back to Replicated.
- If the window can't hold it, restart the AX AOS servers and give users their old system back.
- Take a backup before you delete anything, even rows Microsoft's troubleshooting page tells you to remove.
- 04Check before go-livefirst day
- Compare record counts with the toolkit's dv report and reconcile ledger balances with finance.
- Hold the attachment migration to Blob until production has the refreshed database, or files land in the sandbox.
- 05Learn and rebookfirst week
- Reproduce the failure in development, where reruns take minutes, and add the fix to the runbook.
- Rebook the window from the new timings and run another mock cut-over first.
What this could look like
Three AX 2012 estates you might recognise, and what we'd do in each
- the setup
- A wholesale distributor runs finance and warehousing on AX 2012 R3 CU13 with years of overlayered changes, many to inventory dimensions. The database has grown large and SQL Server 2016 sits underneath.
- what happens
- The first development rehearsal fails in the final sync on duplicate InventDim keys, because a widened size field went back to standard length when the old layer was dropped.
- what to do
- Move the data dictionary changes into extensions before anything else, then rerun in development until it's clean. Purge and compress before the sandbox run so the downtime fits.
- the setup
- A holding company set up AX 2012 R2 with data partitions to keep each subsidiary's data apart, all run by one IT team.
- what happens
- The analyzer report comes back with data partitions flagged. There's no way to upgrade a system that uses them.
- what to do
- Plan a reimplementation. Decide whether subsidiaries share one instance with legal entities or need separate instances, then load masters and open balances through data entities.
- the setup
- A manufacturer keeps drawings and vendor invoices as AX attachments on a Windows file share, with the paths stored in AX.
- what happens
- After the first sandbox upgrade, users open old purchase orders and the attachments are gone, because the files were never inside the database.
- what to do
- Move the file-share documents into the database with Microsoft's script and time it in rehearsal. After go-live, run Migrate files only once production has the refreshed database.
Whichever way the analyzer points, we can work next to your ERP team. You can hire Finance and Operations developers and consultants for the code rework and rehearsals only, or bring in our Dynamics 365 practice for the whole move. If you want the blocker list before deciding, ask for an assessment.
What to take from this
- 01
AX 2012 R3 has had no Microsoft fixes since January 2023, and R2 none since April 2022.
- 02
Only R2 and R3 can be upgraded to Finance and Operations. RTM and older versions mean a reimplementation.
- 03
Virtual companies and data partitions block the upgrade. Run the analysis report before you plan or budget.
- 04
Overlayered code must become extensions, starting with tables, fields, EDTs and enums.
- 05
Attachments only come across if they're inside the AX database before the upgrade.
- 06
After go-live you take at least two of four service updates a year, so automate regression testing early.
- How Cohash delivers Dynamics 365 Finance & Operations: scope, roles and architecture
- How Cohash delivers Microsoft Dynamics 365: scope, roles and architecture
- How Cohash delivers Microsoft Entra ID: scope, roles and architecture
- Hire vetted Dynamics 365 Finance & Operations engineers
- Dynamics 365
- Book a 30-minute working session with a senior engineer
01Is Dynamics AX 2012 still supported?
No, and it hasn't been for a while. R3 lost extended support in January 2023, and AX 2012 and R2 in April 2022. Everything keeps running, but there are no more security fixes, regulatory updates or Microsoft support.
02Is there a direct upgrade from AX 2012 to Finance and Operations, or do we start over?
Yes, from AX 2012 R2 or R3, after taking the latest cumulative update. Upgrades from AX 2012 RTM aren't supported. Systems that use virtual companies or data partitions can't be upgraded and need a reimplementation.
03Should we upgrade or reimplement?
Upgrade when the processes still fit and the full transaction history matters, since history and role assignments come across. Reimplement when the customizations aren't worth keeping or the analyzer finds a blocking feature. Run the upgrade analysis report and the code estimate first, then decide.
04Do our AX customizations come across?
Only after rework. Finance and Operations doesn't allow overlayering of Microsoft's code, so changes to standard objects have to be rebuilt as extensions. The code upgrade service in Lifecycle Services converts what it can and lists the conflicts left for a developer.
05What happens to our attachments?
They come across only if they're in the AX database before the upgrade. Documents on a file share have to be moved into the database first. Attachments on a local SharePoint server can't be migrated with Microsoft's process. After go-live you run Migrate files to move them to Blob storage. Microsoft recommends it, though files left in the database stay readable.
06How much downtime does the cut-over need?
It depends on database size and how well the data upgrade has been tuned. Microsoft's process has you time the data upgrade and the setup tasks together in a mock cut-over, against the downtime the business sets, and start replication the weekend before go-live.
07Can we stay on-premises?
You can. Microsoft documents a data upgrade from AX 2012 R2 or R3 into Dynamics 365 Finance + Operations (on-premises). The code upgrade tooling still only lives in Lifecycle Services, and the infrastructure stays yours to run.
Three questions, about a minute
Pick an answer and we'll tell you if it's right, and why it is or isn't. The score stays in this browser.
-
Q1The upgrade analyzer reports that your AX 2012 R2 system uses data partitions. What's your realistic route to Finance and Operations?
show the answer
C. Start over on Finance and Operations and load the data by entity Data partitions block the upgrade path, and Microsoft's answer is separate instances where that separation matters. BACPAC imports of AX databases into sandboxes are blocked, so a fresh implementation with a data load is the way through.
-
Q2After the first sandbox upgrade, users can't open old purchase order attachments. What's the likely cause?
show the answer
A. The attachments were on a file share and never moved into the AX database Attachments only come across if they're in the AX database before the upgrade. File-share documents have to be pulled in first, then moved to Blob storage after go-live.
-
Q3The final sync fails with duplicate keys on InventDim. Developers had widened InventSizeId in AX. What fixes it?
show the answer
D. Widen the same field with an extension in Finance and Operations and rerun the sync When a dimension field was widened in AX but not in Finance and Operations, values get cut short while the hash is built and collide. Matching the size with an extension removes the duplicates.