跳到主要内容
运维工作区
ORA 错误码查询

ORA 错误码查询

查询 ORA-XXXXX 错误码含义、常见原因与解决方案,支持关键字模糊搜索

返回工具箱

常见错误快速访问

找到 70 条匹配结果

ORA-00001数据

违反唯一约束

常见原因

  • 向唯一/主键列插入了重复值
  • 批量插入中存在冲突行

解决方案

  1. 1.插入前先检查数据是否存在
  2. 2.使用 MERGE 或先查后插逻辑
  3. 3.确认唯一约束建在正确列上
ORA-00018系统

超出最大会话数

常见原因

  • 并发连接过多
  • 连接池未释放会话
  • SESSIONS 参数设置过低

解决方案

  1. 1.增加 SESSIONS 参数值
  2. 2.调整连接池配置
  3. 3.识别并终止空闲会话
ORA-00020系统

超出最大进程数

常见原因

  • PROCESSES 参数过低
  • 应用存在资源泄漏
  • 并行进程过多

解决方案

  1. 1.增加 PROCESSES 参数
  2. 2.修复应用中的连接泄漏
  3. 3.修改参数后重启实例
ORA-00054锁

资源忙,NOWAIT 方式获取锁失败或超时

常见原因

  • 其他会话持有对象锁
  • 在有活跃 DML 的表上执行 DDL
  • 长事务阻塞其他操作

解决方案

  1. 1.等待后重试操作
  2. 2.查找并终止阻塞会话
  3. 3.使用 WAIT 替代 NOWAIT
ORA-00060锁

等待资源时检测到死锁

常见原因

  • 两个或多个会话互相等待对方的锁
  • 未索引的外键导致表级锁
  • 应用锁顺序设计不当

解决方案

  1. 1.在外键列上添加索引
  2. 2.确保应用中锁的获取顺序一致
  3. 3.审查并重新设计事务逻辑
ORA-00257空间

归档进程错误

常见原因

  • 归档日志目标目录已满
  • 归档进程停止
  • 闪回恢复区空间不足

解决方案

  1. 1.释放归档目标目录空间
  2. 2.增加 db_recovery_file_dest_size
  3. 3.备份并删除旧归档日志
ORA-00600系统

内部错误代码

常见原因

  • Oracle 内部 Bug
  • 内存损坏
  • 硬件故障

解决方案

  1. 1.在 Oracle 官方支持查找已知 Bug
  2. 2.收集 trace 文件并提交 SR
  3. 3.应用最新补丁
ORA-00904语法

无效标识符

常见原因

  • 列名拼写错误
  • 缺少表别名引用
  • 列在表中不存在

解决方案

  1. 1.检查列名拼写
  2. 2.确认表/视图定义
  3. 3.使用正确的表别名
ORA-00907语法

缺少右括号

常见原因

  • SQL 中括号未匹配
  • 括号内语法无效
  • 使用保留字未加引号

解决方案

  1. 1.检查并匹配所有括号
  2. 2.检查 CREATE TABLE 或函数调用内的语法
  3. 3.用双引号包裹保留字
ORA-00911语法

无效字符

常见原因

  • 编程方式执行 SQL 时包含了分号
  • SQL 中含有非 ASCII 字符
  • 特殊字符未正确转义

解决方案

  1. 1.在 JDBC/OCI 调用中移除末尾分号
  2. 2.检查不可见字符
  3. 3.对特殊字符使用正确的转义
ORA-00913语法

值过多

常见原因

  • INSERT 列数与值数不匹配
  • 子查询返回列数超出预期
  • 列列表不匹配

解决方案

  1. 1.使列数与值数匹配
  2. 2.在 INSERT 中显式列出列
  3. 3.检查子查询 SELECT 列表
ORA-00918语法

列定义不明确

常见原因

  • 多表中存在同名列但未使用别名
  • JOIN 时未正确限定表名

解决方案

  1. 1.用表别名前缀限定列
  2. 2.在所有 JOIN 中使用显式表别名
ORA-00932数据

数据类型不一致

常见原因

  • 比较不兼容的数据类型
  • UNION 的列类型不匹配
  • 隐式转换失败

解决方案

  1. 1.使用显式类型转换 (TO_CHAR, TO_NUMBER 等)
  2. 2.确保 UNION 各列类型一致
  3. 3.检查 WHERE 子句数据类型兼容性
ORA-00936语法

缺少表达式

常见原因

  • SELECT 列表不完整
  • 运算符后缺少值
  • 列列表末尾多余逗号

解决方案

  1. 1.补全 SQL 表达式
  2. 2.移除末尾逗号
  3. 3.检查缺少的列名或值
ORA-00942权限

表或视图不存在

常见原因

  • 对象在该 schema 中不存在
  • 对该表没有 SELECT 权限
  • 使用了错误的 schema 前缀

解决方案

  1. 1.确认表是否存在:SELECT * FROM all_tables
  2. 2.授予必要的权限
  3. 3.使用正确的 schema.table_name 格式
ORA-00955数据

名称已被现有对象使用

常见原因

  • 创建了重名对象
  • 对象已存在于当前 schema

解决方案

  1. 1.对视图/存储过程使用 CREATE OR REPLACE
  2. 2.先删除已存在的对象
  3. 3.选择一个不同的名称
ORA-01000内存

超出最大打开游标数

常见原因

  • 应用未关闭游标/语句
  • OPEN_CURSORS 参数过低
  • PL/SQL 代码中存在游标泄漏

解决方案

  1. 1.在应用代码中使用后关闭游标
  2. 2.增加 OPEN_CURSORS 参数
  3. 3.使用 V$OPEN_CURSOR 定位泄漏
ORA-01017权限

用户名/密码无效;登录被拒绝

常见原因

  • 密码错误
  • 账户被锁定
  • 密码大小写不匹配

解决方案

  1. 1.验证凭据
  2. 2.解锁账户:ALTER USER ... ACCOUNT UNLOCK
  3. 3.检查 SEC_CASE_SENSITIVE_LOGON 参数
ORA-01031权限

权限不足

常见原因

  • 用户缺少所需系统权限
  • 缺少角色授予
  • 对象权限未授予

解决方案

  1. 1.授予所需权限:GRANT ... TO user
  2. 2.检查 DBA_SYS_PRIVS 和 DBA_ROLE_PRIVS
  3. 3.授予具体对象权限
ORA-01034系统

ORACLE 不可用

常见原因

  • 数据库实例未启动
  • 实例已崩溃
  • 后台进程未运行

解决方案

  1. 1.启动实例:STARTUP
  2. 2.检查 alert log 中的错误
  3. 3.确认 Oracle 进程正在运行
ORA-01078系统

处理系统参数失败

常见原因

  • init.ora/spfile 参数无效
  • 参数文件语法错误
  • 参数文件权限问题

解决方案

  1. 1.检查参数文件语法错误
  2. 2.验证参数值是否有效
  3. 3.从 spfile 创建 pfile 进行编辑
ORA-01109系统

数据库未打开

常见原因

  • 数据库已挂载但未打开
  • 因需要恢复导致打开失败
  • 受限会话活跃中

解决方案

  1. 1.执行 ALTER DATABASE OPEN
  2. 2.如需要则执行介质恢复
  3. 3.检查 alert log 中的打开失败信息
ORA-01400数据

不能向列插入 NULL 值

常见原因

  • NOT NULL 列缺少值
  • 触发器未提供默认值
  • 应用为必填字段传了空值

解决方案

  1. 1.为 NOT NULL 列提供值
  2. 2.为列添加 DEFAULT 子句
  3. 3.修复应用逻辑传递必填值
ORA-01403数据

未找到数据

常见原因

  • SELECT INTO 未返回任何行
  • 隐式游标未找到匹配数据
  • 数据被其他会话删除

解决方案

  1. 1.在 PL/SQL 中处理 NO_DATA_FOUND 异常
  2. 2.使用游标配合 %NOTFOUND 检查
  3. 3.查询前确认数据是否存在
ORA-01410数据

无效的 ROWID

常见原因

  • 获取 ROWID 后该行已被删除
  • 跨表使用 ROWID
  • ROWID 值损坏

解决方案

  1. 1.重新查询获取当前 ROWID
  2. 2.不要长期缓存 ROWID
  3. 3.使用主键代替 ROWID
ORA-01422数据

精确提取返回了多于请求的行数

常见原因

  • SELECT INTO 返回了多行
  • 子查询返回了多于一行
  • 数据完整性问题——意外重复

解决方案

  1. 1.添加 WHERE 子句限制为一行
  2. 2.使用游标或 BULK COLLECT 处理多行
  3. 3.修复数据重复问题
ORA-01438数据

值超出指定精度

常见原因

  • 数值超出列精度
  • 计算结果对列来说太大
  • 表定义中数据类型大小不正确

解决方案

  1. 1.增加列精度:ALTER TABLE MODIFY
  2. 2.插入前对值进行舍入或截断
  3. 3.确认数据范围与列定义匹配
ORA-01502数据

索引或其分区处于不可用状态

常见原因

  • 直接路径加载导致索引失效
  • ALTER TABLE MOVE 后未重建索引
  • 分区维护操作

解决方案

  1. 1.重建索引:ALTER INDEX ... REBUILD
  2. 2.使用 ONLINE 重建避免停机
  3. 3.设置 SKIP_UNUSABLE_INDEXES=TRUE 作为临时方案
ORA-01536空间

超出表空间的空间配额

常见原因

  • 用户在表空间上的配额已达上限
  • 没有 UNLIMITED TABLESPACE 权限
  • 表空间配额设置过低

解决方案

  1. 1.ALTER USER ... QUOTA UNLIMITED ON 表空间
  2. 2.授予 UNLIMITED TABLESPACE 权限
  3. 3.增加具体的配额量
ORA-01555Undo

快照过旧

常见原因

  • UNDO_RETENTION 对长查询来说太小
  • Undo 表空间太小
  • 并发事务过多覆写了 undo 数据

解决方案

  1. 1.增大 UNDO_RETENTION 参数
  2. 2.增大 undo 表空间
  3. 3.在低活跃时段运行长查询
ORA-01578系统

ORACLE 数据块损坏

常见原因

  • 磁盘硬件故障
  • 写入时 I/O 错误
  • 内存损坏数据写入磁盘

解决方案

  1. 1.从备份恢复 (RMAN 块介质恢复)
  2. 2.使用 DBMS_REPAIR 标记损坏块
  3. 3.检查并更换故障硬件
ORA-01628Undo

回滚段已达到最大区数

常见原因

  • 回滚段无法继续扩展
  • 大事务超出 undo 容量
  • 未启用自动 undo 管理

解决方案

  1. 1.切换到自动 undo 管理
  2. 2.增大 undo 表空间
  3. 3.将大事务拆分为小批次
ORA-01631空间

表已达到最大区数

常见原因

  • 表无法分配更多区
  • 字典管理表空间限制
  • 区大小过小导致区数过多

解决方案

  1. 1.将表移到本地管理表空间
  2. 2.以更大的区大小重建表
  3. 3.ALTER TABLE ... MOVE TABLESPACE ...
ORA-01652空间

无法在表空间中扩展临时段

常见原因

  • 表空间已满
  • 数据文件已达最大大小
  • 数据文件未启用自动扩展

解决方案

  1. 1.向表空间添加数据文件
  2. 2.对现有数据文件启用自动扩展
  3. 3.增大数据文件最大大小
ORA-01653空间

无法在表空间中扩展表

常见原因

  • 表空间空间不足以扩展表
  • 数据文件未启用自动扩展
  • 配额用尽

解决方案

  1. 1.添加数据文件或扩大现有文件
  2. 2.启用数据文件的 AUTOEXTEND ON
  3. 3.将表移到更大的表空间
ORA-01654空间

无法在表空间中扩展索引

常见原因

  • 索引表空间已满
  • 大索引重建占用所有空间
  • 未启用自动扩展

解决方案

  1. 1.向索引表空间添加数据文件
  2. 2.在其他表空间中重建索引
  3. 3.启用数据文件自动扩展
ORA-01691空间

无法在表空间中扩展 LOB 段

常见原因

  • LOB 表空间已满
  • 大 BLOB/CLOB 数据耗尽空间
  • LOB 表空间数据文件未启用自动扩展

解决方案

  1. 1.向 LOB 表空间添加数据文件
  2. 2.对 LOB 数据文件启用自动扩展
  3. 3.清理过期 LOB 数据
ORA-01722数据

无效数字

常见原因

  • 尝试将非数字字符串转为数字
  • 隐式转换失败
  • 源数据质量问题

解决方案

  1. 1.转换前验证数据
  2. 2.使用 TO_NUMBER 配合错误处理
  3. 3.清理源数据中的非数字值
ORA-01756语法

引用的字符串未正确终止

常见原因

  • 缺少关闭的单引号
  • 字符串中包含未转义的单引号
  • 多行字符串未正确处理

解决方案

  1. 1.添加匹配的关闭引号
  2. 2.用两个单引号转义单引号
  3. 3.对复杂字符串使用 Q-quoting 语法
ORA-01843数据

不是有效的月份

常见原因

  • 日期格式与 NLS_DATE_FORMAT 不匹配
  • 字符串中的月份值无效
  • 区域设置不匹配(如 'JAN' vs '01')

解决方案

  1. 1.在 TO_DATE 中使用显式格式
  2. 2.设置正确的 NLS_DATE_FORMAT
  3. 3.转换前验证日期字符串
ORA-01940权限

不能删除当前已连接的用户

常见原因

  • 用户有活跃会话
  • 该用户下有后台作业运行
  • 连接池保持会话存活

解决方案

  1. 1.先终止所有用户会话
  2. 2.断开连接后使用 DROP USER ... CASCADE
  3. 3.对活跃会话执行 ALTER SYSTEM KILL SESSION
ORA-02049锁

超时:分布式事务等待锁

常见原因

  • 分布式事务被远程锁阻塞
  • 网络延迟导致锁超时
  • 远程数据库无响应

解决方案

  1. 1.检查远程数据库中的阻塞锁
  2. 2.增加 DISTRIBUTED_LOCK_TIMEOUT
  3. 3.验证到远程数据库的网络连通性
ORA-02291数据

违反完整性约束——未找到父键

常见原因

  • 插入子记录时没有匹配的父记录
  • 父行已被删除
  • 外键值错误

解决方案

  1. 1.先插入父记录
  2. 2.确认外键值在父表中存在
  3. 3.批量加载时临时禁用约束
ORA-02292数据

违反完整性约束——存在子记录

常见原因

  • 删除存在子记录的父记录
  • 更新被子记录引用的父键
  • 未配置级联删除

解决方案

  1. 1.先删除子记录
  2. 2.在约束中使用 ON DELETE CASCADE
  3. 3.适当时临时禁用约束
ORA-02429数据

不能删除用于强制唯一/主键的索引

常见原因

  • 尝试删除约束依赖的索引
  • 索引被主键或唯一约束使用

解决方案

  1. 1.先删除约束再删除索引
  2. 2.使用 ALTER TABLE ... DROP CONSTRAINT
  3. 3.删索引前先禁用约束
ORA-03113网络

通信通道上遇到文件结束

常见原因

  • 服务器进程崩溃
  • 网络中断
  • 操作期间实例终止

解决方案

  1. 1.检查 alert log 中的 ORA-600/ORA-7445 错误
  2. 2.验证网络稳定性
  3. 3.重新连接并重试
ORA-03114网络

未连接到 ORACLE

常见原因

  • 连接已丢失
  • 会话超时
  • 数据库实例已关闭

解决方案

  1. 1.重新建立数据库连接
  2. 2.检查实例状态
  3. 3.在应用中实现连接重试逻辑
ORA-03135网络

连接失去联系

常见原因

  • 超出网络超时时间
  • 防火墙终止了空闲连接
  • 服务端超时 (SQLNET.EXPIRE_TIME)

解决方案

  1. 1.配置 SQLNET.EXPIRE_TIME 检测死连接
  2. 2.调整防火墙超时设置
  3. 3.在连接池中实现连接验证
ORA-04031内存

无法分配共享内存

常见原因

  • 共享池碎片化
  • SGA 对工作负载来说太小
  • 太多字面值 SQL 语句(未使用绑定变量)

解决方案

  1. 1.增大 SHARED_POOL_SIZE
  2. 2.使用绑定变量减少解析
  3. 3.刷新共享池:ALTER SYSTEM FLUSH SHARED_POOL
ORA-04036内存

实例使用的 PGA 内存超出 PGA_AGGREGATE_LIMIT

常见原因

  • 总 PGA 消耗超出限制
  • 会话中存在内存泄漏
  • 活跃会话过多且各自使用大工作区

解决方案

  1. 1.增大 PGA_AGGREGATE_LIMIT
  2. 2.识别 PGA 使用过多的会话
  3. 3.减小 SORT_AREA_SIZE 或 HASH_AREA_SIZE
ORA-04043权限

对象不存在

常见原因

  • 引用的对象已删除或从未创建
  • 对象名拼写错误
  • schema 上下文错误

解决方案

  1. 1.用 DBA_OBJECTS 验证对象是否存在
  2. 2.检查拼写和 schema 前缀
  3. 3.创建缺失的对象
ORA-04068其他

包的现有状态已被丢弃

常见原因

  • 会话使用包时包被重新编译
  • 依赖对象上执行了 DDL
  • 包体发生了变化

解决方案

  1. 1.重试操作(会话将重新初始化包)
  2. 2.避免在包被使用时重新编译
  3. 3.在应用中捕获异常并重试
ORA-06502数据

PL/SQL:数值或值错误

常见原因

  • 变量太小无法容纳赋值
  • 赋值中类型不匹配
  • VARCHAR2 变量字符串被截断

解决方案

  1. 1.增大变量声明的大小
  2. 2.使用正确的类型转换
  3. 3.赋值前验证数据长度
ORA-06512其他

在第 ... 行(PL/SQL 回溯)

常见原因

  • 这是堆栈跟踪指示,不是根本错误
  • 未处理的异常沿调用栈向上传播

解决方案

  1. 1.查看堆栈跟踪中第一个 ORA 错误
  2. 2.在 PL/SQL 代码中添加异常处理
  3. 3.检查引用的行号找到实际错误
ORA-06550语法

第 N 行第 N 列:PL/SQL 编译错误

常见原因

  • PL/SQL 块中的语法错误
  • 引用不存在的对象
  • PL/SQL 代码中类型不匹配

解决方案

  1. 1.用 SHOW ERRORS 查看详细信息
  2. 2.确认所有引用的对象存在
  3. 3.修复指定行列处的语法
ORA-08177锁

不能为此事务序列化访问

常见原因

  • 可序列化事务与并发更新冲突
  • 事务启动后行被修改
  • SERIALIZABLE 隔离级别下高争用

解决方案

  1. 1.重试事务
  2. 2.考虑使用 READ COMMITTED 隔离级别
  3. 3.缩小事务范围
ORA-12012其他

自动执行作业时出错

常见原因

  • 计划作业遇到运行时错误
  • 作业所有者缺少所需权限
  • 引用的对象不再存在

解决方案

  1. 1.检查 DBA_SCHEDULER_JOB_RUN_DETAILS 获取错误详情
  2. 2.授予作业所有者必要权限
  3. 3.修复作业过程/SQL
ORA-12154网络

TNS:无法解析指定的连接标识符

常见原因

  • tnsnames.ora 缺失或条目不正确
  • TNS_ADMIN 未指向正确目录
  • tnsnames.ora 中语法错误

解决方案

  1. 1.确认 tnsnames.ora 中存在该条目
  2. 2.检查 TNS_ADMIN 环境变量
  3. 3.用 tnsping 测试解析
ORA-12170网络

TNS:连接超时

常见原因

  • 数据库主机不可达
  • 防火墙阻止了端口
  • 监听器未启动

解决方案

  1. 1.验证网络连通性(ping/telnet)
  2. 2.检查 Oracle 端口的防火墙规则
  3. 3.启动监听器:lsnrctl start
ORA-12505网络

TNS:监听器当前不知道连接描述符中给定的 SID

常见原因

  • 连接字符串中 SID 错误
  • 数据库未向监听器注册
  • 数据库启动后监听器被重启

解决方案

  1. 1.用 lsnrctl services 确认 SID
  2. 2.使用 SERVICE_NAME 代替 SID
  3. 3.ALTER SYSTEM REGISTER 强制注册
ORA-12514网络

TNS:监听器当前不知道所请求的服务

常见原因

  • 连接字符串中服务名不正确
  • 数据库未完全打开(服务未注册)
  • 动态注册尚未发生

解决方案

  1. 1.检查服务名:lsnrctl services
  2. 2.等待动态注册或执行 ALTER SYSTEM REGISTER
  3. 3.确认数据库为 OPEN 状态
ORA-12519网络

TNS:未找到合适的服务处理程序

常见原因

  • 所有调度器繁忙(共享服务器模式)
  • PROCESSES 或 SESSIONS 限制已达到
  • 监听器无法移交连接

解决方案

  1. 1.增加 PROCESSES 和 SESSIONS 参数
  2. 2.如使用共享服务器则添加更多调度器
  3. 3.切换为专用服务器模式
ORA-12541网络

TNS:无监听器

常见原因

  • Oracle 监听器未运行
  • 连接字符串中端口错误
  • 主机防火墙阻止了监听端口

解决方案

  1. 1.启动监听器:lsnrctl start
  2. 2.确认端口号(默认 1521)
  3. 3.检查防火墙是否允许监听端口
ORA-12560网络

TNS:协议适配器错误

常见原因

  • Oracle 服务未运行(Windows)
  • ORACLE_SID 未设置(Linux)
  • 监听器配置不匹配

解决方案

  1. 1.启动 OracleService(Windows)或设置 ORACLE_SID(Linux)
  2. 2.验证环境变量
  3. 3.检查 listener.ora 配置
ORA-14400数据

插入的分区键未映射到任何分区

常见原因

  • 值不在任何已定义的分区范围内
  • 范围分区中缺少 MAXVALUE 分区
  • 新数据超出分区边界

解决方案

  1. 1.为该值范围添加新分区
  2. 2.添加 MAXVALUE 分区作为兜底
  3. 3.拆分现有分区以容纳新数据
ORA-19502空间

写入文件时出错

常见原因

  • RMAN 备份期间磁盘已满
  • 文件系统无剩余空间
  • 存储阵列 I/O 故障

解决方案

  1. 1.释放备份目标的磁盘空间
  2. 2.检查存储健康状态和 I/O 错误
  3. 3.使用压缩备份节省空间
ORA-27300系统

操作系统相关操作:fork 失败

常见原因

  • 操作系统内存不足无法创建新进程
  • 进程数达到限制(ulimit)
  • 系统资源耗尽

解决方案

  1. 1.增加操作系统进程限制(ulimit -u)
  2. 2.释放系统内存
  3. 3.检查 Linux 上的 /proc/sys/kernel/pid_max
ORA-28000权限

账户已锁定

常见原因

  • 登录失败次数过多
  • 密码过期导致账户自动锁定
  • DBA 显式锁定了账户

解决方案

  1. 1.ALTER USER 用户名 ACCOUNT UNLOCK
  2. 2.如果密码过期则重置密码
  3. 3.检查 FAILED_LOGIN_ATTEMPTS 配置文件设置
ORA-28001权限

密码已过期

常见原因

  • 密码使用期限已超
  • DEFAULT 配置文件设置了 PASSWORD_LIFE_TIME
  • 密码宽限期已结束

解决方案

  1. 1.修改密码:ALTER USER ... IDENTIFIED BY ...
  2. 2.如适当将 PASSWORD_LIFE_TIME 设为 UNLIMITED
  3. 3.审查密码策略要求
ORA-30036Undo

无法在 undo 表空间中扩展段

常见原因

  • Undo 表空间已满
  • 大事务消耗了所有 undo 空间
  • Undo 数据文件未启用自动扩展

解决方案

  1. 1.向 undo 表空间添加数据文件
  2. 2.对 undo 数据文件启用自动扩展
  3. 3.增大 UNDO_RETENTION 或添加更多 undo 空间

模糊搜索

支持按错误码、关键字搜索,快速定位问题

原因分析

每个错误码附带常见原因,帮助精准排查

解决方案

提供具体操作步骤,DBA 直接上手修复

分类筛选

按空间、锁、网络等类别筛选,快速缩小范围

ORA 错误码查询 — Oracle 错误含义与解决方案 | ora100