2009-05-05 8 views
1

데이터베이스를 조회하는 쿼리 편집기 (Toad)가 있습니다.다른 Oracle 세션을 들여다 볼 수있는 방법이 있습니까?

동시에, 별도의 연결로 응용 프로그램을 디버깅하고 있습니다.

내 응용 프로그램은 트랜잭션을 시작하고 일부 업데이트를 수행 한 다음 일부 SELECT 문을 기반으로 결정합니다. 업데이트 문 (많은 복잡한)은 아직 커밋되지 않았으므로 내 애플리케이션이 SELECT에서 가져온 결과는 Toad에서 동일한 문을 실행하면 얻는 결과와 다릅니다.

현재이 문제는 응용 프로그램의 쿼리 출력을 텍스트 파일로 덤핑하고 읽음으로써 해결됩니다.

다른 oracle 세션을 들여다 볼 수있는 더 좋은 방법이 있습니까? 커밋이 완료되기 전에 세션에서 무엇을 볼 수 있습니까?

또 다른 방법은 다음과 같습니다. 오라클에서 다른 사람의 세션에 영향을주지 않고 두 세션 사이에서 dirty reads을 활성화 할 수 있습니까?

답변

0

변경 세션 명령이나 로그온 트리거 (필자가 직접 시도하지 않은)로 '읽기 미완료'로 전환하려는 세션의 격리 수준을 임시로 설정할 수 있습니까? 내가 (일반적으로) 할 것을 선호 무엇

영구적으로 남아 코드의 장소 디버그 문이지만, 생산 꺼져 - http://asktom.oracle.com/tkyte/debugf

+0

오라클에는 읽기 전용 커밋 해제 수준이 없습니다. http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/consist.htm#CNCPT1326 –

+0

죄송합니다, 정확합니다! 필자는 설명서의 잘못된 부분을 잘못 읽었으며 커밋되지 않은 읽기가 존재한다고 생각했지만 그렇지 않았습니다. –

2

- 톰 카이트의 debug.f 패키지를 시작하는 유용한 장소입니다 아닙니다. 오라클은 더티 읽기를 허용하지 않습니다. 또한 변경 내용이 물리적으로 디스크에 기록되지 않았으므로 데이터 파일에서 변경 내용을 찾을 수 없습니다. 로그 작성자는 최소 3 초마다 보류중인 데이터 변경 사항을 기록하므로 Log Miner 항목을 사용하여 해당 항목을 선택할 수 있습니다.

일반적으로 가장 좋은 방법은 필요에 따라 쉽게 켜고 끌 수있는 자신의 디버깅 정보를 포함하는 것입니다.

1

그것은 내가 아는 완전한 대답은 아니지만, 죽은 읽기는 없지만 진행 상황을 알려주는 잠금 장치가 있습니다.

세션 1에서 기본 키 7이있는 행을 삽입하면 세션 2에서 선택할 때 표시되지 않습니다 (더티 읽기).

그러나 기본 키 7을 사용하여 세션 2에서 삽입을 시도하면 세션 1이 커밋되거나 롤백 될지를 기다려야하므로 세션 1 뒤에 차단됩니다. "WAIT 10"을 사용하면 10 초 동안 기다릴 수 있습니다.

고유 한 제약 조건 위반을 유발하는 업데이트 또는 비슷한 내용이 있습니다.