Получение промежуточного вывода спула

Я использую oracle 11g, и у меня есть файл sql с включенной буферизацией, который работает не менее 7+ часов, так как ему приходится буферизовать огромные данные. Но вывод спула сбрасывается только тогда, когда весь sql завершен, но я хотел бы знать, есть ли какой-либо другой способ узнать ход моего sql или данные, буферизованные до этого момента времени, так что я уверен, что мой sql работает правильно, как и ожидалось. Пожалуйста, помогите с вашими входными данными.


person SPK    schedule 16.02.2013    source источник
comment
вы пытались распаковать в файл? SPOOL файл.out   -  person Sebas    schedule 16.02.2013
comment
Да, я пробовал буферизовать только в файл, например «spool spk.log».   -  person SPK    schedule 16.02.2013
comment
Вы делаете это через pl/sql?   -  person Plouf    schedule 16.02.2013
comment
Используйте таблицу журнала. См. stackoverflow.com/questions/4919437/dbms-output-put-line.   -  person tbone    schedule 16.02.2013


Ответы (1)


Похоже, вы используете DBMS_OUTPUT, который всегда начинает фактически выводить результаты только после завершения процедуры.

Если вы хотите отслеживать прогресс в режиме реального времени, у вас есть 3 варианта:

  1. Используйте utl_file для записи в файл ОС. Для этого вам потребуется доступ к файловой системе операционной системы db server.

  2. Запишите в таблицу и используйте PRAGMA AUTONOMOUS_TRANSACTION, чтобы вы могли зафиксировать записи в таблице журнала, не влияя на вашу основную обработку. Это легко реализовать и легкодоступно. При правильной реализации это может стать стандартом де-факто для всех ваших процедур. Затем вам может понадобиться реализовать какой-то домашний уход, чтобы он не стал слишком большим и громоздким.

  3. Быстрый и грязный вариант, который является временным, состоит в том, чтобы использовать DBMS_APPLICATION.SET_CLIENT_INFO, а затем запросить v$session.client_info. Это хорошо работает, хорошо подходит для отслеживания вещей, довольно ненавязчиво и, поскольку это структура памяти, работает быстро.

DBMS_OUTPUT действительно ограничен.

person TenG    schedule 16.02.2013
comment
Большое спасибо, TenG, да, это PL/SQL, и я использую DBMS_OUTPUT (извините, что не упомянул об этом в первую очередь). надеюсь, это должно помочь. Спасибо еще раз. - person SPK; 16.02.2013