Oracle数据库 ORA-00073 错误分析和解决

在这里插入图片描述
好的,我们来详细解析 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 命令设置一个会话级参数时,为其指定了一个该参数不支持、无法识别或格式错误的值。

详细原因分析:

  1. 参数值拼写错误:这是最常见的原因。用户输入了错误的参数值。例如,AUTOTRACE 参数的有效值是 ON, OFF, TRACEONLY [等],但如果错误地输入了 TRACE,就会触发 ORA-00073。
  2. 使用了参数不支持的枚举值:许多 ALTER SESSION 参数有固定的、预定义的选项列表(枚举值)。尝试使用一个不在这个预定义列表中的值就会导致错误。
  3. 值格式错误:对于接受特定格式参数的设置(如 NLS 参数),如果提供的值格式不正确,也会引发此错误。例如,为日期格式参数提供了一个无效的格式字符串。
  4. 参数已过时或版本不兼容:在某些情况下,一个值在旧版本中有效,但在当前使用的 Oracle 版本中已被弃用或移除。使用这个旧值就会报错。

通俗理解

可以把 ALTER SESSION SET 命令想象成一个多功能电器的设置菜单

  • 参数(Parameter):就是菜单里的一个设置项,比如“风扇模式”、“温度”、“定时时长”。
  • 参数值(Value):就是每个设置项下面可供选择的几个具体选项。比如“风扇模式”只能选“静音”、“自然风”、“强力”;“温度”只能设置在 16°C 到 30°C 之间。

ORA-00073 错误就相当于:
你想设置风扇模式,但对遥控器说:“把风扇模式设为‘龙卷风’!

电器(Oracle)的智能系统识别了一下,发现自己的选项里根本没有“龙卷风”这个模式,于是它报错:“无效的值‘龙卷风’用于参数‘风扇模式’”。

这个错误的原因很简单:你从一堆“标准答案”里,选了一个“错误答案”填了上去。

4. 常见发生场景

  1. 设置 SQL*Plus 功能时:在 SQL*Plus 中使用 SET AUTOTRACE ... 命令时,拼错了选项。
    SET AUTOTRACE TRACE; -- 错误!应为 TRACEONLY 或 ON
    ORA-00073: invalid value TRACE for parameter AUTOTRACE
    
  2. 设置优化器相关参数时:例如,错误地设置 OPTIMIZER_MODE
    ALTER SESSION SET OPTIMIZER_MODE = 'ALL_ROWS_FAST'; -- 无效值
    
  3. 设置国家语言支持(NLS)参数时:提供了无效的格式字符串或区域设置名称。
    ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH:MM:SS'; -- 分钟应为 MI, 不是 MM
    
  4. 在任何工具中执行 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 stringORA-00067: value string for parameter string is too large。这两个错误与 ORA-00073 类似,但特指数字类型的参数值超出了其最小或最大范围。

7. 定位原因、分析过程与解决方案

诊断 ORA-00073 的关键在于仔细检查出错的那条命令,并找出正确的参数值

诊断与分析过程:

  1. 仔细阅读错误信息:错误信息本身已经非常明确地指出了是哪个参数parameter string)和哪个无效的值invalid value string)。这是最重要的线索。
  2. 复查命令:找到你执行的那条出错的 SETALTER SESSION 命令,检查其拼写。
  3. 查询参数的合法值:如果你不确定一个参数有哪些有效值,可以查询 Oracle 官方文档。对于 SQL*Plus 的 SET 命令,可以使用 HELP SET 命令。对于 ALTER SESSION 参数,可以尝试查询数据字典或使用文档。
    -- 对于 SQL*Plus 的 SET 命令,使用 HELP
    HELP SET AUTOTRACE
    
    -- 对于会话参数,可以尝试查询(并非所有参数都能这样查)
    -- 首先可能要知道参数名
    SHOW PARAMETER OPTIMIZER_MODE
    -- 或者尝试设置一个明显错误的值,有时错误信息会列出有效值
    

解决方案与相关操作:

解决方案非常直接:根据错误提示和官方文档,将参数值更正为一个有效的值。

场景错误示例解决方案与正确命令
SQL*Plus 的 SET AUTOTRACESQL> SET AUTOTRACE TRACE
ORA-00073: invalid value TRACE for parameter AUTOTRACE
查看帮助: HELP SET AUTOTRACE 会显示有效选项为 ON, OFF, TRACEONLY, EXPLAIN, STATISTICS
更正为: SET AUTOTRACE TRACEONLYSET AUTOTRACE ON
ALTER SESSION 设置 NLSSQL> 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';

通用解决流程:

  1. :看到 ORA-00073 错误。
  2. :仔细看错误信息,记住是哪个参数和哪个无效值
    • 如果是 SQL*Plus 命令(如 SET AUTOTRACE),用 HELP SET <command> 查。
    • 如果是 ALTER SESSION 参数,查阅官方文档中关于该参数的说明。
  3. :使用查到的正确值,重新执行命令。

8. 通俗易懂的讲解

ORA-00073 就是“填错了选项”。

想象你在玩一个游戏,创建角色时要选择职业:

  • 参数 = “职业” 这个选择项。
  • 参数值 = 可供选择的职业,比如“战士”、“法师”、“牧师”。

错误场景:
你在输入框里填了一个游戏里根本没有的职业:“奥特曼”。

系统提示:“无效的值‘奥特曼’用于参数‘职业’”。

怎么解决?

  1. 看提示:系统已经告诉你“职业”这个选项不能填“奥特曼”。
  2. 查攻略:你打开游戏菜单里的“职业介绍”(HELP SET 或官方文档),看看到底有哪些职业可以选。
  3. 重新选:你发现原来可以选“法师”,于是你重新选择“法师”,成功创建角色。

总结一下:
这个错误一点也不复杂。它就是告诉你:“你刚才让我那么设置,但我听不懂你说的是什么意思。我这儿没有这个选项。” 解决办法就是翻一下说明书(文档或HELP),看看正确的选项是什么,然后重试一次。

9. 总结与最佳实践

  1. 善用帮助系统:在 SQL*Plus 中,遇到不熟悉的 SET 命令,第一反应应该是使用 HELP SETHELP SET <command> 来查看用法和有效值。
  2. 查阅官方文档:对于 ALTER SESSION 参数,Oracle 的 SQL Reference 官方文档中有详细的参数列表和有效值说明。这是最权威的参考。
  3. 注意大小写:虽然很多参数值不区分大小写,但有些(如某些 NLS 参数)是区分的。最好按照文档中示例的大小写来书写。
  4. 测试在先:在编写包含会话参数设置的脚本时,先在测试环境或个人会话中测试一下,确保语法和值正确无误,再放入正式脚本或应用中。

通过以上详细的解释,你应该能够完全理解 ORA-00073 错误的成因、并掌握其诊断和解决方法。这个错误通常是由于粗心或对参数不熟悉造成的,解决起来通常很简单,只需要找到正确的参数值即可。

欢迎关注我的公众号《IT小Chen

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值