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
tracing oracle sql statements
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Gaziz
- Житель
- Сообщения: 944
- Зарегистрирован: 17 фев 2003, 15:57
- Откуда: Almaty-Toronto-Vancouver-Seattle
-
- Маньяк
- Сообщения: 4203
- Зарегистрирован: 08 мар 2006, 15:45
- Откуда: Ричмонд
Re: tracing oracle sql statements
если без наворотов то можно сделать с tkprof. Эта утилита которая с ораклом поставляется.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
тут все ключевые слова есть:
http://www.psoug.org/reference/trace_tkprof.html
- Gaziz
- Житель
- Сообщения: 944
- Зарегистрирован: 17 фев 2003, 15:57
- Откуда: Almaty-Toronto-Vancouver-Seattle
Re: tracing oracle sql statements
damn! I have oracle 9i(Alex) писал(а):если без наворотов то можно сделать с tkprof. Эта утилита которая с ораклом поставляется.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
тут все ключевые слова есть:
http://www.psoug.org/reference/trace_tkprof.html

-
- Маньяк
- Сообщения: 4203
- Зарегистрирован: 08 мар 2006, 15:45
- Откуда: Ричмонд
Re: tracing oracle sql statements
а эта утилита есть в 9i, 8, 8i, 7.3Gaziz писал(а):damn! I have oracle 9i(Alex) писал(а):если без наворотов то можно сделать с tkprof. Эта утилита которая с ораклом поставляется.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
тут все ключевые слова есть:
http://www.psoug.org/reference/trace_tkprof.html

-
- Пользователь
- Сообщения: 194
- Зарегистрирован: 19 май 2006, 21:03
- Откуда: + 1 604
- Gaziz
- Житель
- Сообщения: 944
- Зарегистрирован: 17 фев 2003, 15:57
- Откуда: Almaty-Toronto-Vancouver-Seattle
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 helpsbormo писал(а):С 6 по 10Раньше может тоже была, не знаю.

=====================
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
-
- Пользователь
- Сообщения: 194
- Зарегистрирован: 19 май 2006, 21:03
- Откуда: + 1 604
- Gaziz
- Житель
- Сообщения: 944
- Зарегистрирован: 17 фев 2003, 15:57
- Откуда: Almaty-Toronto-Vancouver-Seattle
-
- Пользователь
- Сообщения: 194
- Зарегистрирован: 19 май 2006, 21:03
- Откуда: + 1 604
Гляди, по существу вопроса, т.е. как получить полный запрос, без параметров получить если обращение идет через 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);
Это же кстати решает проблему со скоростью импорта в солярке с оракулом.
И для больших таблиц смело используй явный паралелизм.
надо наваять запрос по
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);
Это же кстати решает проблему со скоростью импорта в солярке с оракулом.
И для больших таблиц смело используй явный паралелизм.
- Gaziz
- Житель
- Сообщения: 944
- Зарегистрирован: 17 фев 2003, 15:57
- Откуда: Almaty-Toronto-Vancouver-Seattle
Спасибо за детальный ответ!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
-
- Пользователь
- Сообщения: 93
- Зарегистрирован: 14 июл 2006, 16:15
-
- Пользователь
- Сообщения: 194
- Зарегистрирован: 19 май 2006, 21:03
- Откуда: + 1 604