Я SQL Серверный администратор базы данных, в настоящее время набирающий скорость на Oracle Я пытаюсь создать что-то очень похожее на sp_WhoIsActive для SQL Server, но для Oracle, не изобретая велосипед. По сути, все, что я делаю, - это выбираю некоторые значения из v $ session и вставляю их в таблицу (ASH / AWR бедняка).
Может показаться, что в Oracle 12.1 существует ошибка при запросе представлений словаря, где он может длиться вечно из-за плохого анализа паролей c (Ошибка 22225899: МЕДЛЕННЫЙ РАЗДЕЛ ДЛЯ СЛОЖНОГО ЗАПРОСА). Обходной путь - установить параметр сеанса:
alter session set "_optimizer_squ_bottomup"=false;
В T- SQL я мог бы очень легко выполнить хранимую процедуру в сеансе и установить эту переменную во время выполнения , Однако в Oracle это не выглядит так.
Пример кода:
CREATE OR REPLACE PROCEDURE SP_DB_ACTIVITY
(
v_temp NUMBER :=1
) IS
BEGIN
alter session set "_optimizer_squ_bottomup"=false;
INSERT INTO SY_DB_ACTIVITY
SELECT
<fields>
FROM
v$session;
commit;
Когда я запускаю это, я получаю ошибку:
"PLS-00103: Обнаружен символ« ALTER »при ожидании одного из следующих ...»
Прямо сейчас, единственный способ, которым я знаю, как это сделать, - это утилита, подобная SQL Плюс, который инициирует интерактивный сеанс пользователя. Кто-нибудь может дать мне какое-то указание о том, как Oracle справляется с этой ситуацией? Я хотел бы связать это в SP или Package и затем вызвать его из Oracle Scheduler.