解决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 正常运行时间 0 天 3 小时 10 分 50 秒 跟踪级别 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看是否正常