Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Small tool that attempts to repair a journal header. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
05b18b5f6a38f513ff49656faada725e |
User & Date: | shaneh 2010-01-07 21:49:48.000 |
Context
2010-01-07
| ||
22:02 | Minor tweaks to restore_jrnl.tcl utility script. (check-in: b97aca1200 user: shaneh tags: trunk) | |
21:49 | Small tool that attempts to repair a journal header. (check-in: 05b18b5f6a user: shaneh tags: trunk) | |
15:17 | Fix the expression comparison logic to take the COLLATE operator into account. Ticket [360c6073e197] (check-in: 44bb1bfe5d user: drh tags: trunk) | |
Changes
Added tool/restore_jrnl.tcl.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | # 2010 January 7 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements utility functions for SQLite library. # # This file attempts to restore the header of a journal. # This may be useful for rolling-back the last committed # transaction from a recovered journal. # # $Id: restore_jrnl.tcl,v 1.14 2009/07/11 06:55:34 danielk1977 Exp $ package require sqlite3 if { $argc != 2 } { puts "USAGE: restore_jrnl.tcl db_name jrnl_name" puts "Example: restore_jrnl.tcl foo.sqlite foo.sqlite-journal" return } else { set db_name [lindex $argv 0] set jrnl_name [lindex $argv 1] } # is there a way to determine this? set sectsz 512 # Copy file $from into $to # proc copy_file {from to} { file copy -force $from $to } # Execute some SQL # proc catchsql {sql} { set rc [catch {uplevel [list db eval $sql]} msg] list $rc $msg } # Perform a test # proc do_test {name cmd expected} { puts -nonewline "$name ..." set res [uplevel $cmd] if {$res eq $expected} { puts Ok } else { puts Error puts " Got: $res" puts " Expected: $expected" } } # Setup for the tests. Make a backup copy of the files. # if [file exist $db_name.org] { puts "ERROR: during back-up: $db_name.org exists already." return; } if [file exist $jrnl_name.org] { puts "ERROR: during back-up: $jrnl_name.org exists already." return } copy_file $db_name $db_name.org copy_file $jrnl_name $jrnl_name.org set db_fsize [file size $db_name] sqlite3 db $db_name set db_pgsz [db eval {PRAGMA page_size}] db close set db_npage [expr {$db_fsize / $db_pgsz}] # calculate checksum nonce set pgno 1 set pg_offset [expr $sectsz+((4+$db_pgsz+4)*$pgno)] set nonce [hexio_get_int [hexio_read $jrnl_name [expr $pg_offset+4+$db_pgsz] 4]] for {set i [expr $db_pgsz-200]} {$i>0} {set i [expr $i-200]} { set byte [hexio_get_int [hexio_read $jrnl_name [expr $pg_offset+4+$i] 1]] set nonce [expr $nonce-$byte] } # write the 8 byte magic string hexio_write $jrnl_name 0 d9d505f920a163d7 # write -1 for number of records hexio_write $jrnl_name 8 ffffffff # write 00 for checksum nonce hexio_write $jrnl_name 12 [format %08x $nonce] # write page count hexio_write $jrnl_name 16 [format %08x $db_npage] # write sector size hexio_write $jrnl_name 20 [format %08x $sectsz] # write page size hexio_write $jrnl_name 24 [format %08x $db_pgsz] # check the integrity of the database. sqlite3 db $db_name do_test restore_jrnl-1.0 { catchsql {PRAGMA integrity_check} } {0 {ok}} db close |