2009-05-13 2 views
0

Oracle 쿼리 및 PL/SQL 프로 시저 (트리거, 제약 ...)의 정적 분석기를 찾고 있는데, 이는 DB 스키마를 통과하고 잠재적 인 교착 상태를 가리킬 도구입니다. Java 용 FindBugs과 같습니다.오라클 교착 상태 감지 도구

이러한 도구가 없다면 갖고 싶습니까?

답변

1

TOAD 일부 정적 분석 (또는 적어도 코드 종류의 코드 품질) 도구가 있습니다. 나는 그들이 죽은 자물쇠를 발견 할 수있을 것이라는 점을 의심한다.

ALTER SESSION SET PLSQL_WARNINGS = 'ENABLE:ALL'; 

이 PLSQL_WARNINGS에 대한 구글이 있고 유용한 참조에게 내가 마태 복음에 동의

을 확인할 수있는 것들 : 이후 10g의에서

2

, 데이터베이스는 지금에 내장 된 정적 PL/SQL 분석기를 가지고 그러나 교착 상태를 특히 효과적으로 감지 할 수있는 분석기를 찾을 수는 없을 것입니다 ... 너무 많은 변수가 있습니다.

-2

모든 데이터베이스에서 교착 상태가 발생할 가능성은 무한합니다. 따라서이 도구는 통계적으로 매년 두 번 이상 발생할 교착 상태를 파악하기 위해 사용 통계가 필요합니다. 이러한 도구는 개발 작업을 정당화하기에는 너무 복잡합니다.

가장 일반적인 방법은 Q & A 또는 프로덕션 환경에 데이터베이스를 설치하는 것입니다. 그런 다음 실제로 발생하는 교착 상태를 모니터링합니다. Q & A 환경에 대한 자동화 된 단위 테스트를 실행하여로드를 시뮬레이션 할 수 있습니다.

+0

저는 Coverity/Klocwork/FindBugs와 같은 도구가 교착 상태 (물론 모든 것은 아니지만 오탐보다는 아무것도 아닌 것)를 찾기 위해 C++/Java 코드에서 얼마나 성공했는지 궁금합니다 (실행 경로 수가 두 주문에 의해 더 큼) ... –

+0

사용 현황 데이터가 없으면 데이터베이스에서 실행되는 쿼리를 알 수있는 방법이 없습니다. 자신을 저장 프로 시저로 제한하면 사용 데이터없이 호출 된 순서를 알 수 없습니다. 이것은 C++ 또는 Java 프로그램과는 다른데, 프로그램이 어떻게 실행될 지에 대한 더 많은 정보가 있습니다. – Andomar

1

교착 상태는 정적 코드가 아닌 트랜잭션에 따라 달라집니다. 오라클에는 'BEGIN TRANSACTION'문에 대한 개념이 없으므로 정적 분석기는 트랜잭션의 시작점을 알 수있는 방법이 없습니다. 가설 적으로 분석기는 시작 SQL 또는 PL/SQL 문이 제공된 경우 모든 잠재적 실행 경로를 추적하고 업데이트/삭제/삽입/병합 문을 처리 할 테이블을 어떤 순서로 결정할 수 있도록 작성 될 수 있습니다. 그런 다음 두 가지 (또는 그 이상) 결과를 비교하고 테이블 순서가 다른 경우 (예 : TAB_A, TAB_B, TAB_B, 다른 TAB_B)를 결정할 수 있습니다. 많은 위양성을 유발할 수 있다고 생각합니다.

Oracle에서는 잠그지 않음 (SELECT ... FOR UPDATE 제외)을 선택하십시오. 따라서 교착 상태는 데이터 업데이트시에만 발생하며 두 개의 동시 트랜잭션이 동일한 행을 업데이트하려고하는 경우에만 발생합니다.

+0

첫 번째 삽입/업데이트/삭제시 트랜잭션이 시작되므로 추적하기 쉽습니다. 나는 단지 Coverity/Klocwork/FindBugs와 같은 도구가 교착 상태 (물론 모든 것은 아니지만 오탐보다)가 얼마나 많은지 C/Java/Java 코드에서 두 가지 명령으로 더 많은 실행 경로가있는 경우 어떻게 성공하는지 궁금합니다. –