2009-09-21 6 views
8

데이터베이스 파일을 열고 sqlite3의 open() 메서드를 사용하여 데이터베이스 연결을 가져 오면 프로그램이 종료 될 때까지 연결이 닫히지 않습니다. 컴퓨터의 갑작스런 전원 끄기 또는 OS 충돌과 같은 예기치 않은 오류가 발생하면 데이터베이스 파일의 모드가 손상되거나 핸들이 손실됩니까? 더 구체적으로 말하면 컴퓨터를 재부팅해도 쓰기 가능 상태가 유지됩니까? BTW, 나는 오류가 발생할 때 데이터 손실에 대해 상관하지 않습니다.갑자기 전원이 꺼지거나 OS가 다운되면 SQLite3의 데이터베이스 파일이 손상됩니까?

대단히 감사합니다!

답변

12

SQLite는 이것을 막기 위해 특히입니다. SQLite는 단일 트랜잭션 내에서

모든 변화 중 하나 디스크에 변경 사항을 작성하는 행위가

에 의해 중단되는 경우에도, 전혀 완전히 여부 발생 : 공식 SQLite is Transactional 페이지에서
  • 프로그램 충돌,
  • 운영 시스템 충돌, 또는
  • 정전.

이전 단락의 주장은 광범위 데이터베이스 운영 시스템 충돌의 파일 및 전원 실패에 효과를 시뮬레이션하는 특별한 테스트 장치를 사용하여 SQLite는 회귀 테스트 스위트에서 확인 입니다.

위와 같은 충돌로부터 보호하는 방법에 대한 자세한 내용을 알고 싶다면 SQLite 기사 Atomic Commit in SQLite에 관심이있을 수 있습니다. (File Locking and Concurrency에서)

뜨거운 저널이 프로세스가 데이터베이스 업데이트의 중간 및 프로그램이나 운영 체제 충돌 또는 정전에있을 때 생성이 방지 : 충돌 후 작성과 관련하여


완료에서 업데이트. 뜨거운 일지는 예외적 인 조건입니다. 충돌 및 전원 장애로부터 복구하기위한 최신 저널이 있습니다. 모든 것이 올바르게 작동하면 (즉, 충돌이나 전원 장애가없는 경우) 뜨거운 일지를 얻지 못할 것입니다.

가장 심각한 문제는 충돌 후 남은 핫 일지를 삭제해야한다는 것입니다.

+0

감사! 데이터베이스에 변경 사항이 기록되는 동안 전원 장애가 발생해도 데이터베이스 파일 (* .db)이 쓰기 가능한 상태로 유지되는지 알고 싶습니다. – quantity

+0

@quantity 잠금은 OS 수준에서 수행되므로 갑자기 실패한 다음 재부팅 한 후 fschk 코드가이를 지우고 파일에 다시 액세스 할 수있게됩니다.잠금은 파일 속성을 변경하여 수행되지 않습니다. 또한 답변의 기사 참조에서 "핫 일지"는 DB 파일에 액세스 할 때 자동으로 처리된다는 것이 분명합니다. – Ber

+0

뜨거운 저널 파일을 절대로 삭제하면 안됩니다. 공식 문서 [SQLite 데이터베이스 파일을 손상시키는 방법] (http://www.sqlite.org/howtocorrupt.html), 1.3 절을보십시오. –

1

갑자기 전원을 끌 때 잠재적으로 문제가 발생할 수 있습니다. 그러나 모든 위험을 줄이기 위해 UPS를 제안 할 것입니다.

+0

그리고 우주 광선으로 인해 어떤 일이 일어날 수도 있지만, 실제로 sqlite3 데이터베이스는 예측 가능한 파일 시스템에서 갑작스런 전력 손실의 경우 일관성을 유지합니다. – Arelius

4

Sqlite는 ACID 호환이므로 전원을 끄지 않아도됩니다.

http://en.wikipedia.org/wiki/ACID

+0

나는 파워 오프가 파일의 속성에 영향을 미치고 전혀 열리지 않거나 전혀 데이터를 쓸 수 없다고 생각합니다. – quantity

+0

@quantity, 왜 두렵 니? 저널 파일을 삭제하지 않는 한, sqlite3은 갑자기 전원이 손실 될 경우 데이터베이스를 복구 할 수 있어야합니다. – Arelius