1. 首先查看tnsnames.ora,路径如下:
oracle安装目录\product\10.2.0\db_1\NETWORK\ADMIN\。看其中是否包含了你的连接描述符中的服务,也就是你请求的服务。如果没有,则可以手动添加,比如:
service_ex =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = service_ex)
)
)
可以参照tnsnames.ora中已有的服务描述。
2. 再检查listener.ora,该文件与tnsnames.ora位于相同目录下。监听器启动时会读取这个文件,使用其中的信息来识别连接请求中的服务。所以出现ORA-12514错误时,大部分是因为这个文件有问题引起的。在这个文件中,我们要查看其中的服务名是否与tnsnames.ora中的服务名一致。如果不一致,则可以手动修改,就上面的例子来说,修改前的listener.ora可能是:
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
)
从上面的例子中可以看出,这个LISTENER中没有包含于tnsnames.ora对应的服务名,因此我们可以做如下的修改:
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = service_ex)
)
)
完成修改后,重新启动监听服务,问题基本上都可以得到解决。
3. 如果还是出现同样的错误,也不用着急。Oracle的监听程序要比数据库服务启动的晚,当数据库服务启动之后,会修改listener.ora,把服务名写进listener.ora中,然后监听服务启动时读这个文件。但是在计算机启动时,有可能出现数据库服务还没有来得及修改listener.ora,监听服务就已经启来了。为了解决这个问题,我们可以把数据库服务跟监听器服务都设为手动启动,先启动数据库服务,然后再启动监听器服务。
4. 除了上述情况外,出现TNS错误时,有可能是因为没有加载数据库实例,加载方法如下:
在SQL/PLUS中输入startup force,强制加载数据库实例。
5. 总结:
ORA-12514错误引起的原因和解决办法基本就是这样,碰到问题时,实际情况实际分析,通过上面介绍的几种方法,多尝试几次,就可以解决了