2012-06-05 5 views
6

로컬 호스트 (Windows NT)에 sqlite 데이터베이스가 있고이를 백업하려고합니다. 이 작업을 수행하기 위해 쉘 명령 '.backup'을 사용하고 싶습니다. 하지만 그것은 백업 프로세스 중에 데이터베이스에 새 행을 삽입 할 수있는 것 같습니다.sqlite3 셸 명령 '.backup'및 트랜잭션

'.backup'셸 명령이 내 데이터베이스에서 새로운 독점 트랜잭션을 시작합니까?

'.backup'셸 명령을 실행하면 데이터베이스가 잠길 것이라고 생각했습니다.

답변

3

sqlite3 백업 방법으로 데이터베이스가 잠기지 않습니다. 데이터베이스 잠금 좋아하면 나는 다음과 같은 해결 방법을 사용하는 것이 좋습니다 것입니다 :

    어떤 INSERT 문을 사용하여 트랜잭션 (공유 잠금)
  • 를 시작
  • 를, 데이터베이스는 예약 된 잠금을 가져옵니다. 그러나이문은 비어있을 수 있습니다.
  • 데이터베이스를 백업하십시오.
  • ROLLBACK 또는 COMMIT을 사용하여 트랜잭션을 종료하십시오.

코드 :

BEGIN; 
INSERT INTO <anytable> SELECT * FROM <anytable> WHERE 1=0; 
.backup <database> <file> 
ROLLBACK; 

덜 해키 방법은 (만약 당신이 '백업'라는 이름의 테이블을 사용하고 각 사본에 대한 행 (날짜, ..)을 삽입하는 경우 것 이 정보는 귀하와 관련이 있습니다).