2014-02-26 1 views
1

배경 :
1. 자사의 DB 서버에서로 현재와 동기화 된 데이터가 아닌 경우
2.이 응용 프로그램은 빈 DB를 생성 SQLite는, 데이타베이스를 사용하여 C# 응용 프로그램.SQLite는이 - 데이터베이스를 연결하는 데 실패

문제점 :
1. 응용 프로그램이 갑자기 오류가 발생하는 경우가 있습니다. 처리되지 않은 예외가있는 것처럼 보입니다.
2. 응용 프로그램을 즉시 다시 시작하여 즉시 충돌이 발생합니다.

임시 해결책 :
1. 다른 위치로 db를 복사하고 원래 db를 삭제하십시오.
2. 응용 프로그램을 실행하십시오. 부수 지 마시오. db가 없기 때문에 빈 db는 응용 프로그램에 의해 생성됩니다.
3. 백업 db 및 woo hoo를 복사합니다. 응용 프로그램이 충돌하지 않고 정상적으로 시작됩니다.

내 질문 : 응용 프로그램과 협력하는 방법
1. 같은 그것은 이전에 반복적으로 응용 프로그램을 충돌되면서 DB 오래된?

참고 : 나는 어떤 시나리오에 실패한지고를 잘 모릅니다으로
1. 나는 디버깅이 충돌을 재현하는 데 실패했습니다.
2. 모든 의견을 주시면 솔루션을 추측하지 않으려 고합니다.

예측 :
1. 우리는 이들 파일은 신선한 일관 새로 덮어되고있는 같은 이름의 새 데이터베이스를 만들 때 DB에 연결하는 동안 일부 지원 임시 파일이 일관성이없는 상태와 문제의 원인에 파일.

+0

그냥 추락 대신 스택 추적 및 자세한 예외를 얻을 수 있도록 일부 로그를 추가하십시오. – ken2k

+1

죄송합니다. 예외가 무엇인지 우리에게 말할 수 없다면 아무도 할 수 없을 것입니다. 응용 프로그램에서 모든 예외를 처리하고 Log4Net 등을 사용하여 파일에 기록하십시오. –

+0

응용 프로그램에 대한 로그가없고 매우 자주 발생하지 않으며 로그가있는 새로운 코드를 배포하고 프로덕션에서 문을 catch합니다. –

답변

2

첫 번째로 아무도 코드 나 오류없이 질문에 대답 할 수 있다고 생각합니다.

  1. 모든 입력 그렇게 이해 용액을 추측 주저한다.


그래서 난 그냥 여기에이 던질거야 :

응용 프로그램 충돌을하거나 같은 오류를 줄 수있는 여러 가지가 있습니다
- 데이터베이스 생성 - 응용 프로그램
일치하지 않습니다는 귀하의 신청서에 잘못되었습니다.
- 권리?
- 연결도 아무것도
을하기 전에 잘못 - 데이터베이스가
이 존재하지 않기 때문에 연결 잘못 - - 연결 경로가 잘못 때문에
잘못 동기화가 잘못

당신이보고 시도 되세요 PC의 로그?
함께 일하는 모든 것을 업데이트 했습니까?
귀하의 설명에 따르면 귀하의 코드 어딘가에 귀하의 전체 애플리케이션이 실패하게하는 데이터베이스를 변경한다고 생각합니다.

참고 : 1. 어떤 시나리오에서 실패했는지 알지 못하기 때문에 디버깅에서이 크래시를 재현하지 못했습니다.

정상적으로 응용 프로그램을 실행할 때 충돌이 발생할 수 있지만 디버깅 할 때 재현 할 수 없습니다. 컴퓨터에서만 발생합니까? 아니면 다른 enviremonts에서도 발생합니까?

이것이 아마도 사용자가 찾고있는 답변이 아니라는 것을 알고 있습니다 만 원하는 경우이 모든 것을 확인할 수 있습니다. (필요한 경우 그것을 삭제하십시오)

행운을 빌어 요!

1

아마 누군가 데이터베이스 파일을 손상시키고 있습니다. 어쩌면 그것이 여러 스레드를 포함하거나 여러 인스턴스를 동시에 시작하는 경우 자신의 응용 프로그램입니다. 기본적으로 SQLite는 이러한 경우를 처리 할 수 ​​있지만 thread-safe하지 못하게 할 수있는 구성 옵션이 있습니다. documentation을 살펴보십시오. 또는 어쩌면 응용 프로그램이 SQLite를 우회하여 데이터베이스 파일을 직접 수정합니다 (사용중인 경로를 확인하십시오).

어쩌면 SQLite가 데이터베이스 근처에 미리 쓰기 로그 파일을 만드는 데 실패하여 일부 트랜잭션이 활성화되어있는 동안 응용 프로그램이 종료 될 경우 복구 할 수없는 데이터베이스가 손상 될 수 있습니다.

SQlite의 데이터베이스 형식은 documented이므로 유효하고 손상된 파일을 비교하고 손상된 부분을 파악할 수 있습니다.

마지막 수단으로, SQLite의 소스 코드를 사용하여 디버그 정보로 자신의 lib를 빌드 할 수 있습니다.

관련 문제