Я использую oracle 11g, и у меня есть файл sql с включенной буферизацией, который работает не менее 7+ часов, так как ему приходится буферизовать огромные данные. Но вывод спула сбрасывается только тогда, когда весь sql завершен, но я хотел бы знать, есть ли какой-либо другой способ узнать ход моего sql или данные, буферизованные до этого момента времени, так что я уверен, что мой sql работает правильно, как и ожидалось. Пожалуйста, помогите с вашими входными данными.
Получение промежуточного вывода спула
Ответы (1)
Похоже, вы используете DBMS_OUTPUT
, который всегда начинает фактически выводить результаты только после завершения процедуры.
Если вы хотите отслеживать прогресс в режиме реального времени, у вас есть 3 варианта:
Используйте
utl_file
для записи в файл ОС. Для этого вам потребуется доступ к файловой системе операционной системы db server.Запишите в таблицу и используйте
PRAGMA AUTONOMOUS_TRANSACTION
, чтобы вы могли зафиксировать записи в таблице журнала, не влияя на вашу основную обработку. Это легко реализовать и легкодоступно. При правильной реализации это может стать стандартом де-факто для всех ваших процедур. Затем вам может понадобиться реализовать какой-то домашний уход, чтобы он не стал слишком большим и громоздким.Быстрый и грязный вариант, который является временным, состоит в том, чтобы использовать
DBMS_APPLICATION.SET_CLIENT_INFO
, а затем запроситьv$session.client_info
. Это хорошо работает, хорошо подходит для отслеживания вещей, довольно ненавязчиво и, поскольку это структура памяти, работает быстро.
DBMS_OUTPUT
действительно ограничен.