Fix ERROR_SPARSE_NOT_ALLOWED_IN_TRANSACTION (0X00001ABC)
You get this error when trying to mark a file as sparse while a transaction is open on it. The fix is to commit or rollback the transaction first.
You're running a backup or database operation on Windows, probably Windows Server 2016 or 2019. Everything seems fine until you hit this error: 0X00001ABC – ERROR_SPARSE_NOT_ALLOWED_IN_TRANSACTION. The exact message says the sparse operation failed because a transaction is active on the file. I know this error is infuriating. It stops backups cold, especially when you're using tools like Veeam or SQL Server that rely on sparse files for snapshots.
What triggers this error?
This happens most often in two situations:
- You're running a database backup (like SQL Server) that tries to create a sparse file while a Transactional NTFS (TxF) transaction is still open on that file.
- You're using a file-level backup tool that marks a file as sparse (to save space) but another process has an uncommitted transaction on it.
Root cause in plain English
NTFS allows you to mark a file as sparse. A sparse file has empty space that doesn't take up disk space – useful for databases and virtual machines. But Windows also has something called Transactional NTFS (TxF). This lets you group file changes into a transaction, like a database transaction. If a transaction is open on a file, Windows won't let you change its sparseness until that transaction finishes. The error code 0X00001ABC is Windows's way of saying: “Hey, I can't change this file's sparse flag because there's a transaction still running on it.”
The fix: close the transaction
The only real fix is to commit or rollback the transaction that's holding the file. Here's how to find and fix it.
Step 1: Find the process holding the transaction
Open PowerShell as Administrator. Run this command to see all open transactions on the file system:
Get-Transaction -All
This shows you each transaction with an ID and the file path. Look for the file that's causing the error. If you see multiple transactions, note the IDs.
Step 2: Commit or rollback the transaction
If the transaction belongs to a known process (like SQL Server), the safest way is to let that process finish. Check for stuck database operations or backups. If you can wait, let the transaction complete naturally.
If you need to force it, use the transaction's ID. In PowerShell:
Complete-Transaction -Id <TransactionId>
This commits the transaction. Re-run your sparse operation after.
If the transaction is stuck (maybe the process crashed), you can roll it back:
Undo-Transaction -Id <TransactionId>
Step 3: Use Process Explorer if PowerShell doesn't show enough
Download Microsoft's Process Explorer. Run it, hit Ctrl+F, and search for the file name. This shows you every handle to that file, including transactions. Look for the process holding the transaction handle and end it if you must (but be careful – ending a process can corrupt data).
Step 4: Retry the sparse operation
Once the transaction is gone, try your backup or sparse flag operation again. It should work without the error.
What if it still fails?
If the error keeps showing up, check these three things:
- Is the transaction really closed? Run
Get-Transaction -Allagain. If you still see transactions, something is reopening them. Look at the process that's doing it. - Are you using TxF at all? TxF is deprecated in Windows 10 and Server 2016. Microsoft recommends avoiding it. If your app relies on TxF, consider updating the app to use a different method (like Volume Shadow Copy).
- Is the file locked by something else? Use
handle64.exefrom Sysinternals to check for other locks on the file. Sometimes a different process holds a non-transactional lock that also blocks the sparse change.
My opinion: Skip TxF if you can. It's buggy and deprecated. Use VSS for backups and consider file-level transactions only if you absolutely need them.
That's it. This error trips up a lot of sysadmins because transactions are invisible in most tools. Once you know where to look, the fix is straightforward. Good luck.
Was this solution helpful?