ORACLE PRO*C + pthread 사용시 검색 결과가 이상한 경우가 있습

tombraid의 이미지

PRO*C와 pthread를 사용해서 솔라리스 8에서 서버 프로그래밍을 하고 있는 중입니다.

다름이 아니라 간혹 검색결과가 이상하거나, 에러가 나는 경우가 있습니다.

멀티 스레드가 아닌 경우에는 보지 못했던 문제인데 말이죠.. ^^;;;;

어떤 경우에 이런 일이 있을수 있는지 알고 싶습니다.

비슷한 경험을 하셨던 분이나 이런 상황에 대해서 알고 계시면 답변 부탁 드립니다.

그럼 좋은 하루 되시길 바랍니다.

volata의 이미지

무엇이 잘못되었다... 기술을 정확히 기술을 해주시지 않으셔서 모르겠지만...
우선 오라클과 pthread의 사용시 에러가 나는 부분은 제 경험으로
두가지 있것 같습니다...
sql_context의 사용과
그리고 sqlca.sqlcode의 잘못된 사용
우선 sqlca.sqlcode의 사용에 대해서 말씀드리고 sql을 사용하는 function마다 struct sqlca sqlca;을 넣어 주시고 sqlcode를 확인을 해주세요...
보통 전역으로 한번만 잡게 되면... 엉뚱한 sqlcode값을 얻을 수 습니다...
자기가 실행한 코드를 확인하게 되는게 아니라... 다른 잡의 코드를 얻을 수 있기때문에죠..
이상 허접 답변이었습니다.....

tombraid의 이미지

우선 답변 감사합니다. ^^;

sql을 사용하는 함수마다 struct sqlca sqlca;를 선언해야 하는건 몰랐네요.

사실 이상한 에러코드를 얻은적이 있거든요.. ^^;;

==========================================================

구체적인 상황을 설명 드리기에는 너무 잡다한 내용이 많구요.

간단히 정리하면 다음과 같습니다.

A_GROUP (PID INTEGER, GID INTEGER), A_MEMBER (GID INTEGER, NAME VARCHAR2(30)) 이런 두 테이블이 있습니다.

각 그룹에 들어있는 멤버들의 이름을 트리형식으로 꺼내기 위해서
A_GROUP에 connect by를 이용해서 트리검색을 하고,
GID로 두 테이블을 조인을 했습니다.

검색결과가 이상한 경우는요.
10줄이 검색되어야 하는데, 그리고 평상시에는 10줄이 잘 검색되는데, 간혹 3줄, 4줄이 검색되는 경우입니다.
그리고 에러가 나는 경우는 그나마도 검색이 안되는 경우입니다.

제가 보기에는 같은 쿼리가 동시에 다른 스레드에서 들어가는 경우에 나타나는 문제 같습니다.

어떤 부분이 이런상황을 만들수 있는지 어떻게 수정해야 하는지 알고 싶습니다.

choissi의 이미지

http://www.csee.umbc.edu/help/oracle8/server.815/a68022/threads.htm

Multithreaded Applications

If your development platform does not support threads, ignore this chapter.

The sections of this chapter are:

    What are Threads?

    Runtime Contexts in Pro*C/C++

    Runtime Context Usage Models

    User Interface Features for Multithreaded Applications

    Multithreaded Example

[/]

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

tombraid의 이미지

제가 메뉴얼을 읽는다고 읽었는데, Programming Considerations 부분을 소홀히 한거 같네요.

5가지 중에서 밑의 3가지는 지킨거 같은데 위의 2가지는 전혀 안 지켰었네요... ^^;;;;

수정하고 다시 테스트 해봐야겠네요.. ^^;;

도움을 주셔서 감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.