동일한 DB에 연결하는 2 개의 프로세스가 있습니다. 첫 번째는 DB에서 읽는 데 사용되고 두 번째는 DB에 쓰는 데 사용됩니다. 첫 번째 프로세스는 리눅스에서 message-queue를 통해 두 번째 프로세스로 실행을위한 쓰기 절차를 보낸다.SQLite 문제 - DB 잠긴 해결 방법
모든 SQL 문은 prepare, step, finalize 루틴에서 사용됩니다. 준비와 단계가 완료 될 때까지 10000 회 반복됩니다 (DB 잠긴 문제를 극복하기 위해이 작업을 수행했습니다).
난 다음 절차를 수행하는 테이블을 추가하는 방법 :
제 프로세스 = OFF 모드에서 a journal_mode에서의 행의 테이블을 추가하고 쓰레기를 삽입하는 제 2 공정으로 MSG-Q를 통해 요청을 보낸다 .
그러면 첫 번째 프로세스는 기존 테이블을 검사하여 알고리즘을 계속 진행할 수 있습니다. (이는 반복 사이 usleep 명령 루프를 점검한다.)
문제는 제 2 공정은 공정의 실행에 걸린이다 'PRAGMA의 journal_mode = OFF;' 그것은 DB가 잠겨 있다고 말하기 때문입니다. (여기에서도 이전에 언급했듯이, DB가 10000 시간을 확인하기 위해 usleep을 사용하여 10000 반복의 루프를 사용합니다.)
'기존 테이블 검사'루프의 첫 번째 프로세스에 루프를 추가하면 연결을 닫는 작업이 완료되며 두 번째 프로세스는 정상입니다. 하지만 이제 테이블과 값을 추가 할 때 언젠가 '콜백 요청 쿼리가 중단되었습니다'라는 단계 문이 나옵니다.
여기 무슨 일이 벌어 지는지에 대한 도움이 필요하십니까?
다른 프로세스가 DB에 쓰는 동안 프로세스가 journal_mode를 끄기를 원할 수도 있습니다. journal_mode를 끄기 전에 롤백을 시도하십시오. –
첫 번째 프로세스가 DB에 쓰지 않고 DB 읽기 전용 연결을 가지고 있습니다. 두 번째 프로세스는 journal_mode를 끄고 나중에 해당 DB에 쓰는 프로세스입니다. –
쓰기가 발생하기를 기다리는 동안 판독기 측에 결과 세트/커서가 열려 있습니까? –