복붙노트

[SQL] 나는 JDBC 응용 프로그램에서 PreparedStatement.cancel ()를 호출 할 때, 실제로 오라클 데이터베이스에 죽일 수 있습니까?

SQL

나는 JDBC 응용 프로그램에서 PreparedStatement.cancel ()를 호출 할 때, 실제로 오라클 데이터베이스에 죽일 수 있습니까?

나는 오라클 10g 데이터베이스에 대해 자바 JDBC의 응용 프로그램을 실행합니다. 나는 쿼리를 실행 한 다음 ()를 실행 ps.executeQuery를 호출 해, PreparedStatement를 설정합니다. 때때로 쿼리 시간이 오래 걸리고, 나는 그것을 죽일해야합니다. 나는 PreparedStatement 오브젝트가 다른 스레드에 액세스 할 수 있으며 ()를 취소 호출합니다.

내 질문이 실제로 데이터베이스에 쿼리를 죽일 않습니다입니까? 아니면 그냥 클라이언트에서 그것을 끊어 않으며, 쿼리는 여전히 오라클의 창자에서 어딘가를 실행?

감사!

해결법

  1. ==============================

    1.대답은 그것의 질 구현 문제라는 것이다. 당신이 Statement.cancel ()에 대한 javadoc에 보면, 그것은 "DBMS 및 드라이버의 양쪽 모두가 SQL 문을 중단하면"그것이 일어날 것이다 말한다.

    대답은 그것의 질 구현 문제라는 것이다. 당신이 Statement.cancel ()에 대한 javadoc에 보면, 그것은 "DBMS 및 드라이버의 양쪽 모두가 SQL 문을 중단하면"그것이 일어날 것이다 말한다.

    오라클 JDBC 드라이버의 다양한 버전과 내 경험에 의하면, Statement.cancel ()는 당신이 원하는 것 무엇을 할 것으로 보인다. 쿼리가 취소 될 때 즉시 실행을 중지하는 것 같다.

  2. ==============================

    2.내가 아래라고하는 것은 사용의 관찰과 오라클의 추론을 기반으로, 오라클의 내부의 깊은 이해를 바탕으로되지 않도록 유의하시기 바랍니다. 그것의 아무도는 권위로 간주 될 수 없습니다.

    내가 아래라고하는 것은 사용의 관찰과 오라클의 추론을 기반으로, 오라클의 내부의 깊은 이해를 바탕으로되지 않도록 유의하시기 바랍니다. 그것의 아무도는 권위로 간주 될 수 없습니다.

    무엇이 그들의 첫 번째 단락에서 말했다 ninesided 것은 맞습니다. 그러나 제안 된 테스트를 조심. 모든 장기 실행 오라클 쿼리는 동일합니다. 이 쿼리가 이상 2 단계, 충분한 데이터를 백업 콤바인가 올바른 순서로 행을 반환하는 방법을 알 수있는 첫 번째 위상 및 행 간격을 채워 리턴는에서 계산하지 않았다 것을 두 번째 위상을 평가하는 것 같다 첫 번째 단계. 두 단계 사이에 작품의 부문은 비용 기반 최적화 프로그램의 설정에 의해 영향을 받는다. 예를 들면 모든-행 대 최초의 행.

    쿼리가 1 단계에있는 경우 지금의 요청이 최고의 질의 운영을 계속 수단 1 단계의 끝에서 적용 할 대기열 것으로 보인다 취소 할 수 있습니다.

    요청 쿼리가 살해 당할 것이다 취소, 2 단계에서 행 움큼에 반환하고, 드라이버를 가정하면 명령을 지원하므로 각 무리 후에는 명령을 적용 할 수 있습니다 취소 할 수 있습니다.

    는 JDBC에 대한 사양은 명령은 쿼리가 실행을 중지하지 않기 때문에 명령이 킬 (kill)의 확인을 기다릴 수 또는 시간 제한 및 쿼리가 계속 실행에 반환 할 수 있습니다 경우 어떻게해야 무슨 말을하지 않는 것 취소합니다.

  3. ==============================

    3.그것은 당신이 사용중인 드라이버의 드라이버와 당신이 원하는 일에 순서대로 성명의 취소를 지원하는 데이터베이스 필요를 모두 따라 달라집니다. 오라클은이 기능을 지원하지 않습니다,하지만 당신은 더 확실히 알고 사용하는 특정 드라이버에 대해 알아야 할 것입니다.

    그것은 당신이 사용중인 드라이버의 드라이버와 당신이 원하는 일에 순서대로 성명의 취소를 지원하는 데이터베이스 필요를 모두 따라 달라집니다. 오라클은이 기능을 지원하지 않습니다,하지만 당신은 더 확실히 알고 사용하는 특정 드라이버에 대해 알아야 할 것입니다.

    다른 방법으로는 시작과 장기 실행 쿼리를 취소 한 후 데이터베이스를보고 간단한 테스트를 실행할 수 있습니다.

  4. from https://stackoverflow.com/questions/656162/when-i-call-preparedstatement-cancel-in-a-jdbc-application-does-it-actually-k by cc-by-sa and MIT license