Re: Database malformed

Posted by matlabbe on
URL: http://official-rtab-map-forum.206.s1.nabble.com/Database-malformed-tp10500p10520.html

Hi Pierre,

it is strange indeed. Just re-did this just after re-downloading the file (renamed database to corrupted.db):
$ ls -l corrupted.db
-rw-rw-r-- 1 mathieu mathieu 5069553664 Oct  9 08:47 corrupted.db

### Showing  original error ###
$ rtabmap-info corrupted.db 
terminate called after throwing an instance of 'UException'
  what():  [FATAL] (2024-10-09 09:13:40.244) DBDriverSqlite3.cpp:521::executeNoResultQuery() Condition (rc == SQLITE_OK) not met! [DB error: database disk image is malformed, the query is PRAGMA cache_size = 10000;]
Aborted (core dumped)

### Recovering with sqlite3 ###
$ sqlite3 corrupted.db 
SQLite version 3.37.2 2022-01-06 13:25:41
Enter ".help" for usage hints.
sqlite> .mode insert
sqlite> .output dump_all.sql
sqlite> .dump
sqlite> .exit

$ ls -l dump_all.sql
-rw-rw-r-- 1 mathieu mathieu 10109822559 Oct  9 09:06 dump_all.sql

$ cat dump_all.sql | grep -v TRANSACTION | grep -v ROLLBACK | grep -v COMMIT > dump_all_notrans.sql

$ ls -l dump_all_notrans.sql
-rw-rw-r-- 1 mathieu mathieu 10109822513 Oct  9 09:14 dump_all_notrans.sql

$ sqlite3 recovered.db ".read dump_all_notrans.sql"

$ ls -l recovered.db 
-rw-r--r-- 1 mathieu mathieu 5066268672 Oct  9 09:21 recovered.db

### Showing  no more error ###
$ rtabmap-info recovered.db 
[...]
Info:

Path:               recovered.db
Version:            0.21.1
Sessions:           1
Total odometry length:748.832764 m
Total time:         2428.857190s
LTM:                5911 nodes and 0 words (dim=0 type=8U)
WM:                 5911 nodes and 0 words
Global graph:       5911 poses and 15526 links
Optimized graph:    0 poses (x=15526->0, y=0->0, z=0->0)
Maps in graph:      0/1 []
Ground truth:       0 poses
GPS:                0 poses
Links:
  Neighbor:         4956	(length avg: 0.15m, std: 0.15m, max: 1.43m)
  GlobalClosure:    0	(length avg: 0.00m, std: 0.00m, max: 0.00m)
  LocalSpaceClosure:0	(length avg: 0.00m, std: 0.00m, max: 0.00m)
  LocalTimeClosure: 0	(length avg: 0.00m, std: 0.00m, max: 0.00m)
  UserClosure:      0	(length avg: 0.00m, std: 0.00m, max: 0.00m)
  VirtualClosure:   0	(length avg: 0.00m, std: 0.00m, max: 0.00m)
  NeighborMerged:   0	(length avg: 0.00m, std: 0.00m, max: 0.00m)
  PosePrior:        0	(length avg: 0.00m, std: 0.00m, max: 0.00m)
  Landmark:         10	(length avg: 1.11m, std: 0.27m, max: 1.78m)
  Gravity:          5911	(length avg: 0.00m, std: 0.00m, max: 0.00m)

Database size:      5066 MB
Nodes size:         1 MB	(0.02%)
Links size:         5 MB	(0.11%)
RGB Images size:    4234 MB	(83.58%)
Depth Images size:  796 MB	(15.72%)
Calibrations size:  969 KB	(0.02%)
Grids size:         70 KB	(0.00%)
Scans size:         9 MB	(0.19%)
User data size:     0 Bytes	(0.00%)
Dictionary size:    0 Bytes	(0.00%)
Features size:      0 Bytes	(0.00%)
Statistics size:    6 MB	(0.12%)
Other (indexing, unused):11 MB	(0.24%)

### Final step to make the full recovery ###
$ rtabmap-recovery  recovered.db 
Recovering "recovered.db"
Found 5911 nodes to recover.
Database is indeed corrupted, found one or more neighbor links missing.
Recovering data of "recovered.db"...
Processed 1/5911 nodes...
Processed 2/5911 nodes...
Processed 3/5911 nodes...
Processed 4/5911 nodes...
Processed 5/5911 nodes...
[...]


It seems we have same sqlite3 version. I'll check tonight how I can re-share you the recovered database (I am low in space left on my google drive).