Программирование >>  Oracle 

1 ... 186 187 188 [ 189 ] 190 191 192 ... 469


Глава 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;



1 ... 186 187 188 [ 189 ] 190 191 192 ... 469

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика