ORACLE-ORA-12154:TNS:could not resolve the connect identifier specified

本文详细介绍了在Oracle数据库中创建DBLINK并访问远程库数据时遇到ORA-12154错误的解决方法。通过查询权限、赋予权限、配置TNS文件等步骤,并在服务器端也添加远程数据库配置,最终成功解决访问问题。

按照网上的一些教程,在创建完DBLINK之后,使用之前的DBLINK标识访问远程库数据的时候就报以下错误

ORA-12154:TNS:could not resolve the connect identifier specified

我就纳闷了,明明是按照网上的步骤来创建的,为啥别人的就可以,我的就失败了?

以下是创建的语句:

1.查询当前用户是否具有创建DBLINK的权限

select * from user_sys_privs 
 where privilege like upper('%DATABASE LINK%'); 

2.给用户赋创建DBLINK的权限

grant create public database link,drop public database link to scott;  

3.查看TNS文件里的远程数据库标识(remote_db),一般如下格式:

remote_db =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = remote_ip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

注:上面的remote_ip是远程数据库的IP地址

4.创建DBLINK

create public database link remote_db
connect to orcl identified by a123
using 'remote_db' ;  

注意:如果密码是纯数字的话,会一直报“ORA-00933:SQL命令未正确结束”。我的测试数据库版本是11GR2。

网上一些人说10G以前才会出现这样的错误,但是,我没有去验证这个说法了。反正我将密码修改成非全数字后就没有报这个错误。


然后,创建成功后,我运行以下语句的时候却报ORA-12154错误

select * from user_tables@remote_db ; 


由于我一直使用PL/SQL DEVELOPER10开发,而这个版本是不支持64位的数据库系统。所以,我就使用以下方法来访问数据库

64位oracle无法使用pl/sql dev 解决

所以,远程数据库的TNS配置标识,我也只是在客户端里配置。

后来看了下网上的一些帖子说,要在服务器的TNS文件里也加上remote_db的配置。

于是我将下面的配置添加到服务器的TNS文件里,问题解决。

remote_db =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = remote_ip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )



### ### Oracle ORA-12154 错误:TNS 无法解析连接标识符的解决方法 当用户尝试通过 SQL*Plus 或其他 Oracle 客户端工具连接数据库时,如果遇到 **ORA-12154: TNS:could not resolve the connect identifier specified** 错误,通常表示客户端无法解析 `tnsnames.ora` 文件中定义的连接标识符,或连接字符串格式不正确 [^1]。 #### 检查连接字符串格式 如果使用 Easy Connect 命名方法(即不依赖 `tnsnames.ora` 文件),请确保连接字符串格式正确: ```bash sqlplus username/password@//hostname:port/service_name ``` 例如: ```bash sqlplus scott/tiger@//localhost:1521/orcl ``` 如果使用 `tnsnames.ora`,确保连接标识符存在于 `tnsnames.ora` 文件中,并且格式正确。例如: ```ini ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) ``` #### 验证 TNS_ADMIN 环境变量 如果 `tnsnames.ora` 文件不在默认位置(如 `$ORACLE_HOME/network/admin`),应设置 `TNS_ADMIN` 环境变量指向包含该文件的目录: ```bash export TNS_ADMIN=/u01/app/oracle/network/admin ``` 在 Windows 系统中: ```cmd set TNS_ADMIN=C:\oracle\network\admin ``` #### 检查 SQL*Net 配置文件 确保 `sqlnet.ora` 中的 `NAMES.DIRECTORY_PATH` 包含 `TNSNAMES`,以启用对 `tnsnames.ora` 的解析: ```ini NAMES.DIRECTORY_PATH=(TNSNAMES, EZCONNECT) ``` #### 使用 tnsping 验证连接标识符 使用 `tnsping` 工具测试连接标识符是否可解析: ```bash tnsping orcl ``` 如果返回 `OK`,说明连接标识符解析正常;否则需检查 `tnsnames.ora` 文件路径和内容。 #### 检查环境变量 ORACLE_HOME 和 PATH 确保 `ORACLE_HOME` 设置正确,并且 `$ORACLE_HOME/bin`(或 `%ORACLE_HOME%\bin`)包含在 `PATH` 环境变量中,以确保 SQL*Plus 和其他工具能正确加载 Oracle 网络库 [^1]。 #### 检查远程数据库监听状态 虽然 ORA-12154 通常与本地配置有关,但仍需确认远程数据库监听器正在运行,并可通过网络访问: ```bash lsnrctl status ``` 如果监听器未运行,启动监听器: ```bash lsnrctl start ``` #### 检查主机名和 DNS 解析 如果使用主机名连接数据库,确保主机名可解析为 IP 地址。可以通过 `ping` 或 `nslookup` 验证: ```bash ping localhost nslookup localhost ``` 如果使用 IP 地址,确保 `tnsnames.ora` 或连接字符串中的地址正确无误。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值