Oracle一次ORA-12514错误问题分析及解决过程

 更新时间:2026年09月02日 11:28:14   作者:姜太小白  
遇到ORA-12514错误或数据库无法启动?本文详细记录了从监听器诊断、实例状态检查、磁盘空间清理到临时文件重建和强制注册的全过程,帮你快速解决数据库服务未注册和启动失败问题

故障排除及处理过程完整记录(通用版)

说明:以下所有命令中的 <SID> 代表你的实际数据库实例名(如 orcl等),请根据实际情况替换。

1. 初步诊断(确认监听器状态)

目的:查看监听器是否识别数据库服务。

命令

lsnrctl status

关键输出

The listener supports no services

结论:监听器运行正常,但未注册任何服务,判断数据库实例未启动或未注册。

2. 检查数据库实例是否存活

目的:查看 PMON 进程是否存在,确认数据库是否已启动。

命令

ps -ef | grep pmon

输出

oracle   <PID>  <PPID>  0 18:27 pts/0    00:00:00 grep --color=auto pmon

(无数据库 PMON 进程)

结论:无 PMON 进程,数据库实例处于关闭状态。

3. 定位参数文件及 SID

目的:查找正确的 ORACLE_SID 和参数文件。

命令

cd $ORACLE_HOME/dbs
ls -l

关键文件

-rw-r----- 1 oracle oinstall 2560 Aug 29 06:06 spfile<SID>.ora

结论:实例名为 <SID>,存在服务器参数文件 spfile<SID>.ora

4. 尝试启动数据库(遇到磁盘满错误)

目的:启动数据库实例。

命令

export ORACLE_SID=<SID>
export ORACLE_HOME=/oracle/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
sqlplus / as sysdba

错误输出

ERROR:
ORA-09925: Unable to create audit trail file
Linux-x86_64 Error: 28: No space left on device

结论/oracle 分区已满,无法创建审计文件。

5. 检查磁盘空间

目的:确认哪个分区空间耗尽。

命令

df -h

关键输出

/dev/vdb1                500G  500G   20K 100% /oracle

结论/oracle 分区使用率达到 100%,仅剩 20KB 空间。

6. 查找占用空间最大的目录

目的:定位大文件位置。

命令

cd /oracle
du -sh * | sort -hr | head -20

输出

490G    oradata
5.4G    soft
4.3G    product
...

进一步细化

cd /oracle/oradata
du -sh * | sort -hr
# 输出:490G    <SID>
cd <SID>
du -sh * | sort -hr

关键输出(部分):

32G <SID>_CDATA.DBF
28G temp01.dbf
23G <SID>_CDATA04.DBF
...

结论temp01.dbf 为临时表空间文件,大小 28GB,数据库关闭时内容无效,可安全删除。

7. 删除临时文件释放空间

目的:释放足够的磁盘空间,使数据库能正常启动。

命令

rm -f /oracle/oradata/<SID>/temp01.dbf
df -h /oracle   # 验证可用空间增加(约28G)

结果:可用空间恢复至约 28GB,满足启动需求。

8. 启动数据库

目的:将数据库实例从关闭状态启动至 OPEN 状态。

命令(重新设置环境变量并启动):

export ORACLE_SID=<SID>
export ORACLE_HOME=/oracle/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
sqlplus / as sysdba

在 SQL*Plus 中执行

startup;

输出

ORACLE instance started.
Total System Global Area 4275781632 bytes
...
Database mounted.

说明:数据库挂载(MOUNTED)成功,但因缺少临时文件未自动打开。

9. 完全打开数据库并重建临时文件

目的:处理因 temp01.dbf 缺失导致的打开失败,重建临时表空间文件。

在 SQL*Plus 中执行

-- 为临时表空间添加新文件(根据实际临时表空间名,通常为 TEMP)
alter tablespace temp add tempfile '/oracle/oradata/<SID>/temp01.dbf' size 1000M autoextend on maxsize 30G;

-- 打开数据库
alter database open;

(如果上述命令成功,则会显示 Database altered. 和 Database opened.)

备用方案(如果 add tempfile 报错):

alter database datafile '/oracle/oradata/<SID>/temp01.dbf' offline drop;
alter database open;
-- 然后重新创建临时文件
alter tablespace temp add tempfile '/oracle/oradata/<SID>/temp01.dbf' size 1000M autoextend on maxsize 30G;

10. 强制动态注册

目的:立即让监听器识别到数据库服务,无需等待自动注册周期。

命令(仍在 SQL*Plus 中):

alter system register;

11. 验证监听器状态

目的:确认服务已成功注册。

命令(退出 SQL*Plus 后执行):

lsnrctl status

关键输出

Services Summary...
Service "<SID>" has 1 instance(s).
  Instance "<SID>", status READY, has 1 handler(s) for this service...

结论:数据库服务已正常注册,ORA-12514 错误解决。

最终状态

  • 数据库实例 <SID> 已完全打开并正常运行。
  • 监听器 LISTENER 已注册服务,客户端可通过服务名 <SID> 连接。
  • 临时表空间文件已重建,磁盘空间暂时得到缓解(后续需持续监控并清理不必要的文件)。

备注:整个过程的核心是从磁盘空间满问题入手,清理临时文件,启动数据库,重建缺失文件,最后强制注册监听器。每一步均保留了原始命令和关键输出,供后续参考。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • oracle 库中有表 但是查询显示表不存在的问题

    oracle 库中有表 但是查询显示表不存在的问题

    这篇文章主要介绍了oracle 库中有表 但是查询显示表不存在,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Oracle数仓中判断时间连续性的几种SQL写法示例

    Oracle数仓中判断时间连续性的几种SQL写法示例

    这篇文章主要给大家介绍了关于Oracle数仓中判断时间连续性的几种SQL写法,文中通过实例代码介绍的非常详细,对大家学习或者使用Oracle具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • Oracle数据库技术(37)

    Oracle数据库技术(37)

    Oracle数据库技术(37)...
    2007-03-03
  • oracle基础语法详解

    oracle基础语法详解

    这篇文章主要介绍了oracle基础语法详解,非常适合Oracle数据库的初步学习,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Oracle集合运算符详解:UNION和UNION ALL的区别是什么

    Oracle集合运算符详解:UNION和UNION ALL的区别是什么

    还在为Oracle集合查询头疼吗?本文用清晰示例讲解UNION、UNION ALL、INTERSECT和MINUS的用法与区别,帮你掌握列匹配、去重规则和ORDER BY排序技巧,让你的SQL查询更高效准确
    2026-08-08
  • oracle中截断表的使用介绍

    oracle中截断表的使用介绍

    Oracle中如果删除了表中的某一条数据,还可以通过回滚操作(rollback)进行回滚,假如想清空一张表的数据,但是又不想使其能进行回滚操作,就可以立刻释放资源,这时就需要使用截断表
    2012-11-11
  • oralce 计算时间差的实现

    oralce 计算时间差的实现

    这篇文章主要介绍了oralce 计算时间差的实现的相关资料,需要的朋友可以参考下
    2017-05-05
  • Oracle表中重复数据去重的方法实例详解

    Oracle表中重复数据去重的方法实例详解

    这篇文章主要介绍了Oracle表中重复数据去重的方法实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • 教你如何静默安装ORACLE

    教你如何静默安装ORACLE

    这篇文章主要介绍了教你如何静默安装ORACLE,需要的朋友可以参考下
    2014-08-08
  • Oracle在PL/SQL中嵌入SQL语句

    Oracle在PL/SQL中嵌入SQL语句

    这篇文章介绍了Oracle在PL/SQL中嵌入SQL语句的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05

最新评论