Restore Database
Restore turns your backup into an active database again.
Do it carefully: always verify target paths and preserve a copy of the current file before overwrite.
Core Concepts
flowchart LR
A[Choose backup file] --> B[Protect current DB]
B --> C[Restore into target]
C --> D[Validate restored data]
D --> E[Resume application]
| Restore approach | Command style | Use case |
|---|---|---|
| Shell restore API | sqlite3 target.db ".restore backup.db" | Rebuild target from backup file |
| File replacement | cp backup.db target.db | Offline replacement when safe |
- .restore Command
- File Replace
# Restore backup content into target database file.
sqlite3 restored.db ".restore app_backup.db"
| Expected output |
|---|
Usually no output on success; restored.db now contains backup data. |
# Offline approach: replace target with backup copy.
cp app_backup.db app.db
| Expected output |
|---|
| Target file replaced by backup copy (when no active writers). |
Code Examples
# 1) Keep safety copy of current target before restore.
cp app.db app_before_restore.db
| Expected output |
|---|
| Safety copy created. |
# 2) Restore from backup into a target file.
sqlite3 app_restored.db ".restore app_backup.db"
| Expected output |
|---|
app_restored.db created/restored from backup content. |
# 3) Validate restored contents.
sqlite3 app_restored.db "SELECT name FROM sqlite_schema WHERE type='table' ORDER BY name;"
| name |
|---|
| Table names from restored database |
SQLite-Specific Nuances
SQLite Nuance
.restore loads database content into the target connection database, effectively replacing its contents.
Run restore on the correct target path to avoid accidental overwrite.
Common Pitfalls / Best Practices
Pitfall
Restoring directly over a production file without making a pre-restore copy.
Best Practice
Restore to a new filename first (app_restored.db), validate, then switch application paths if needed.
Quick Challenge
Restore backup_2026.db into recovered.db and list table names to verify success.
View Solution
sqlite3 recovered.db ".restore backup_2026.db"
sqlite3 recovered.db "SELECT name FROM sqlite_schema WHERE type='table' ORDER BY name;"
| Expected output |
|---|
| Table list appears from recovered backup database. |