日期:2014-05-17  浏览次数:20869 次

Linux下的Oracle数据库不能连接问题
在Oracle安装机上,Oracle账户登入:
使用 conn / as sysdba方式可以连接成功。
使用 conn user/password@TNS方式,返回错误ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

1.数据库实例启动的,并且只安装了一个。
2.连接默认数据库实例是成功的。
2.连接时指定ServiceName就会报上面的错误。

什么原因?怎么解决?

谢谢

以上

------解决方案--------------------
TNS 你有没有这个服务名哦?
------解决方案--------------------
探讨
在Oracle安装机上,Oracle账户登入:
使用 conn / as sysdba方式可以连接成功。
使用 conn user/password@TNS方式,返回错误ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

1.数据库实例启动的,并且只安装了一个……

------解决方案--------------------
netca配一个listener嘛

pmon本身有个默认的listener,不通过TNSNAMES解析就能访问。

所以你可以通过/as sysdba访问

但是无法解析你的TNSNAMES.
------解决方案--------------------
查找tnsnames.ora文件,查看里面的连接字符串,如
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ubuntu)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)

用红色部分的当作连接字符串
------解决方案--------------------
oracle登录机制分为二种:一种是使用数据字典,另一种是使用口令文件登录.原因是:普通用户依据数据字典进行身份验证,但是数据字典在数据库打开前无法被读取,从而出现普通用户注定无法启动(或创建)数据库的情况.为了打开数据库,必须通过外部口令文件验证用户的方式.
SQL>conn /as sysdba --这个是利用操作系统身份验证的方式
SQL>conn user/passwd@db
--标准的数据字典身份验证.因为加了@db,oracle要去解析连接字符串db,它会到tnsnames.ora文件里面查找具有某种约定方式的结构(包括host,port,service_name三部分).此外,使用这种方式的话,必须要求侦听打开,通过侦听与数据库交互(tcp的方式).

个人的理解,请大家多多指教.
------解决方案--------------------
@TNS
tns名字没有在tnsnames.ora中注册正确导致。

------解决方案--------------------
探讨

netca配一个listener嘛

pmon本身有个默认的listener,不通过TNSNAMES解析就能访问。

所以你可以通过/as sysdba访问

但是无法解析你的TNSNAMES.

------解决方案--------------------
一句话,没有配置监听,自己配置一下就可以,命令是netca
------解决方案--------------------
高手好多啊!
------解决方案--------------------
conn user/password@xe
把host=ip地址看看
------解决方案--------------------
两种情况,第一,监听配置不正确;
第二,如果是自动注册,则可能没有注册,使用alter system register; 命令注册.