2017-11-27 11 views
0

분명히 임의의 열 값을 편집하면 체크섬이 변경됩니다. 원래 값을 다시 저장하면 파일이 원래 체크섬으로 반환되지 않습니다.편집을 취소 한 후 Sqlite 체크섬이 동일하지 않은 이유는 무엇입니까?

전후에 VACUUM을 실행 했으므로 버퍼 크기 때문이 아닙니다. 필자는 열을 참조하는 인덱스가없고 행을 추가하거나 제거하지 않으므로 pk 인덱스도 변경하지 않아야합니다. 롤백 저널을 끄려 고 시도했지만 별개의 파일이므로 아무런 효과가 없었습니다.

동일한 내용이 동일한 파일 바이트를 생성하지 않는 이유를 설명하기 위해 내부 로그 또는 수정 날짜를 알지 못합니다.

파일 내부에서 무슨 일이 일어나고 있는지 설명하고이를 설명하는 방법을 찾고 있습니다 (관련 PRAGMA가 보이지 않습니다). 그래서 다른 프로세스가 할 수

답변

1

데이터베이스 파일이 (the equivalent of) a timestamp of the last modification를 포함하는 매우 모호한 원인이

부여 https://sqlite.org/dbhash.html이 문제를 해결하기 위해 존재하지만 "등등 ... 그리고"트리거되는 이러한 조건 중 하나를 볼 수 없습니다 데이터가 변경된 것을 감지합니다.

SQL 레벨에서 볼 수있는 데이터의 차이없이 데이터베이스 파일 (예 : 페이지 순서, B- 트리 구조, 사용하지 않은 부분의 무작위 데이터)에서 변경할 수있는 많은 것들이 있습니다.

SQL 수준에서 데이터베이스를 비교하려면 해당 데이터의 표준 SQL 표현 (예 : .dump 출력)을 비교하거나 dbhash과 같은 특수 도구를 사용해야합니다.