2010-06-11 2 views
3

SqlCE에는 플러시 간격이라는 연결 문자열에 설정된 매개 변수가 있습니다. 다음과 같이 정의됩니다.SqlCE 플러시 간격 - 기본 설정이 손상됩니까?

모든 커밋 된 트랜잭션을 디스크로 플러시하기 전의 시간 (초)입니다. 지정하지 않으면 기본값은 10입니다.

커밋 된 트랜잭션은 디스크에 플러시 된 트랜잭션, 특히 데이터베이스 파일입니다. 트랜잭션이 RAM에만 저장되면 트랜잭션을 쉽게 잃어 버리지 않을 수 있습니까?

트랜잭션을 처음 로그 파일에 기록한 다음 데이터베이스 파일 자체에 적용했기 때문에이 매개 변수는 트랜잭션 로그가 데이터베이스 파일에 적용될 때까지 기다릴 시간을 의미 할 수 있습니다.

나는이 매개 변수는 -------

날에 내 데이터베이스 내부 모자를 넣어 보자 0

UPDATE해야한다고 생각했을 것이다. 이해할 수 있듯이 응용 프로그램이 트랜잭션을 시작하면 트랜잭션 시작 레코드가 데이터베이스 LOG에 기록 된 다음 추가, 변경 또는 삭제 된 각 레코드가 LOG에 기록되고 트랜잭션 종료 레코드에 기록됩니다. 별도의 스레드가 트랜잭션 끝을 감지하고 LOG에서 DATABASE로 레코드를 이동했습니다. 이 작업이 완료되면 트랜잭션 ID가 증가되어 트랜잭션이 완료되었음을 나타냅니다. 프로세스가 어디에서나 충돌하면 데이터베이스가 시작될 때 LOG 상태를 검사하여 데이터베이스의 상태를 확인하고 열린 트랜잭션을 완료하거나 롤백합니다. 이 모든 것은 작업이 프로세스의 모든 단계에서 디스크에 기록된다는 것을 의미합니다.

플러시 간격이 LOG에서 DATABASE로 기록하는 경우 모든 것이 의미가 있지만 트랜잭션이 LOG가 아닌 RAM에 보관 된 경우 데이터베이스는 ACID를 준수 할 수 없습니다.

+0

의 SQL Server Compact는 ACID했다 누가? –

답변

0

이전 버전에서는 실제로 손상 문제가있었습니다. 최신 버전의 최악의 시나리오에는 데이터가 누락되었습니다.

매개 변수를 0으로 설정할 수는 없습니다. 1이 최소값입니다.

1

최신 버전에서는 커밋 작업이 오버로드됩니다. CommitMode.Immediate 매개 변수를 사용하여 커밋을 호출하면 플러시 간격 설정이 무시되고 변경 내용이 즉시 파일에 유지됩니다. 기본 옵션은 플러시 간격 값을 기반으로하는 CommitMode.Deferred (매개 변수가없는 호출에서)입니다.

는 SQLCE 손상 감지에 내 게시물을 참조하십시오 : resolving corruption in SQL Server Compact Edition database files