Q&A

  • 오라클 질문입니다..
클라이언트에서 서버에 select문을 날린 결과가 1000건이라면,
한번에 이 1000건을 모두 클라이언트에 받아서 프로그램에서
처리하는 건 아닌걸로 알고 있습니다.
한번에 처리할 만큼(BDE에서 rowset size에서 지정할 수 있는 것으로 압니다. 디폴트는 20이네여) 로컬에다 불러 저장(메모리상인가?)해 놓고
프로그램에서 한건씩 읽어 참조하는 거 맞죠? ^^

우선 이 내용이 맞다는 가정하에,
틀렸으면 최소한 비슷하다는 전제하에 질문을 드립니다.

만약에 위와 같은 상황에서,
클라이언트(A)가 지금 현재 처리하고 있는,
그러니까 자기 메모리상에 불러다 놓은(20건이라 하면)
데이타를 참조하고 있는 사이에,
다른 클라이언트(B)에서 1000건 - 20건 =980건에 대해
seletc, delete, update하는 것이 가능한지여?

가능하다면 어떤 순서로 처리가 되는지여?
A가 전부 끝난 다음에 B에서 날린 select문이 실행되나여?
아님, A의 20건처리, B의 select이나 delete문 update문처리, 다시 A의 980건 처리(이때 980건에는 B의 sql문이 실행된 상태입니까?)의 순인가여?
아니라면....

좋은 도움말씀 가르쳐 주세요

1  COMMENTS
  • Profile
    너구리 2004.05.10 22:32
    제생각엔 작업요청이 들어오는 순서 대로 일겁니다.

    그리고 레코드나 테이블에 락을 걸지 않은 이상

    셀렉트를 한다고 다른 세션에서 사용하지 못하는건 아니구요..

    오라클의 입장에서 보면 무조건 하나씩 실행한다고 보는게 맞겠네요.

    A의 요청에 의해 오라클이 업데이트 하는중에
    B가 지우는 일은 없을거 같습니다.

    클라이언트가 데이타를 셀렉트 해와도 오라클안에 있는 레코드를

    잡고 있는게 아니라 데이타셋에 가지고 와서 그값을 참조 하는 것인것 같습니다.

    이런 상황이라면 모든 클라이언트에서는 어느 시점에서 select, update, delete만을 요청하게 되는것 같은데요..

    클라이언트는 오라클에 해당작업을 요청할뿐 직접 레코드를
    참조하는건 아닐거 같습니다.

    저도 그냥 코딩하면서 생긴 느낌일뿐 정확한 정보는 아닙니다.