Когда я называю PreparedStatement.cancel () в приложении JDBC, он на самом деле уничтожает его в базе данных Oracle?

Большое спасибо! Я понял. Я очень новичок в AWS, так что это очень помогает. Я создал новый рекорд для 21fighterpilots.com, и теперь он работает.

7
задан Evan 17 March 2009 в 21:45
поделиться

3 ответа

Ответ - то, что это - проблема качества реализации. При рассмотрении javadoc для Statement.cancel (), он говорит, что это произойдет "если и DBMS и поддержка драйвера, прерывающая SQL-оператор".

По моему опыту, с различными версиями Oracle драйверы JDBC, Statement.cancel (), кажется, делает то, что Вы хотели бы. Запрос, кажется, прекращает выполняться быстро при отмене.

8
ответ дан 6 December 2019 в 10:03
поделиться

Обратите внимание на то, что то, что я говорю ниже, основано на наблюдениях и выводах используемой Oracle, и не основано ни на каком глубоком понимании внутренностей Oracle. Ни один из него нельзя считать авторитетным.

Какой ninesided, сказанный в их первом абзаце, корректен. Однако остерегайтесь предложенного теста. Не все продолжительные запросы оракула являются тем же. Кажется, что запросы оценены более чем две фазы, сначала фаза, которая комбинирует достаточные данные, чтобы знать, как возвратить строки в правильном порядке, и второй фаза, которая возвращает строки, заполняющие разрывы, которые это не вычислило в первой фазе. Подразделение работы между этими двумя фазами также затронуто настройками оптимизатора на основе издержек. например, Первые строки по сравнению со все-строками.

Теперь, если запрос находится в фазе 1, запрос отмены, кажется, в лучшем случае стоится в очереди, чтобы быть примененным в конце фазы 1, что означает, что запрос продолжает работать.

В фазе 2 строки возвращаются в наборах, и после того, как каждый набор, команда отмены может вступить в силу, таким образом предположив, что драйвер поддерживает команду, запрос отмены приведет к уничтожаемому запросу.

Спецификация для команды отмены JDBC, кажется, не говорит, что должно произойти, если запрос не прекращает работать, и поэтому команда может ожидать подтверждения уничтожения, или может тайм-аут и возвращаться с запросом, все еще работающим.

10
ответ дан 6 December 2019 в 10:03
поделиться

Это зависит от драйвера, который Вы используете, и драйвер и база данных должны поддерживать отмену оператора для него для работы, как Вы хотите. Oracle действительно поддерживает эту функцию, но необходимо было бы знать больше об определенном драйвере, который Вы используете для знания наверняка.

С другой стороны, Вы могли запустить простой тест путем рассмотрения базы данных после инициирования и отмены длительного запроса.

1
ответ дан 6 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: