안녕하세요.
이틀을 공쳐도 해결이 안되어 질문드려봅니다.
ESQL/C 을 통해서 DB에 접속한 후 쿼리를 날리면, DATABASE선택이 되지 않았다는 위의 오류가 발생합니다.
물론 DATABASE이름이나 프로그램을 돌리는 계정과 서버 모두 이상이 없다고 생각합니다.
그 근거로는 간단히 CONNECT후 쿼리만날리는 프로그램을 만들어 돌려보면 정상작동하기 때문이죠.
혹시나하여 각 쿼리를 날리기 전에 EXEC SQL DATABASE ; 문장을 넣어보았습니다.
그 결과로 위의 문장을 추가한 쿼리는 정상작동하는 것이였습니다.
문제의 프로그램은 멀티 프로세스에 멀티 스레드 프로그램이며, DB쪽 관련 부분은 동적라이브러리를 사용합니다.
DB 라이브러리쪽에 접속, 접속종료 그리고 각 쿼리별로 각각의 함수로 만들어져 있습니다.
즉, 쿼리에 해당하는 함수를 호출할 때마다 DATABASE 를 선택 하게 하면 일단 해결은 되는셈이지요.
아마, DB 라이브러리 함수를 들어갔다가 나올때마다 무슨 차이가 있는 것 같기도 합니다.
DB차원에서 한 세션이 하는 모든 행동을 추적할 만한 방법이 없을까요? onstat sql 등의 방법을 사용해보기는 했으나, 커맨드를 쳐야나오는 방식이라 놓치는 것이 많습니다.
각 세션별 로그 같은 것이겠죠.
저의 가정라면 아래와 같다고 생각됩니다.
세션 A가 만들어 졌고, database가 선택이 되었다.
세션 A가 유효하지 않게 되었다. 혹은 current database가 null이 되어버린 사유
세션 A에 쿼리를 받았으나 current database가 null이어서 오류 발생
두번째에서 무슨 일이 발생한 것인지 알아내는 것이 제 목표입니다.
ESQL/C 사용시에 주의해야 할 조언을 주셔도 감사하겠습니다.
의견좀 부탁드리겠습니다. :)
|