dynamic sql не уходит из v$sql

GuestA
Дата: 11.12.2012 14:46:00
  Добрый день!
Есть база 10.2.0.4, на базе есть следующий код:
execute immediate 'begin savepoint SP' || TO_CHAR(op_id) || '; end;';
Сессий на базе больше 1000, в силу чего подобных выражений в v$sql - несколько десятков тысяч.
Есть желание убрать их от туда.

Понятно, что первое, что приходит в голову - убрать эти вызовы, но код не мой и в лучшем случае, что можно сделать - это предложить его переписать как-то по другому.

Попробованные и не удачные решения:
dbms_shared_pool.purge (тупо не убирает его из shared pool, очевидно, потому что он не курсор).
Делать вместо execute immediate dbms_sql.parse/execute/close - не помогает, остается эта дрянь в v$sql, даже, кстати, если сессия давно отключилась.
Гугл/металинк ничего посоветовать не могут.
Что еще можно попробовать?
Вопрос2
Дата: 11.12.2012 14:48:31
А оно вам мешает?
Kamael
Дата: 11.12.2012 14:59:23
GuestA,
Свежая темка. Один sql_id много child_number
Ну и alter system flush shared_pool
GuestA
Дата: 11.12.2012 15:18:17
  Оно - мешает. select из v$sql занимает 6 секунд, что имхо - много.
flush shared_pool на продуктиве - не айс.
У меня не один sql_id и куча чайлдов - у меня куча sql_id, текст в них правда везде почти одинаковый.
ASpens
Дата: 11.12.2012 16:04:26
GuestA
  Оно - мешает. select из v$sql занимает 6 секунд, что имхо - много.
flush shared_pool на продуктиве - не айс.
У меня не один sql_id и куча чайлдов - у меня куча sql_id, текст в них правда везде почти одинаковый.


А если попробовать убрать 'begin savepoint SP' || TO_CHAR(op_id) || '; end;' в хранимую процедуру?
GuestA
Дата: 11.12.2012 17:13:21
А оно и есть в хранимой процедуре.
user1251
Дата: 11.12.2012 17:18:03
GuestA,

execute immediate '
case :op_id
  when 1 then savepoint SP1;
  ...
  when 10000 then savepoint SP10000;
  else ...
end case;' using op_id;


можно построить иерархические блоки if тогда на 10000 записей будет всего 14 проверок
user1251
Дата: 11.12.2012 17:18:56
user1251
иерархические вложенные
_Nikotin
Дата: 11.12.2012 19:20:13
sys.dbms_standard.savepoint('SP'||to_char(op_id))
Серафимный Шестикрыл
Дата: 11.12.2012 19:29:35
GuestA
на базе есть следующий код:
execute immediate 'begin savepoint SP' || TO_CHAR(op_id) || '; end;';
Сессий на базе больше 1000, в силу чего подобных выражений в v$sql - несколько десятков тысяч.


Позвольте полюбопытствовать, нафига ж плодить разноименные savepoints тем более в разных сессиях ???
Вы уверены, что понимаете что такое savepoint ?