#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.