解决Oracle数据库错误ORA-16040和ORA-00312

一、问题现象及排查过程

数据库服务器重启后,应用无法正常启动,提示无法连接数据库。看来,问题可能出在数据库服务器上,那就先检查数据库服务器:

1.登录进数据库服务器后,打开cmd命令提示符,输入命令

sqlplus / as sysdba

连入本机数据库,进入sqlplus程序上下文,然后输入命令

select instance_name,status from v$instance;

执行后,提示数据库在mounted状态,而非在open状态,自然无法正常对外提供服务了。难怪应用无法正常启动!原因在此!

2.使用命令打开数据库

alter database open;

执行后,程序报错,提示数据库错误ORA-16040和ORA-00312,在百度上搜这两个错误的解决方法,基本上都是说数据库的归档日志文件有问题,需要修复才能继续。

二、解决办法

既然发现了问题原因,同时也查到了解决办法,那么接下来就直接进入了解决过程。

1.sqlplus程序上下文中,先确定数据库在mounted状态下,然后使用命令

alter database clear unarchived logfile group 1;
alter database clear unarchived logfile group 2;
alter database clear unarchived logfile group 3;

清除归档日志。

2.使用命令

alter database open;

打开数据库,此时sqlplus并没有报错,看来是成功了。

3.使用命令

select instance_name,status from v$instance;

查看数据库的状态,发现数据库已经是open状态了。

4.新开一个cmd窗口,进入lsnrctl监听管理上下文,分别使用stop和start命令重启数据库监听程序。

5.最后,重新启动应用,应用未报错,能够正常启动。问题得到解决。

三、总结

信息系统运行过程中难免会出现各种奇奇怪怪的问题,当出现问题的时候,第一个反应应该是查看现象,然后依据现象去推测可能出现的原因。此例直接是应用报错,提示无法连接数据库,那么就循着这个线索去查找数据库的原因。

在数据库服务器上,找到是由于数据库归档日志的原因造成数据库无法正常启动,那么解决问题的关键就变成了解决归档日志错误的问题。依据数据库的报错信息,在网上查找是否已经有成熟的解决方案(方法),此次运气较好,直接找到了很多相似的解决方法,通过实践,发现确实有效,解决了问题。

时间: 02-28

解决Oracle数据库错误ORA-16040和ORA-00312的相关文章

Oracle数据库错误消息

Oracle数据库错误消息 导出错误消息 l EXP-00000导出终止失败 原因:导出时产生Oracle错误. 操作:检查相应的Oracle错误消息. l EXP-00001数据域被截断 - 列长度=数字,缓冲区大小=数字,实际大小=数字 原因:数据缓冲区中列不适合. 操作:记录错误参数和消息,作为输出内部错误发送到Oracle Support Services(如果一个表不能完全导出,则导出不能继续). l EXP-00002写导出文件错误 原因:不能导入导出文件,可能由设备错误引起,通常伴

Oracle数据库错误大全

ORA-00001: 违反唯一约束条件 (.)ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-00020: 超出最大进程数 ()ORA-00021: 会话附属于其它某些进程:无法转换会话ORA-00022: 无效的会话 ID:访问被拒绝ORA-00023: 会话引用进程私用内存:无法分离会话ORA-00024: 单一进程模式下不允许从多个进程注册ORA-00025: 无法分配ORA-00026: 丢失或无效的会话 I

如何解决Oracle数据库的非归档模式迁移到归档模式中存在的问题

今天在做oracle归档测试的时候发现了几个问题,在这里记录下来希望能得到大家的纰漏和帮助 [[email protected] ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Fri Dec 19 17:34:42 2014 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to: Oracle Database 11g Ente

如何解决oracle数据库过期的情况

之前用的数据库都是开源的,在另一台电脑上安装的时候,居然有时间限制,只能用30天.安装了好多次都是这样,就这样,三十天一破解.破解方法如下: 不管是快要过期了还是已经过期了,都可以用这个方法. 1.在“运行”中输入regedit,回车打开注册表. 2.在注册表里按HKEY_CURRENT_USER\Software这个路径找到“Allround Automations ”,删除它. 3.删除上一步中的后,在找到HKEY_CURRENT_USER\Software\Microsoft\Securi

解决oracle数据库中 ORA-01843: 无效的月份问题

1.这是因为客户端是中文环境,格式mon就不能用英文的月份写法,必须用中文的“六月”如果不想修改sql语句运行的话,就需要在执行该语句之前,使用alter session 命令将nls_date_language修改为american,如下:alter session set nls_date_language='american'以英语显示日期. 2若你的客户端是英文环境,那就是你没有用oracle数据的时间函数查询数据,应在sql语句中使用oracle数据库中的时间函数.

解决oracle数据库 ora-00054:resource busy and acquire with NOWAIT specified 错误

本人在使用pl/sql developer 客户端调用存储过程进行操作时发现中途卡机然后强制终止pl/sql developer 之后,oracle就一直出现锁相关的错误. 经分析认为在调用存储过程时对表进行了DDL语句操作时导致了悲观封锁.客户端卡机后oracle一直没有对这个锁进行释放且一直不会完成释放导致错误. 需要对此会话进行强制杀掉: 1. 查询当前被锁的对象 select t2.username, t2.sid, t2.serial#, t2.logon_time from v$lo

jmeter 连接ORACLE数据库错误及解决方法

问题一: Response message: java.sql.SQLException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver' 未引入ojdbc14.jar包所致,2种解决方案,最好重启一下: 1.在测试计划页面中,点击浏览,选择jar包加入. 2.直接将jar包拷贝到Jmeter的Lib文件夹下面. 问题二: Response message: java.sql.SQLException: Cannot

oracle数据库错误1067

应该是DB所在电脑是DHCP动态IP改变了的问题,1.修改listener .ora下为当前ip地址或者机器名2.修改tnsnames.ora下为当前ip地址或者机器名服务启动失败,可以先在CMD命令行里执行lsnrctl start;看看信息提示.上面修改后.命令行依次执行:lsnrctl status;lsnrctl stop;lsnrctl start;lsnrctl status;应该就可以登录数据库了,如果仍不行.请提供上述命令输出以便分析错误. D:\Oracle\product\1

sqoop连接Oracle数据库错误异常

Sqoop 简单的来说可以实现关系型数据库和HDFS之间的数据互相转移. 大多数的测试资料都是基于mysql的实现 可是在测试连接oracle的时候却出现了问题 错误一:连接问题,在企业级应用中,对于机器的端口通信是有着比较严的控制,所以会经常遇到无法连接数据库.被拒绝的异常 解决  :hadoop的所有节点,包括namenode和datanode的所有机器都需要具有访问数据量的权限,就是需要把这些节点的ip地址都加入到数据库的可访问列表中 错误二:语法问题,这点看了半天网上的写法都是报错 sq