해외 사이트를 통해서 해답을 찾았습니다.
B 에서 A 가 작업 후 commit 한 내용을 확인할 수 없었던 이유는 A 에서 commit 하기전에 B 에서 수행한 DML (select) 로 B 에서 Transaction 이 시작 되었고 Transaction 이 시작하면서 RDBMS 의 ACID 특성중 Isolation 으로 데이터베이스는 Transaction이 시작한 시점의 상태를 유지해서 그렇다는군요. 따라서 B 의 Transaction 이 끝나는 commit 후 시점에서 A 의 작업 내용을 확인할 수 있었던 것입니다.
좀 더 내공을 쌓아야겠습니다.
(그런데 포럼은 아직도 chrome 에서 정상 동작을 하지 않네요. 답변이나 수정등 게시물을 볼 때 보여지는 페이지에서의 링크를 선택하면 오류메세지가 나오네요. 답변이나 수정을 하려면 매번 인터넷 익스플로러를 실행해야 하네요. 빨리 고쳐졌으면 좋겠습니다.)
안명호.ASURADA 님이 쓰신 글 :
: 하나의 데이터 베이스에 두개의 isql 인스턴스로 접속한 상태에서 테스트를 하였습니다.
:
: isql 인스턴스(A, B) 가 하나의 데이터베이스(test.fdb) 에서 작업을한 내용 입니다.
:
: A isql 에서 테이블을 생성하였습니다.
:
: B isql 에서 SHOW SCHEMA 명령으로 확인해 보니 테이블 구조가 확인 되었습니다. (당연히 A isql 에서 DDL 을 사용하였기에 auto commit 이 되어 그런 것으로 이해가 됩니다.)
:
: A isql 에서 만들어진 Table 에 1개의 레코드를 삽입하였습니다.
:
: B isql 에서 확인해 보니 레코드가 하나도 없었습니다. ( A isql 에서 레코드 삽입 후 commit 을 하지 않았기 때문에 그런 것으로 이해하였습니다.)
:
: A isql 에서 commit 명령을 내렸습니다.
:
: B isql 에서 레코드를 확인해 보았더나 하나도 없습니다. (이상합니다. 분명히 A isql 에서 작업을 하고 commit 을 했습니다.)
:
: B isql 을 종료(quit) 후 다시 실행하여 데이터베이스에 연결 후 확인해 보니 추가된 한개의 레코드가 확인 되었습니다.
:
: A isql 에서 다시 레코드 하나를 더 추가 하였습니다. 그리고 곧바로 commit; 명령을 수행하였습니다.
:
: B isql 에서 테이블을 확인해 보니 레코드가 하나밖에 없습니다. 바로 직전에 A isql 에서 추가한 레코드가 보이지 않습니다. 왜 그런거죠? (정말 이해가 되지 않습니다.
:
: B isql 에서 commit 명령을 수행 후 레코드 수를 확인해 보니 추가된 레코드까지 2개의 레코드가 확인 되었습니다.
:
: 왜? A isql 에서 작업한 내용이 commit 을 했음에도 불구하고 B isql 에서 확인이 되지 않는 것인가요?
: 왜? 아무 것도 하지 않은 B isql 에서 commit 명령을 내려야 A isql 에서 작업한 내용이 반영되는 것 일까요?
:
: 제가 firebird 구조를 잘 몰라서 그러는건지 이 상황이 이해가 되지 않습니다. 이 상황에 대한 설명을 부탁 드립니다.
|