Похоже, что 18 c просто сообщает об ошибке, которую 11g использовал, чтобы молча игнорировать; а именно, что имя параметра не существует или, по крайней мере, не является правильным типом для процедуры. В 11g это не ошибка, но и ничего не сделал. Обычный пользователь:
select name, type, display_value
from v$parameter
where name in ('max_dump_file_size', 'sort_area_size');
NAME TYPE DISPLAY_VALUE
------------------------------ ---------- ------------------------------
sort_area_size 3 65536
max_dump_file_size 2 unlimited
Как SYS после идентификации этого сеанса:
begin
sys.dbms_system.set_int_param_in_session(
209,
34295,
'MAX_DUMP_FILE_SIZE',
123456
);
sys.dbms_system.set_int_param_in_session(
209,
34295,
'SORT_AREA_SIZE',
123456
);
end;
/
PL/SQL procedure successfully completed.
В исходном сеансе пользователя:
select name, type, display_value
from v$parameter
where name in ('max_dump_file_size', 'sort_area_size');
NAME TYPE DISPLAY_VALUE
------------------------------ ---------- ------------------------------
sort_area_size 3 123456
max_dump_file_size 2 unlimited
Изменение sort_area_size
вступил в силу. max_dump_file_size
этого не сделал, но не сообщил об этом и не пожаловался. На самом деле вы можете передать в качестве имени параметра все, что вам нравится, и он все равно будет игнорировать его.
В 18 c он больше не работает, поэтому вы видите ошибку ORA-44737.
Причина, по которой он жалуется, похоже, сводится к названию процедуры - set_int_param_in_session
- и типу параметра. Это работает для sort_area_size
, потому что , который является целочисленным параметром ; но max_dump_file_size
является строковым параметром . Может быть более полезным, если ошибка говорит: «Параметр MAX_DUMP_FILE_SIZE не существует или был неправильного типа», но у вас не может быть всего.
Вы пытаетесь передать ему целочисленное значение, но вы может не быть - и нет способа передать 'UNLIMITED'
в качестве аргумента числа. В этом случае, возможно, в любом случае можно было бы написать разрешение числовых значений c, но тогда у вас не будет возможности сбросить его, что будет проблематично c.
К сожалению, нет эквивалентная set_str_param_in_session
процедура, и поскольку это недокументированный и неподдерживаемый пакет, маловероятно, что вы слишком далеко просите Oracle добавить ее.
Я не думаю, что есть какой-то способ сделать то, что вы ' пытается из другого сеанса.
Я не знаю ни одного способа применить это через профиль или менеджер ресурсов. При некотором предварительном планировании у вас мог бы быть способ сказать Apex (например, через параметр где-то) установить это самому, но это звучит как большая работа. Может быть проще использовать триггер входа в систему, чтобы всегда устанавливать его (для некоторых пользователей или, возможно, в роли) через вызов alter session
, поэтому вам не нужно думать об этом при запуске трассировки.