|
Программирование >> Oracle
Пакет DBMS APPLICATION INFO 1581 10 11 12 13 15 16 17 18 (rindex => l rindex, slno => l slno, op name => my long running operation, target => 123 4, target desc => 1234 is my target, => 0, context sofar => totalwork units ); end loop; => 25, => loops end; Этот блок кода представляет собой продолжительное действие, выполняющееся в течение 50 секунд (вызов DBMS LOCK.SLEEP просто приостанавливает выполнение на две секунды). В другом сеансе можно следить за ходом данного сеанса с помощью представленного ниже запроса (описание использованной в нем утилиты PRINT TABLE см. в главе 23): tkyte@TK:E816> begin 2 print table(select b.* 3 from v$session a, v$session longops b
: 1234 is my loops done 1582 Приложение А OPNAME TARGET TARGET DESC SOFAR TOTALWORK UNITS START TIME LAST UPDATE TIME TIME REMAINING ELAPSED SECONDS CONTEXT MESSAGE USERNAME SQL ADDRESS SQL HASH VALUE QCSID : my long running operation : 1234 : 1234 is my target : 25 : loops : 28-apr-2001 16:02:46 : 28-apr-2001 16:02:55 : 29 : my long running operation: 1234 is my target 1234: 6 out of 25 loops done : TKYTE : 036C3758 : 1723303299 PL/SQL procedure successfully completed. ops$tkyte@ORA8I.WORLD> / SID : SERIAL# : OPNAME : TARGET : TARGET DESC : SOFAR : TOTALWORK : UNITS : START TIME : LAST UPDATE TIME : TIME REMAINING : ELAPSED SECONDS : CONTEXT : MESSAGE : USERNAME SQL ADDRESS SQL HASH VALUE QCSID my long running operation 1234 1234 is my target loops 28-apr-2001 16:02:46 28-apr-2001 16:03:04 27 18 my long running operation: 1234 is my target 1234: 10 out of 25 loops done TKYTE 036C3758 1723303299 0 PL/SQL procedure successfully completed. Может возникнуть вопрос: зачем представление V$SESSION LONGOPS соединяется с представлением V$SESSION, если из V$SESSION не выбирается информация? Дело в том, что представление V$SESSION LONGOPS содержит строки как для текущего, так и для прежних сеансов. По завершении сеанса это представление не очищается. Данные остаются, пока какой-нибудь другой сеанс не использует повторно соответствующий слот. Поэтому, чтобы получить информацию только текущих сеансов, необходимо использовать соединение или подзапрос. Пакет DBMS APPLICATION INFO 1583 Этот достаточно простой пример демонстрирует, что из представления V$SESSION LONGOPS можно получить информацию, весьма ценную для пользователей и администраторов базы данных, которым необходимо контролировать ход выполнения продолжительных хранимых процедур, пакетных заданий, отчетов и т.п. Добавив лишь несколько вызовов, можно получить точную информацию в производственной среде. Вместо того чтобы гадать, что именно происходит в задании и сколько оно будет выполняться, можно получить точную информацию о том, что сделано, и обоснованную оценку времени, необходимого для завершения работы. Резюме В этом разделе мы рассмотрели пакет DBMS APPLICATION INFO, о котором мало кто знает и использует его. Пакет можно и нужно использовать в любом приложении для регистрации в базе данных, что позволит администратору базы данных или пользователю, отвечающему за сервер, определить, какие приложения с ним работают. Очень важно использовать представление V$SESSION LONGOPS в приложениях, выполняющихся дольше нескольких секунд. Только это позволит показать, что процесс не висит , а выполняет необходимые действия. Oracle Enterprise Manager (OEM) и многие инструментальные средства независимых производителей обращаются к этому представлению и автоматически отображают информацию, которую приложения в нем устанавливают.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |