|
Программирование >> Oracle
Глава 10 ops$tkyte@ORA8I.WORLD> select * from v$open cursor 2 where sid = (select sid from v$mystat where rownum SADDR SID USER NIE ADDRESS HASH VALUE SQL TEXT 8C1706A0 92 OPS$TK 8AD80D18 607327990 1) ; 8C1706A0 92 OPS$TKYTE 8AD6BB54 130268528 8C1706A0 92 OPS$TKYTE 8AD8EDB4 230633120 8C1706A0 92 OPS$TKYTE 8AD7DEC0 1592329314 8C1706A0 92 OPS$TKYTE 8E16AC30 3347301380 8C1706A0 92 OPS$TKYTE 8AD7AD70 1280991272 8C1706A0 92 OPS$TKYTE 8AD62080 1585371720 8C1706A0 92 OPS$TKYTE 8AD816B8 3441224864 8C1706A0 92 OPS$TKYTE 8ADF4D3C 1948987396 8C1706A0 92 OPS$TKYTE 89D30A18 2728523820 8C1706A0 92 OPSSTK 8865AB90 3507933882 8C1706AO 92 OPSSTK 8AD637B0 242587281 8C1706A0 92 OPS$TKYTE 8AD70660 3759542639 BEGIN DBMS OUTPUT.DISABLE; END; select lower(user) @ decode(global name, ORACLE8.WO select round(100 * (1-max(decode(name,parse count (hard SELECT ATTRIBUTE,SCOPE,NUMERIC VALUE, CHAR VALUE,DATE VALUE F select round( 100 * (1-max(decode(name,parse count (hard), SELECT CHAR VALUE FROM SYSTEM. PRODHCT PRIVS WHERE (UPPER( BEGIN DBMS OUTPUT.ENABLE(10 0 0 0 0 0); END; SELECT USER FROM DUAL SELECT DECODE(A,A,1,2) FROM DUAL select round(100 * (1-max(decode(name,parse count (hard select * from v$open cursor where sid = ( select sid from v$ commit BEGIN DBMS APPLICATION INFO. SET MODU LE(:1,NULL); END; 13 rows selected. Как видите, есть некоторое количество открытых курсоров. Однако: ops$tkyte@ORA8I.WORLD> select * from my stats where name = opened cursors current; NAME opened cursors current VALUE 1 Стратегии и средства настройки 599 На самом деле открыт один курсор (причем это именно тот курсор, с помощью которого выбирается информация об открытых курсорах). Сервер Oracle держит другие курсоры в кэше на случай повторного выполнения запросов. Представление V$PARAMETER Представление V$PARAMETER помогает получить значения различных установок, связанных с настройкой, например размер блока, размер области сортировки и т.д. Они имеют отношение к настройке, поскольку многие из этих параметров инициализации непосредственно влияют на производительность. Представление V$SESSION Представление V$SESSION содержит строку для каждого сеанса. Как и в случае рассмотренного ранее представления V$STATNAME, для использования этого представления администратор базы данных должен предоставить вам соответствующие привилегии: sys@TKYTE816> grant select on v $session to tkyte; Grant succeeded. Чтобы найти строку для текущего сеанса, можно выполнить следующий запрос: ops$tkyte@ORA8I.WORLD> select * from v$session 2 where sid = (select aid from v$mystat where rownum = 1) Я обычно использую это представление, чтобы понять, что же еще происходит в базе данных. Например, я часто использую сценарий showsql, показывающий мне список сеансов с информацией о состоянии сеанса (активен или нет), выполняемом модуле, действии и параметрах client info, и, наконец, о выполняемом SQL-операторе для активных сеансов. Поля MODULE, ACTION и CLIENT INFO может устанавливать разработчик приложений с помощью вызовов соответствующих процедур пакета DBMS APPLICATION INFO (подробное описание этого пакета представлено в Приложении А). Я рекомендую устанавливать эти поля в каждом создаваемом приложении. Это может сэкономить много времени при попытках определить, какое приложение выполняется в том или ином сеансе (если эта информация есть в представлении V$, ответ очевиден). Мой сценарий showsql имеет вид: column username format a15 word wrapped column module format a15 word wrapped column action format a15 word wrapped column client info format a15 word wrapped column status format a10 column sid serial format al5 set feedback off set serveroutput on Глава 10 select username, sid ,serial# sid serial, status , modu action, client info from v$session where username is not null column username format a20 column sql text format a55 word wrapped set serveroutput on size 1000000 declare x number; procedure p (p str in varchar2) is l str long := p str; begin loop exit when l str is null; dbms output.put line(substr(l str, 1, 250)); l str := substr(l str, 251) ; end loop; end; begin for x in (select username(sid, serial# ) ospid = process program = program username, to char(LOGON TIME, Day HH24:MI) logon time, to char(sysdate, Day HH24:MI) current time, sql address, LAST CALL ET from v$session where status = ACTIVE and rawtohex(sql address) <> 00 and username is not null order by last call et) loop dbms output.put line(-) ; dbms output.put line(x.username ) ; dbms output.put line(x.logon time x.current time last at = x.IAST CALL ET); for у in (select sql text from v$sqltext with newlines where address = x.sql address order by piece) loop p (y.sql text) ; end loop ; end loop ; end;
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |