본문 바로가기
Database/sqlite3

[Python sqlite3] OperationalError : database is locked (데이터 베이스 잠김 에러)

by dev수니 2021. 4. 6.
반응형

 

 

 

파이썬을 DB에 연결해주고 데이터를 추가하고 변경하려고 다른 파일창을 여러장 켜서 연결하여 작업중이었는데 무엇때문인지 같은 에러가 계속 발생했다.  에러는 바로 다음의 에러이다.

 

OperationalError sqlite3.operationalerror: database is locked

 

 

 

데이터베이스가 잠겨있다니 이상했다.... 그래서 구글링 한 결과 장고문서에서 SQLite는 경량 데이터베이스이므로 높은 수준의 동시성을 지원할 수 없다고 한다.

 

 

"데이터베이스가 잠겼음" 오류

SQLite는 경량 데이터베이스가 되어 높은 수준의 동시성을 지원할 수 없습니다. OperationalError: database is locked 오류는 응용 프로그램이 기본 구성에서 처리할 수 있는 sqlite보다 많은 동시성을 경험하고 있음을 나타냅니다. 이 오류는 하나의 스레드 또는 프로세스가 데이터베이스 연결에 독점적인 잠금을 가지고 있으며 잠금이 해제되기를 기다리는 다른 스레드가 타임 아웃되어 있음을 의미합니다.
파이썬의 SQLite 래퍼는 번째 스레드가 시간을 초과하기 전에 잠금에서 대기할 수 있는 시간을 결정하는 기본 시간 초과 값이 있으며 OperationalError : database is locked 오류가 발생합니다.

오류를 얻으면 다음과 같이 해결할 수 있습니다.
  • 다른 데이터베이스 백엔드로 전환 합니다. 어떤 시점에서 SQLite는 실제 응용되는 프로그램에 비해 너무 "라이트"하며, 이러한 동시성 오류는 당신이  지점에 도달했음을 나타낸다.
  • 동시성을 줄이고 데이터베이스 트랜잭션이 수명이 짧도록 코드를 다시 작성합니다.
  • 타임아웃 데이터베이스 옵션을 설정하여 기본 타임아웃 값을 늘립니다.

 

 

 

그래서 일단 실행창을 모두 지우고 다시 실행시켰더니 정상작동되었다. 한 DB파일에 연결된 문서가 여러개라면 한개 내지 두개의 파일만 열어놓고 작업을 해야 할 것 같다.

 

 

그리고 시간이 초과되면 한번씩 프로그램을 껐다 키면서 저장시켜주자.

반응형

댓글