Страница 1 из 1
tracing oracle sql statements
Добавлено: 06 сен 2006, 16:35
Gaziz
Hia!
Here is difficult oracle question. The environment is pretty simple: unknown application with oci oracle client and oracle 9i server.
I need to see in clear text *exact* *all* SQL command that apps sends to DB and all responces (as much as possible in clear text).
What is the simpliest solution?
Gaziz
Re: tracing oracle sql statements
Добавлено: 06 сен 2006, 18:18
(Alex)
Gaziz писал(а):Hia!
Here is difficult oracle question. The environment is pretty simple: unknown application with oci oracle client and oracle 9i server.
I need to see in clear text *exact* *all* SQL command that apps sends to DB and all responces (as much as possible in clear text).
What is the simpliest solution?
Gaziz
если без наворотов то можно сделать с tkprof. Эта утилита которая с ораклом поставляется.
тут все ключевые слова есть:
http://www.psoug.org/reference/trace_tkprof.html
Re: tracing oracle sql statements
Добавлено: 06 сен 2006, 18:54
Gaziz
(Alex) писал(а):Gaziz писал(а):Hia!
Here is difficult oracle question. The environment is pretty simple: unknown application with oci oracle client and oracle 9i server.
I need to see in clear text *exact* *all* SQL command that apps sends to DB and all responces (as much as possible in clear text).
What is the simpliest solution?
Gaziz
если без наворотов то можно сделать с tkprof. Эта утилита которая с ораклом поставляется.
тут все ключевые слова есть:
http://www.psoug.org/reference/trace_tkprof.html
damn! I have oracle 9i

Re: tracing oracle sql statements
Добавлено: 06 сен 2006, 19:16
(Alex)
Gaziz писал(а):(Alex) писал(а):Gaziz писал(а):Hia!
Here is difficult oracle question. The environment is pretty simple: unknown application with oci oracle client and oracle 9i server.
I need to see in clear text *exact* *all* SQL command that apps sends to DB and all responces (as much as possible in clear text).
What is the simpliest solution?
Gaziz
если без наворотов то можно сделать с tkprof. Эта утилита которая с ораклом поставляется.
тут все ключевые слова есть:
http://www.psoug.org/reference/trace_tkprof.html
damn! I have oracle 9i

а эта утилита есть в 9i, 8, 8i, 7.3

etc.
Добавлено: 07 сен 2006, 22:49
bormo
С 6 по 10

Раньше может тоже была, не знаю.
Добавлено: 09 сен 2006, 02:24
Gaziz
bormo писал(а):С 6 по 10

Раньше может тоже была, не знаю.
Thanks, there is some progress with this. Ideally I want to see the real values of variables b1 and b2. I tries level 4 and 12 but nothing helps
=====================
PARSING IN CURSOR #22 len=144 dep=1 uid=61 oct=3 lid=61 tim=2618144194233 hv=2112349310 ad='22e97acc'
SELECT GROUP_ID
FROM HOME_ASSOCIATION
WHERE APC_NEIGHBOURHOOD_ID = :b2
AND APC_GROUP_ID != :b1
END OF STMT
PARSE #22:c=0,e=98,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=2618144194219
EXEC #22:c=0,e=74,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=2618144194759
FETCH #22:c=0,e=53,p=0,cr=1,cu=0,mis=0,r=1,dep=1,og=4,tim=2618144194971
Добавлено: 09 сен 2006, 10:41
bormo
Какое-то время нереальное, сколько записей в таблице? Какой сервер (кол-во процессоров), какая система и версия оракула?
Желательно еще структуру таблицы со всеми индексами.
Добавлено: 09 сен 2006, 22:57
Gaziz
bormo писал(а):Какое-то время нереальное, сколько записей в таблице? Какой сервер (кол-во процессоров), какая система и версия оракула?
Желательно еще структуру таблицы со всеми индексами.
small tables on solaris10 ultra10, oracle 9i.
Добавлено: 10 сен 2006, 00:31
bormo
Гляди, по существу вопроса, т.е. как получить полный запрос, без параметров получить если обращение идет через oci вряд ли получится. У него логика такая - он делает prepare с параметрами, потом подстановку и execute а после fetch, в принципе и все остальные коннекты так работают, более или менее. Типа запрос кешется при prepare и следующий раз выполняется быстрее. Но шанс есть. Если запрос бежит долго - а судя по трейсу это так и есть, то можно выцепить текущий sql прямо из сессии.
надо наваять запрос по
v$session
v$process
V$sql
set wra off
set lin 120
select
u.sid,
u.username,
s.sql_text
from
v$sql s,
v$session u
where
s.hash_value = u.sql_hash_value
and
sql_text not like '%from v$sql s, v$session u%'
order by
u.sid;
А параметры достать из v$sql_bind_capture так:
select u.sid,
u.username,
u.sql_id,
u.sql_child_number,
s.name,
s.value_string
from v$sql_bind_capture s, v$session u
where u.sql_hash_value = s.hash_value
and u.sql_address = s.address
and u.username is not null;
Что же касается перформанса на солярке - вопрос непростой. Честно говоря по сравнению скажем с HPUX и AIX у меня на солярке опыт более негативный. Сейчас я клепаю очередной и уже не первый баг с экспортом/импортом, чтобы послать в оракул. Ну да ладно, проверь следующие вещи:
1. Параметры
select value from v$parameter where name='optimizer_index_cost_adj';
обычно колеблется от 100 к 1, попробуй 25 и 1. 100 не ставь.
2. SGA
если аппликашка oci то 80-90% памяти надо отдать db_block_buffers и забрать из разных shared pool, large pool, java pool. В shared оставить по 5-10 мег на схему.
3. Диск.
проверить как быстро работает диск, на котором расположены датафайлы с этой таблицей и system tablespace
4. План запроса.
когда получишь сиквел и параметры - открой sqlplus
set timing on
set autotrace traceonly
и запусти запросик. Пришли план. Если запросит plan_table - найди ее в system и сделай
grant select,insert,delete,update on plan_table to public;
create public synonym plan_table for system.plan_table;
или построй прямо в юзере,скрипт валяется где-то в оракуле.
И еще тип относительно солярки - если в таблице есть blob,clob, итд - сделай:
alter table <table_name> modify lob (<lobcolumn>) (cache);
Это же кстати решает проблему со скоростью импорта в солярке с оракулом.
И для больших таблиц смело используй явный паралелизм.
Добавлено: 11 сен 2006, 14:54
Gaziz
bormo писал(а):Гляди, по существу вопроса, т.е. как получить полный запрос, без параметров получить если обращение идет через oci вряд ли получится. У него логика такая - он делает prepare с параметрами, потом подстановку и execute а после fetch, в принципе и все остальные коннекты так работают, более или менее. Типа запрос кешется при prepare и следующий раз выполняется быстрее. Но шанс есть. Если запрос бежит долго - а судя по трейсу это так и есть, то можно выцепить текущий sql прямо из сессии.
надо наваять запрос по
v$session
v$process
V$sql
set wra off
set lin 120
select
u.sid,
u.username,
s.sql_text
from
v$sql s,
v$session u
where
s.hash_value = u.sql_hash_value
and
sql_text not like '%from v$sql s, v$session u%'
order by
u.sid;
А параметры достать из v$sql_bind_capture так:
select u.sid,
u.username,
u.sql_id,
u.sql_child_number,
s.name,
s.value_string
from v$sql_bind_capture s, v$session u
where u.sql_hash_value = s.hash_value
and u.sql_address = s.address
and u.username is not null;
Что же касается перформанса на солярке - вопрос непростой. Честно говоря по сравнению скажем с HPUX и AIX у меня на солярке опыт более негативный. Сейчас я клепаю очередной и уже не первый баг с экспортом/импортом, чтобы послать в оракул. Ну да ладно, проверь следующие вещи:
1. Параметры
select value from v$parameter where name='optimizer_index_cost_adj';
обычно колеблется от 100 к 1, попробуй 25 и 1. 100 не ставь.
2. SGA
если аппликашка oci то 80-90% памяти надо отдать db_block_buffers и забрать из разных shared pool, large pool, java pool. В shared оставить по 5-10 мег на схему.
3. Диск.
проверить как быстро работает диск, на котором расположены датафайлы с этой таблицей и system tablespace
4. План запроса.
когда получишь сиквел и параметры - открой sqlplus
set timing on
set autotrace traceonly
и запусти запросик. Пришли план. Если запросит plan_table - найди ее в system и сделай
grant select,insert,delete,update on plan_table to public;
create public synonym plan_table for system.plan_table;
или построй прямо в юзере,скрипт валяется где-то в оракуле.
И еще тип относительно солярки - если в таблице есть blob,clob, итд - сделай:
alter table <table_name> modify lob (<lobcolumn>) (cache);
Это же кстати решает проблему со скоростью импорта в солярке с оракулом.
И для больших таблиц смело используй явный паралелизм.
Спасибо за детальный ответ!
Когда запускаю
select u.sid,
u.username,
u.sql_id,
u.sql_child_number,
s.name,
s.value_string
from v$sql_bind_capture s, v$session u
where u.sql_hash_value = s.hash_value
and u.sql_address = s.address
and u.username is not null;
что то ей не хватает
5:52:39 PM Start SQL Editor Execution ...
5:52:39 PM Processing ...
5:52:39 PM from v$sql_bind_capture s, v$session u
5:52:39 PM *
5:52:39 PM ORA-00942: table or view does not exist
5:52:39 PM *** Script stopped due to error ***
5:52:39 PM *** SCRIPT END : Session:RELAY@grelay3(1) 11/09/2006 5:52:39 PM ***
5:52:39 PM End SQL Editor Execution
Добавлено: 12 сен 2006, 00:59
Bege-Motek
Есть у юзера под которым ты заходишь grant select any dictionary?
Добавлено: 12 сен 2006, 20:49
bormo
Да, скорее всего правов не хватает, попроси вышеуказанный грант у админа.