今天在连接数据库的时候登录失败,出现了以下错误:
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
ORA-28547:连接服务器失败,可能时Oracle Net 管理错误
可能是上次突然断电导致的。
解决办法仅代表个人情况,做个记录可做参考。
解决办法:
查看监听状态
TNS-12545: 因目标主机或对象不存在, 连接失败
TNS-12560: TNS: 协议适配器错误
TNS-00515: 因目标主机或对象不存在, 连接失败
然后查看一下数据库必须要起的两个服务
OracleOraDb11g_home1TNSListener 未在运行
OracleServiceORCL
OracleOraDb11g_home1TNSListener 没有运行,实例名和HOST可能不对,就去看listener.ora和tnsnames.ora这个文件。
发现这两个文件的配置跟安装数据库是的配置不符,PLSQL登录失败报的两个错误也是因为这两个文件的配置不对。
两个文件的路径:安装目录\用户名\product\11.2.0\dbhome_1\NETWORK\ADMIN
1.ORA-28547:连接服务器失败,可能时Oracle Net 管理错误和OracleOraDb11g_home1TNSListener服务启动刷新后停止运行
解决办法:
在listener.ora和tnsnames.ora文件中发现实例名不对,应该为orcl:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc )
(ORACLE_HOME = D:\app\ASUS\product\11.2.0\dbhome_1)
#(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\app\ASUS\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
listener.ora修改后:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = D:\app\ASUS\product\11.2.0\dbhome_1)
#(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\app\ASUS\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = D:\app\ASUS
修改tnsnames.ora中的SERVICE_NAME 为orcl:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
HOST修改为localhost或者计算机名
修改完实例名和HOST,启动监听成功
2.ORA-28547:连接服务器失败,可能时Oracle Net 管理错误
解决办法:
修改listener.ora文件:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl )
(ORACLE_HOME = D:\app\ASUS\product\11.2.0\dbhome_1)
#(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\app\ASUS\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
把(PROGRAM = extproc)注释掉解决问题