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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按照网上的一些教程,在创建完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)
    )
  )



<think>好的,用户遇到了在Windows系统中连接Oracle数据库时出现的ORA-12154错误,需要解决方案。首先,我需要回忆一下这个错误的常见原因和解决方法。根据提供的引用内容,ORA-12154通常是由于TNS配置问题导致的,比如tnsnames.ora文件中的配置错误,或者监听服务没有正确配置。 首先,用户的问题可能出在tnsnames.ora文件的配置上。引用[2]提到,这个错误是因为没有正确配置监听,需要检查tnsnames.ora中的条目是否正确,包括监听名称、主机IP、端口和服务名。另外,引用[3]和[4]也提到监听程序和服务是否启动,所以需要确认Oracle的监听服务(如OracleOraDb11g_home1TNSListener)和对应的数据库服务(如OracleServiceORCL)是否正在运行。 接下来,要整理解决步骤。第一步应该是检查tnsnames.ora文件的位置是否正确,通常在ORACLE_HOME的network/admin目录下。然后核对文件中的配置是否符合格式,比如是否有拼写错误,主机IP是否正确,服务名是否与远程数据库一致。同时,要确保监听程序配置正确,可以使用Net Manager工具来检查,如引用[3]所述。 另外,用户可能配置了多个Oracle客户端,导致使用了错误的tnsnames.ora文件,需要检查环境变量TNS_ADMIN是否指向正确的目录。如果配置正确,但问题依旧,可能需要重启监听服务和数据库实例,如引用[4]提到的服务启动问题。 还要注意连接字符串的格式是否正确,使用Easy Connect方式测试是否能连接,比如sqlplus username/password@host:port/service_name,这有助于判断是否是TNS配置的问题。如果Easy Connect能连接,说明问题确实出在TNS配置上。 最后,要确保所有步骤中的细节都被覆盖,比如路径是否正确,服务是否启动,配置是否有语法错误等。同时,根据引用中的案例,可能需要处理其他相关错误,如ORA-12514,但用户当前的问题主要是12154,所以先集中在TNS配置和服务检查上。</think>### 分步解决方案:Windows系统Oracle ORA-12154错误排查与修复 #### 1. 检查TNS配置文件的完整性和路径 - **验证文件位置** TNS配置文件$tnsnames.ora$默认路径为$ORACLE_HOME\NETWORK\ADMIN$(例如:`C:\app\oracle\product\19.0.0\dbhome_1\NETWORK\ADMIN`)。若使用多版本客户端,需确认环境变量$TNS_ADMIN$是否指向正确的目录[^2][^3]。 - **检查配置语法** 打开$tnsnames.ora$文件,确认连接描述符格式正确,例如: ```plaintext ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) ) ) ``` 需重点检查$HOST$(IP地址)、$PORT$(默认1521)、$SERVICE_NAME$是否与远程数据库一致[^4]。 --- #### 2. 验证Oracle服务状态 - **启动监听服务** 按`Win+R`输入`services.msc`,查找以下服务: - `OracleOraDb19c_home1TNSListener`(监听服务) - `OracleServiceORCL`(数据库实例服务,名称根据实际调整) 确保这两个服务状态为**已启动**,若未启动需手动启动[^3]。 --- #### 3. 使用Net Manager工具配置 1. 打开`Oracle Net Manager`(开始菜单 > Oracle目录 > 配置和移植工具) 2. 在**服务命名**中添加或修改连接描述符: - 输入网络服务名(如`ORCL_TEST`) - 选择协议为`TCP/IP`,填写正确的主机IP和端口 - 服务名需与数据库实例的$SERVICE_NAME$一致(可通过远程服务器执行`SHOW PARAMETER service_names`查询) --- #### 4. 测试连接并排查其他可能性 - **使用TNSPING工具验证** 命令行执行: ```bash tnsping ORCL ``` 若返回`OK`表示TNS解析正常,否则需重新检查配置。 - **尝试Easy Connect语法** 直接通过SQLPlus连接: ```bash sqlplus username/password@192.168.1.100:1521/ORCL ``` 若此方式成功但TNS连接失败,则确认是TNS配置问题。 --- #### 5. 处理特殊情况 - **客户端版本冲突** 若安装过多个Oracle客户端(如PL/SQL Developer自带客户端),需: 1. 检查`PATH`环境变量中Oracle客户端的优先级 2. 在连接工具中显式指定$TNS_ADMIN$路径 - **防火墙拦截** 确保1521端口在服务器和客户端防火墙中已放行。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值