2

这是我的代码,非常简单,但它不起作用。谢谢你们!

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
4

1 回答 1

3

看来 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因为这是一个整数参数;但是max_dump_file_size 是一个字符串参数。如果错误提示“参数 MAX_DUMP_FILE_SIZE 不存在或类型错误”可能会更有帮助,但您不能拥有所有内容。

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

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

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

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

于 2020-02-07T15:54:51.770 回答