편집 / 서문 : DB 링크 쿼리의 시간 초과에 대한 질문에 특히 관심이 있기 때문에이 질문은 SO에서 마이그레이션되었습니다. SO의 제공된 해결 방법은 다소 괜찮지 만 질문 자체에 실제로 관심이 있습니다.
동기 부여 :
데이터베이스 링크를 사용하는 "영구"(세션을 종료 할 때까지 2 일 이상)를 실행하는 쿼리가 하나 있습니다. 문제는 원격 데이터베이스를 사용할 수 없게되었지만 아직 알려지지 않은 이유로 인해 아무 ORA-02068
것도 제기되지 않았으며 (여기에서 논의되지 않음) 쿼리가 대기 및 대기 한 것 같습니다.
(쿼리는 PL / SQL 패키지에서 프로 시저를 실행하는 dbms_scheduler 작업에 의해 발행됩니다. 결과적으로 작업도 중단되었습니다. 그러나이 질문의 핵심에는 특별한 관심이 없습니다)
테스트 DB 중 하나를 Quiesce 모드로 설정하고 데이터베이스 링크를 통해 쿼리하여이 상황을 시뮬레이션했습니다. 예상 한대로 쿼리는 수동으로 취소되거나 원격 DB가 중지되지 않을 때까지 대기했습니다.
질문 :
원격 데이터베이스의 동작과 가동 시간을 제어 할 수 없으므로 데이터베이스 링크를 사용하는 쿼리에서 시간 초과를 설정할 가능성이 있습니다.
이미 프로파일 ( CPU_PER_CALL
etc), sqlnet.ora
매개 변수, 로컬 명명 매개 변수를 연결 문자열에 직접 추가 (예 : (connect_timeout=10)
데이터베이스 링크 정의에 추가) 를 사용하여 명령을 실행 ... for update wait 1
했지만 사용 중이거나 유휴 세션에서는 작동하지만 대기중인 세션.
그래서 데이터베이스 링크의 "로컬"쪽에서 데이터베이스 링크에 대한 쿼리 시간 초과를 설정하는 옵션을 찾고 있습니다.
같은 일부 솔루션 alter session set xyz
또는 select ... from a@b "wait 100" --(yes, I know this syntax doesn't exist)
내가이 특정 데시벨에는 DBA 권한이 없기 때문에, 감상 할 수있다.
현재 10gR2에 있지만 몇 주 안에 11gR2로 업그레이드하므로 이러한 버전에 대한 아이디어가 유용합니다.