
好的,我们来详细解析 ORA-00073 错误。这是一个与 ALTER SESSION 命令参数设置相关的错误。
ORA-00073 错误全面解析
1. 错误代码与信息
- 错误代码:ORA-00073
- 官方错误信息:
invalid value string for parameter string - 中文释义:参数
string的值string无效
2. 错误信息结构解析
该错误信息的标准格式如下:
ORA-00073: invalid value string for parameter string
- ORA-00073:Oracle 的错误代码前缀。
invalid value:指出问题的核心——提供了一个无效的、不被接受的值。- 第一个
string:代表用户试图设置的、被系统判定为无效的那个具体值。 for parameter:连接语,指明是为哪个参数设置了无效值。- 第二个
string:代表参数名称。
示例:
ORA-00073: invalid value TRACE for parameter AUTOTRACE
这表示你试图将 AUTOTRACE 参数的值设置为 TRACE,但 TRACE 对于 AUTOTRACE 参数来说是一个无效的值。
3. 错误本质与发生原因
ORA-00073 错误的根本原因是:在使用 ALTER SESSION SET 命令设置一个会话级参数时,为其指定了一个该参数不支持、无法识别或格式错误的值。
详细原因分析:
- 参数值拼写错误:这是最常见的原因。用户输入了错误的参数值。例如,
AUTOTRACE参数的有效值是ON,OFF,TRACEONLY[等],但如果错误地输入了TRACE,就会触发 ORA-00073。 - 使用了参数不支持的枚举值:许多
ALTER SESSION参数有固定的、预定义的选项列表(枚举值)。尝试使用一个不在这个预定义列表中的值就会导致错误。 - 值格式错误:对于接受特定格式参数的设置(如
NLS参数),如果提供的值格式不正确,也会引发此错误。例如,为日期格式参数提供了一个无效的格式字符串。 - 参数已过时或版本不兼容:在某些情况下,一个值在旧版本中有效,但在当前使用的 Oracle 版本中已被弃用或移除。使用这个旧值就会报错。
通俗理解
可以把 ALTER SESSION SET 命令想象成一个多功能电器的设置菜单。
- 参数(Parameter):就是菜单里的一个设置项,比如“风扇模式”、“温度”、“定时时长”。
- 参数值(Value):就是每个设置项下面可供选择的几个具体选项。比如“风扇模式”只能选“静音”、“自然风”、“强力”;“温度”只能设置在 16°C 到 30°C 之间。
ORA-00073 错误就相当于:
你想设置风扇模式,但对遥控器说:“把风扇模式设为‘龙卷风’!”
电器(Oracle)的智能系统识别了一下,发现自己的选项里根本没有“龙卷风”这个模式,于是它报错:“无效的值‘龙卷风’用于参数‘风扇模式’”。
这个错误的原因很简单:你从一堆“标准答案”里,选了一个“错误答案”填了上去。
4. 常见发生场景
- 设置 SQL*Plus 功能时:在 SQL*Plus 中使用
SET AUTOTRACE ...命令时,拼错了选项。SET AUTOTRACE TRACE; -- 错误!应为 TRACEONLY 或 ON ORA-00073: invalid value TRACE for parameter AUTOTRACE - 设置优化器相关参数时:例如,错误地设置
OPTIMIZER_MODE。ALTER SESSION SET OPTIMIZER_MODE = 'ALL_ROWS_FAST'; -- 无效值 - 设置国家语言支持(NLS)参数时:提供了无效的格式字符串或区域设置名称。
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH:MM:SS'; -- 分钟应为 MI, 不是 MM - 在任何工具中执行
ALTER SESSION:在任何可以执行 SQL 的环境(SQL Developer, JDBC, etc.)中,如果ALTER SESSION SET <parameter> = <value>;语句中的<value>不正确,都会触发此错误。
5. 相关原理
- 会话级修改:
ALTER SESSION命令用于修改当前会话的设置,这些设置仅影响当前会话,不会影响数据库实例或其他会话。修改会立即生效。 - 参数验证:与
ALTER SYSTEM类似,当你使用ALTER SESSION SET时,Oracle 会立即对提供的参数和值进行有效性验证。这个检查包括确认参数是否存在、值的数据类型是否匹配、以及值是否在允许的范围内。 - SQL*Plus 的
SET命令:需要特别注意,在 SQL*Plus 中,SET AUTOTRACE ...和SET TIME ...等命令是 SQL*Plus 客户端命令,而不是发送给服务器的 SQL。但它们背后的原理相似,SQL*Plus 也会验证这些命令的值的有效性,如果无效,就会报告错误(有时是 ORA-00073,有时是 SQL*Plus 自己的错误消息)。
6. 相关联的其他 ORA-错误
- ORA-00922: missing or invalid option:缺少或无效选项。这是一个更通用的语法错误,可能在
ALTER SESSION语句的语法本身不正确时发生,而不仅仅是值错误。 - ORA-02248: invalid option for ALTER SESSION:ALTER SESSION 的无效选项。如果
ALTER SESSION后面跟了一个无效的子句(如ALTER SESSION KILL),可能会报此错。 - ORA-00068:
invalid value string for parameter string; must be at least string和 ORA-00067:value string for parameter string is too large。这两个错误与 ORA-00073 类似,但特指数字类型的参数值超出了其最小或最大范围。
7. 定位原因、分析过程与解决方案
诊断 ORA-00073 的关键在于仔细检查出错的那条命令,并找出正确的参数值。
诊断与分析过程:
- 仔细阅读错误信息:错误信息本身已经非常明确地指出了是哪个参数(
parameter string)和哪个无效的值(invalid value string)。这是最重要的线索。 - 复查命令:找到你执行的那条出错的
SET或ALTER SESSION命令,检查其拼写。 - 查询参数的合法值:如果你不确定一个参数有哪些有效值,可以查询 Oracle 官方文档。对于 SQL*Plus 的
SET命令,可以使用HELP SET命令。对于ALTER SESSION参数,可以尝试查询数据字典或使用文档。-- 对于 SQL*Plus 的 SET 命令,使用 HELP HELP SET AUTOTRACE -- 对于会话参数,可以尝试查询(并非所有参数都能这样查) -- 首先可能要知道参数名 SHOW PARAMETER OPTIMIZER_MODE -- 或者尝试设置一个明显错误的值,有时错误信息会列出有效值
解决方案与相关操作:
解决方案非常直接:根据错误提示和官方文档,将参数值更正为一个有效的值。
| 场景 | 错误示例 | 解决方案与正确命令 |
|---|---|---|
| SQL*Plus 的 SET AUTOTRACE | SQL> SET AUTOTRACE TRACE ORA-00073: invalid value TRACE for parameter AUTOTRACE | 查看帮助: HELP SET AUTOTRACE 会显示有效选项为 ON, OFF, TRACEONLY, EXPLAIN, STATISTICS。 更正为: SET AUTOTRACE TRACEONLY 或 SET AUTOTRACE ON |
| ALTER SESSION 设置 NLS | SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH:MM:SS'; ORA-00073: invalid value ... for parameter NLS_DATE_FORMAT | 检查格式: 分钟应为 MI,不是 MM。 更正为: ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'; |
| ALTER SESSION 设置其他参数 | SQL> ALTER SESSION SET OPTIMIZER_MODE = 'ALL_ROWS_FAST'; ORA-00073: invalid value ... | 查阅文档: 在 Oracle 19c/21c 中,OPTIMIZER_MODE 的有效值通常是 ALL_ROWS, FIRST_ROWS_n, FIRST_ROWS (已过时) 等。 更正为: ALTER SESSION SET OPTIMIZER_MODE = 'ALL_ROWS'; |
通用解决流程:
- 停:看到 ORA-00073 错误。
- 看:仔细看错误信息,记住是哪个参数和哪个无效值。
- 查:
- 如果是 SQL*Plus 命令(如
SET AUTOTRACE),用HELP SET <command>查。 - 如果是
ALTER SESSION参数,查阅官方文档中关于该参数的说明。
- 如果是 SQL*Plus 命令(如
- 改:使用查到的正确值,重新执行命令。
8. 通俗易懂的讲解
ORA-00073 就是“填错了选项”。
想象你在玩一个游戏,创建角色时要选择职业:
- 参数 = “职业” 这个选择项。
- 参数值 = 可供选择的职业,比如“战士”、“法师”、“牧师”。
错误场景:
你在输入框里填了一个游戏里根本没有的职业:“奥特曼”。
系统提示:“无效的值‘奥特曼’用于参数‘职业’”。
怎么解决?
- 看提示:系统已经告诉你“职业”这个选项不能填“奥特曼”。
- 查攻略:你打开游戏菜单里的“职业介绍”(
HELP SET或官方文档),看看到底有哪些职业可以选。 - 重新选:你发现原来可以选“法师”,于是你重新选择“法师”,成功创建角色。
总结一下:
这个错误一点也不复杂。它就是告诉你:“你刚才让我那么设置,但我听不懂你说的是什么意思。我这儿没有这个选项。” 解决办法就是翻一下说明书(文档或HELP),看看正确的选项是什么,然后重试一次。
9. 总结与最佳实践
- 善用帮助系统:在 SQL*Plus 中,遇到不熟悉的
SET命令,第一反应应该是使用HELP SET或HELP SET <command>来查看用法和有效值。 - 查阅官方文档:对于
ALTER SESSION参数,Oracle 的 SQL Reference 官方文档中有详细的参数列表和有效值说明。这是最权威的参考。 - 注意大小写:虽然很多参数值不区分大小写,但有些(如某些 NLS 参数)是区分的。最好按照文档中示例的大小写来书写。
- 测试在先:在编写包含会话参数设置的脚本时,先在测试环境或个人会话中测试一下,确保语法和值正确无误,再放入正式脚本或应用中。
通过以上详细的解释,你应该能够完全理解 ORA-00073 错误的成因、并掌握其诊断和解决方法。这个错误通常是由于粗心或对参数不熟悉造成的,解决起来通常很简单,只需要找到正确的参数值即可。
欢迎关注我的公众号《IT小Chen》
6580

被折叠的 条评论
为什么被折叠?



