Created by CecilWesterhof.
Reason for the script:
I am using a lot of SQLite databases. The problem is that I sometimes do things in a DB browser, but do not write or revert changes. This can give problems with my cron scripts that use the locked database.
Because of this I wrote a script that accept a series of databases as argument and check all those databases for being locked and print a line for the databases that are locked. So when no databases are locked, there is no output.
I have a cron entry that runs this script twice an hour, so I will be notified if I have to unlock a database.
Of-course I can also call it from the command line.
Functionality:
The code:
#!/usr/bin/env tclsh
package require sqlite3
set timeout [expr {10 * 1000}]
foreach database $argv {
sqlite db $database -create False
db timeout $timeout
if {[catch {db eval "BEGIN IMMEDIATE"} SQLError]} {
if {$SQLError ne "database is locked"} {
error "UNEXPECTED ERROR: $SQLError"
}
puts "The database $database is locked."
} else {
db eval ROLLBACK
}
db close
}As always: comments, tips and questions are appreciated.