在Oracle 18c上设置MAX_DUMP_FILE_SIZE参数时,为什么我不获得ORA-44737参数?

问题描述 投票:2回答:1

这是我的代码,非常简单,但是无法正常工作。谢谢大家!

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
oracle trace oracle18c
1个回答
1
投票

[似乎18c只是报告了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没有-但没有报告或抱怨。实际上,您可以将任何您喜欢的内容作为参数名称传递,并且仍然会默默地忽略它。

在18c中,它不再保持沉默,因此您看到ORA-44737错误。

看来,它抱怨的原因归结为过程的名称-set_int_param_in_session-和参数类型。它适用于sort_area_size,因为that is an integer parameter;但是max_dump_file_size is a string parameter。如果错误提示“参数MAX_DUMP_FILE_SIZE不存在或类型错误,则可能会更有用,但是您不能拥有所有内容。

您碰巧试图将其传递给整数值,但可能不是-并且无法将'UNLIMITED'作为数字参数传递。在这种情况下,也许可以将其写为允许数字值-但是您将无法重置它,这将是有问题的。

不幸的是,没有等效的set_str_param_in_session过程,并且由于它是一个未记录且不受支持的程序包,因此您不太可能要求Oracle添加一个程序。

我认为没有任何方法可以执行您在其他会话中尝试的操作。

我也不知道通过配置文件或资源管理器应用此方法的任何方法。通过一些预先的计划,您可能有一种方法可以告诉Apex(例如,通过某个地方的参数)自行设置,但这听起来需要大量工作。使用登录触发器始终通过alter session调用来设置此设置(对于某些用户或某个角色,可能更简单),因此在开始跟踪时不必考虑它。

© www.soinside.com 2019 - 2024. All rights reserved.