为什么在 Oracle 18c 上设置 MAX_DUMP_FILE_SIZE 参数时出现 ORA-44737 Parameter does not exist?
Why am I getting a ORA-44737 Parameter does not exist when setting the MAX_DUMP_FILE_SIZE parameter on Oracle 18c?
这是我的代码,非常简单,但它不起作用。谢谢大家!
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
看来 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; but max_dump_file_size
is a string parameter。如果错误显示 "Parameter MAX_DUMP_FILE_SIZE did not exist or was the wrong type" 可能会更有帮助,但您不能拥有所有内容。
您碰巧试图将整数值传递给它,但您可能不会 - 而且无法将 'UNLIMITED'
作为数字参数传递。在这种情况下,它可能已经写成无论如何都允许数值 - 但是你将无法重置它,这将是有问题的。
不幸的是,没有等效的 set_str_param_in_session
程序,并且由于它是一个未记录且不受支持的程序包,因此您不太可能要求 Oracle 添加一个程序。
我认为没有任何方法可以完成您在另一个会话中尝试的操作。
我也不知道有什么方法可以通过配置文件或资源管理器来应用它。通过一些提前计划,您可能有办法告诉 Apex(例如,通过某个地方的参数)自行设置,但这听起来工作量很大。使用登录触发器通过 alter session
调用始终设置它(对于某些用户,或者可能是某个角色)可能更简单,因此您在开始跟踪时不必考虑它。
这是我的代码,非常简单,但它不起作用。谢谢大家!
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
看来 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; but max_dump_file_size
is a string parameter。如果错误显示 "Parameter MAX_DUMP_FILE_SIZE did not exist or was the wrong type" 可能会更有帮助,但您不能拥有所有内容。
您碰巧试图将整数值传递给它,但您可能不会 - 而且无法将 'UNLIMITED'
作为数字参数传递。在这种情况下,它可能已经写成无论如何都允许数值 - 但是你将无法重置它,这将是有问题的。
不幸的是,没有等效的 set_str_param_in_session
程序,并且由于它是一个未记录且不受支持的程序包,因此您不太可能要求 Oracle 添加一个程序。
我认为没有任何方法可以完成您在另一个会话中尝试的操作。
我也不知道有什么方法可以通过配置文件或资源管理器来应用它。通过一些提前计划,您可能有办法告诉 Apex(例如,通过某个地方的参数)自行设置,但这听起来工作量很大。使用登录触发器通过 alter session
调用始终设置它(对于某些用户,或者可能是某个角色)可能更简单,因此您在开始跟踪时不必考虑它。