Re: [sqlite] Commit failing due to DB locked.
Hi Thanks for responding, I've added my comments in below. On Dec 9, 2009, at 11:30 AM, Kees Nuyt wrote: > On Tue, 08 Dec 2009 22:07:34 +0100, John Clayton > wrote: > >> Hi >> >> I've got two processes opening up two sqlite databases. Assuming the >> databases are called A and B respectively, then both processes do >> this: >> using A, BEGIN IMMEDIATE >> using B, BEGIN IMMEDIATE >> ... do some stuff possibly involving A&B ... >> using B, COMMIT >> using A, COMMIT >> >> In a couple of cases, I've seen one of the processes get an exception >> on COMMIT, the error is 'DB is locked'. I had thought that BEGIN >> IMMEDIATE resulted in a write lock being taken out on the DB, and >> therefore it should be possible to get a locking error on commit. >> >> Has anyone seen this kind of locking error or have >> suggestions as to how I could track it down? > > First a few questions: > > - Which version of SQLite? 3.6.11 > - On what platform? Mac OS X > - On what filesystem type is the database located? A local disk > - Are any PRAGMA's used? Nope > - Do you use the sqlite3 C API, the sqlite3 C & C++, the sqlite3xx API is what we mostly use > command line tool, or some wrapper? > - Did you access any other databases than A or B? > Yes. I should have mentioned that. One of these two processes locks the DB slightly differently. It does this: create a NEW DB, lets call it C attach to A attach to B BEGIN IMMEDIATE copy all table content from A into C COMMIT detach B detach A > You could try PRAGMA locking_mode=EXCLUSIVE or start your > transaction with BEGIN EXCLUSIVE. How is that different from BEGIN IMMEDIATE, I understood that to have the same affect. > >> Thanks > -- > ( Kees Nuyt > ) > c[_] > ___ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
Re: [sqlite] Commit failing due to DB locked.
On Tue, 08 Dec 2009 22:07:34 +0100, John Clayton wrote: >Hi > > I've got two processes opening up two sqlite databases. Assuming the > databases are called A and B respectively, then both processes do this: > using A, BEGIN IMMEDIATE > using B, BEGIN IMMEDIATE > ... do some stuff possibly involving A&B ... > using B, COMMIT > using A, COMMIT > > In a couple of cases, I've seen one of the processes get an exception > on COMMIT, the error is 'DB is locked'. I had thought that BEGIN > IMMEDIATE resulted in a write lock being taken out on the DB, and > therefore it should be possible to get a locking error on commit. > > Has anyone seen this kind of locking error or have > suggestions as to how I could track it down? First a few questions: - Which version of SQLite? - On what platform? - On what filesystem type is the database located? - Are any PRAGMA's used? - Do you use the sqlite3 C API, the sqlite3 command line tool, or some wrapper? - Did you access any other databases than A or B? You could try PRAGMA locking_mode=EXCLUSIVE or start your transaction with BEGIN EXCLUSIVE. >Thanks -- ( Kees Nuyt ) c[_] ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
[sqlite] Commit failing due to DB locked.
Hi I've got two processes opening up two sqlite databases. Assuming the databases are called A and B respectively, then both processes do this: using A, BEGIN IMMEDIATE using B, BEGIN IMMEDIATE ... do some stuff possibly involving A&B ... using B, COMMIT using A, COMMIT In a couple of cases, I've seen one of the processes get an exception on COMMIT, the error is 'DB is locked'. I had thought that BEGIN IMMEDIATE resulted in a write lock being taken out on the DB, and therefore it should be possible to get a locking error on commit. Has anyone seen this kind of locking error or have suggestions as to how I could track it down? Thanks -- John Clayton Skype: johncclayton ___ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users