안녕하세요.
개발 환경: 델파이7, 파이어버드 2.0 임베디트, ZEOS 6.6.2
대량 Insert Query 실행 시 화면(UI)가 먹통 되는 것이 싫어서
Thread로 Query를 처리했습니다. (서브 쿼리를 사용하는 대량의 INSERT)
1) 본 프로그램에서 DBConnection과 SQL문을 파라메터로 Thread Create 프로시져에 넘기고,
2) Thread 내부에서 새로운 DBConnection를 동적 생성해서 DB 연결
3) 동적 생성한 Query에서 SQL문 실행
4) DB 연결 끊고, Free
Thread는 무리가 가지 않도록 하나만 생성했습니다.
그런데 Thread 방식으로 바꾸고 난 뒤부터 Thread에서 INSERT 한 데이터가
조회되지 않습니다. 프로그램을 종료 후 다시 실행하면 조회가 되구요.
편법으로 Thread 작업 후 데이터베이스를 reconnect를 해 주었더니
조회는 되는데 프로그램 종료 시 파이어버드 Dll에서 에러가 발생하네요.
그래서 Thread에서 Query를 실행했다고 해서 조회가 안될 이유가 없어보여
다시 점검하고 있습니다.
- AutoCommit이 문제가 싶어서 StartTransaction ... Commit도 해 보았구요.
(TransactIsolationLevel := tiNone)
- SQLMonitor로 추적해보면 정상적으로 Query는 처리됩니다.
- Thread는 OnTerminate 이벤트로 죽은 것을 확인 했습니다
왜 이런 현상이 벌어질까요? 의미해볼만한 것이라도 답변 부탁드립니다.
프로그램 소스가 필요하면 다시 올리겠습니다. 무작정 소스를 올리면 성의없어 보여서..ㅡㅡ;
|