Почему я получаю параметр ORA-44737 не существует при установке параметра MAX_DUMP_FILE_SIZE на Oracle 18 c? - PullRequest
2 голосов
/ 06 февраля 2020

Вот мой код, довольно простой, но он не будет работать. Спасибо всем!

begin
    -- to set the max dump file size for a given session
    sys.dbms_system.set_int_param_in_session(
        217,
        36575,
        'MAX_DUMP_FILE_SIZE',
        1073741824
    );
end;

Генерирует:

ORA-44737: Parameter MAX_DUMP_FILE_SIZE did not exist.
ORA-06512: at "SYS.DBMS_SYSTEM", line 122
ORA-06512: at line 3

1 Ответ

2 голосов
/ 07 февраля 2020

Похоже, что 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, поэтому вам не нужно думать об этом при запуске трассировки.

...