oracle服务器异常关闭,断电,导致oracle控制文件版本不一致,报错ora-12514,ora-00214解决记录

  解决oracle无法连接,首先检查数据库的监听是否正常,监听命令:

                lsnrctl status  查看监听器命令   lsnrctl start  会看到启动成功的界面    lsnrctl stop  停止监听器命令

    正常的监听启动后会看到orcl的实例,如果没有,说明监听有问题

Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>lsnrctl status

LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 13-7月 -2018 23:1
2:59

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ
ction
启动日期                  13-7月 -2018 20:02:08
正常运行时间              03 小时 1050 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          d:\app\Administrator\product\11.2.0\dbhome_1\network\a
dmin\listener.ora
监听程序日志文件          d:\app\administrator\diag\tnslsnr\txf\listener\alert\l
og.xml
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
  实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个实例。
  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个实例。
  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功

C:\Users\Administrator>

 

  控制文件介绍:

  每一个oracle都至少会生成一个控制文件,一个数据库可以拥有多个控制文件,但是一个控制文件只能属于一个数据库。

  控制文件内部除了存放数据库名及其创建日期,数据文件,日志文件等相关信息,在系统运行的过程中还会存放系统更改号,检查点信息及归档的当前状态等信息。

出于安全考虑,数据库会自动创建2到3个控制文件,每个控制文件记录相同的信息,这个可以确保在数据库运行时,某个控制文件损坏,oracle会自动使用另一个控制文件,当所有控制文件损坏时,数据库将无法工作。

注:通过 v$controlfile 可以查看oracle的控制文件信息。
select name from v$controlfile 

 本次问题发生情况:服务器异常断电,启动后,oracle无法连接,使用plsql连接报错ora12514监听出现问题,进一步检查后发现是控制文件不一致,导致数据库无法启动。

解决步骤:

cmd窗体运行以下语句

1.使用nolog模式,DBA登录

sqlplus /nolog

conn / as sysdba

2.先关闭数据库

shutdown immediate

3.使用nomount模式登录

startup nomount

4.拷贝其中一个控制文件到另外一个地方,完成替换

host copy D:\app\Administrator\oradata\orcl\control01.ctl D:\app\Administrator\flash_recovery_area\orcl\control02.ctl

5.手动启动到mount模式

alter database mount;

6.手动启动到open模式

alter database open;

注:本次解决问题的关键在于搞清楚数据库不同的启动模式的区别。

直接使用startup命令启动数据库,数据库会自动按次序执行nomount,mount,open模式打开数据库,这样就会生成新的控制文件,

因为服务器异常断电后,原有的控制文件不一致,所以就会导致数据库启动不了

因此先以nomount模式启动:只会创建实例,不加载数据库,也不会打开任何数据文件然后使用host copy命令复制其中一个控制文件到另外一个控制文件的地方,

再启动到mount,open模式,问题解决。

 

2017年11月8日17:16:01

再记录一次无法连接的问题:

问题描述:服务器归档内容过多,手动删除归档日志后,plsql连接不上,客户端sqlplus连不上, 服务端sqlplus能连接

sqlplus当中的错误为:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
进程 ID: 0
会话 ID: 0 序列号: 0

解决步骤:sqlplus /nolog模式登录(如果直接在cmd当中无法登录的话,可以尝试dos命令cd进入到D:\app\Administrator\product\11.2.0\dbhome_1\BIN目录下连接)

登录后使用shutdown immediate命令,start命令,将数据库关闭,启动

如果在start命令启动后启动后出现如下错误:通信通道的文件结尾问题

SQL> startup open hstestdb
ORACLE 例程已经启动。

Total System Global Area 6847938560 bytes
Fixed Size                  2188768 bytes
Variable Size            3422554656 bytes
Database Buffers         3405774848 bytes
Redo Buffers               17420288 bytes
数据库装载完毕。
ORA-03113: 通信通道的文件结尾
进程 ID: 2984
会话 ID: 5 序列号: 3

再次shutdown immediate关闭数据库,然后再启动到 startup mount模式,查询一下select * from v$log;看一下数据库最后正常的时间

执行recover database until time '2013-03-01 12:12:12';恢复一下

SQL> recover database until time '2013-03-01 12:12:12';
完成介质恢复。

再执行alter database open resetlogs; 更改恢复的内容

SQL> alter database open resetlogs;

数据库已更改。

注意如果没有恢复,直接执行alter database open resetlogs应该会有如下提示

SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效

最后使用startup再把数据库例程启动。

 

还有一种试验解决监听问题的方法:

找到D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN

将listener.ora和tnsnames.ora文件中的HOST名字依次改成ip地址;计算机名;127.0.0.1;localhost然后启动oracle看是否正常

 

posted @ 2017-11-08 17:16  北湮  阅读(5334)  评论(1编辑  收藏  举报