ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
这个问题很头疼,找了很多博客,大家的回答都差不多,经过很久之后,终于弄懂了,现在记录一下
问题背景:shutdown数据库后,一直用不了DBA权限,也就是conn scott/scott@orcl as sysdba会提示ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
产生原因:Oracle9i之后有些设定被修改了,这就导致了oracle10的一些操作会出错。我们通过修改配置文件,其目的是让oracle服务重启之后,自动加载数据库的相关配置。
解决方案:
1、找到listener.ora文件
这个文件的路径在D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN,其中我的oracle安装在了D:\oracle,也就是说前两个地址不太一样,后面的product\10.2.0\db_1\NETWORK\ADMIN都是一样的,在你电脑里面找到oracle后,找到product\10.2.0\db_1\NETWORK\ADMIN后找到listener.ora文件就好了
2、原本文件是
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORACLE)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = orcl)
)
)
修改成
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORACLE)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = orcl)
)
)
注意!!!!不要人云亦云!!!!看你的电脑配置是什么!!!!!
首先要保证后来添加的
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(SID_NAME = orcl)
)
里面的GLOBAL_DBNAME和SID_NAME的名称要一致(严格区分大小写!!!!)
3、找到tnsnames.ora文件(这个文件和上一个文件在同一个目录下)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
里面的SERVICE_NAME要和上面GLOBAL_DBNAME和SID_NAME的名称一致(同样严格区分大小写!!!!)
4、oracle的所有服务重新启动(或者重新启动电脑也可以)
之后就会发现conn scott/scott@orcl as sysdba可以用了(注意我电脑里面的scott用户的密码是scott!!不要不结合自己电脑的实际去解决问题)