Получение информации об открытом курсоре для непривилегированного пользователя Oracle

#oracle #memory-leaks #database-administration

#Oracle #утечки памяти #администрирование базы данных

Вопрос:

Я хочу реализовать некоторые интеграционные / модульные тесты для приложения Java 7, которое подключается к базе данных Oracle 12.1. Пользователь базы данных, используемый для тестирования для подключения к базе данных, не имеет привилегий администратора базы данных (и я не могу предоставить их ему).

Я хочу убедиться, что код, выполняемый каждым модульным тестом, не приводит к утечкам курсора, поэтому я хотел бы выполнить запрос, подобный следующему, до и после каждого тестового примера JUnit (используя аннотации @Before и @After) и сравнить значения:

 select a.value 
from v$sesstat a, v$statname b, v$session s 
where a.statistic# = b.statistic#  and s.sid=a.sid and s.sid= sys_context('USERENV','SID') and b.name = 'opened cursors current'
  

Проблема в том, что, поскольку пользователь, выполняющий этот запрос, не является администратором базы данных, я получаю следующую ошибку при попытке выполнить этот запрос:

 ORA-00942: table or view does not exist
  

Я попытался просмотреть таблицы USER_ * для получения соответствующей информации, но ничего не смог найти. Есть ли в Oracle способ получить открытые курсоры пользователя, если у этого пользователя нет привилегий администратора базы данных?

Комментарии:

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

2. @XING Мне нужен автоматический способ убедиться, что я или кто-либо другой, работающий над кодом, не становится неаккуратным и не забывает закрывать курсоры.

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