Cause #1: Database Corruption After Unexpected Shutdown
This is by far the most common trigger. I've seen it dozens of times — a server loses power, someone yanks the power cord, or SQL Server crashes hard during a checkpoint. The next time you try to access that database or restore a log backup, you get 0xC0190023. The transaction log has a miniversion (a kind of checkpoint state) that the engine marked as invalid because the write didn't complete cleanly.
First thing: don't panic. In most cases, the database is salvageable. But you need to act fast and in the right order.
Step 1: Check current database state
SELECT state_desc FROM sys.databases WHERE name = 'YourDatabaseName';
If it shows RECOVERY_PENDING or SUSPECT, you've got a real problem. If it's ONLINE but the error still pops, the corruption is probably in a specific page or file group.
Step 2: Run DBCC CHECKDB with repair options
Don't skip this. Run CHECKDB first to see the extent of the damage. I had a client last month whose entire payroll database went suspect after a UPS failure — CHECKDB found 12 corrupt pages, but a simple repair brought it back online. Here's the command:
ALTER DATABASE YourDatabaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DBCC CHECKDB('YourDatabaseName', REPAIR_ALLOW_DATA_LOSS);
GO
ALTER DATABASE YourDatabaseName SET MULTI_USER;
Warning: This can lose data — usually a few rows or pages. That's better than losing the whole database. If you can't afford any data loss, skip this and go straight to restore.
Step 3: If repair fails, restore from backup
And this is why you test your backups. If CHECKDB can't fix it, you need a clean backup. Restore the latest full backup, then apply all transaction log backups except the one that's throwing the error. That log backup is toast. Skip it and apply the rest. Example:
RESTORE DATABASE YourDatabaseName FROM DISK = 'C:\Backups\Full.bak' WITH NORECOVERY;
RESTORE LOG YourDatabaseName FROM DISK = 'C:\Backups\Log1.trn' WITH NORECOVERY;
-- Skip the corrupted log backup (Log2.trn)
RESTORE LOG YourDatabaseName FROM DISK = 'C:\Backups\Log3.trn' WITH RECOVERY;
You'll lose whatever transactions were in that skipped log backup — but you keep everything else. Better than a full database restore from last night.
Cause #2: VSS (Volume Shadow Copy) Snapshot Corruption
Less common but still a regular occurrence. SQL Server relies on VSS for backups or snapshots. If the VSS writer crashes or the snapshot gets invalidated (e.g., disk full, or another backup job interferes), you get this error when you try to mount or use the snapshot. I've seen this on Windows Server 2016 running SQL Server 2014 with a third-party backup tool that wasn't handling VSS properly.
Symptoms: error appears when you try to query a database from a VSS snapshot mount point, not the live database. The fix is straightforward — don't use that snapshot anymore.
Step 1: Delete the corrupted snapshot
Open a command prompt as admin and run:
vssadmin delete shadows /for=C: /oldest
Replace C: with the drive holding the database files. This removes the oldest snapshot. Repeat until all snapshots are gone if the error persists.
Step 2: Recreate the snapshot
If you're using SQL Server's native VSS backup, just rerun the backup job. If it's a manual snapshot for a read-only copy, recreate it:
BACKUP DATABASE YourDatabaseName TO DISK = 'C:\Backups\YourDatabaseName.bak';
Then restore with WITH SNAPSHOT if you need read-only access. But honestly, I've stopped relying on VSS for anything critical — too flaky. Use native SQL Server backups.
Cause #3: Third-Party Backup Tool Interference
I've seen this with tools like Redgate SQL Backup, Idera, or even old-school Symantec Backup Exec. These tools create miniversions internally. If the tool crashes mid-backup, or if two backup jobs conflict (e.g., a differential backup starts while a full backup is still writing), you get miniversion invalidation. The error shows up when you try to use that backup file or restore from it.
Step 1: Check the backup tool's logs
Most tools log the exact file and time of failure. Look for messages about "miniversion mismatch" or "snapshot conflict".
Step 2: Delete the bad backup file
If the error is tied to a specific backup file (like a .bak file), just delete it. Don't try to repair it — it's garbage. Create a fresh backup with no overlapping jobs.
Step 3: Prevent conflicts
Schedule backups so they don't overlap. I had a client whose nightly backup job ran at 10 PM, and their maintenance plan also ran DBCC CHECKDB at 10:15 PM — that overlap killed their backup integrity. Separate these by at least 30 minutes.
Quick-Reference Summary Table
| Cause | Symptom | Fix |
|---|---|---|
| Unexpected shutdown / crash corruption | Database offline or suspect after crash | DBCC CHECKDB with repair, or restore skipping bad log backup |
| VSS snapshot corruption | Error when querying snapshot mount | Delete snapshot with vssadmin, recreate |
| Third-party backup tool conflict | Error on backup file or restore attempt | Delete bad backup file, reschedule to avoid overlap |