解决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看是否正常
|