Win7 64 位系统 VS2010 连接 oracle 10g ORA-12154: TNS: 无法解析指定的连接标识符

本文提供了解决Win7 64位系统使用VS2010连接Oracle10g时遇到ORA-12154错误的详细步骤。包括下载最新版instantclient软件、配置Path和tns_admin环境变量,以及针对Web项目解决方法。

问题描述:

Win7 64 位系统 VS2010 连接 oracle 10g

报错:

ORA-12154: TNS: 无法解析指定的连接标识符

 

解决方案:

1、去网上下载“instantclient-basic-win32-11.2.0.1.0.zip”http://www.oracle.com/technetwork/topics/winsoft-085727.html选最新的下载

2、下载下来解压并拷贝到安装Oracle11g目录的Client中(oracle目录),我的电脑上为:“D:\oracle\product\10\client1”

3、配置Path环境变量

    选择计算机右击属性-》选择左边的高级系统设置-》选择高级选项卡,选择环境变量-》找到Path变量,选择编辑

    再把刚才 instantclient 的路径“D:\oracle\product\10\client1\instantclient11;”拷贝到最前面。结果为:“D:\oracle\product\10\client1\instantclient11;”如图:

4、配置tns_admin环境变量

   在环境变量中增加“tns_admin”变量。值为安装时的Clent\network\admin目录。我电脑上的值为:“D:\oracle\product\10\client1\NETWORK\ADMIN”,如下图:

如果不是Web 程序,关闭VS,重新调试成功。

如果是Web project 还是有以上问题,可以用以下方法解决:

C:\Program Files(x86)\Common Files\Microsoft Shared\DevServer\9.0\WebDev.WebServer.EXE

就是這該死的 (x86) 出現在路徑中,導致我的 ASP.NET 怎樣都無法連線到程式,為了驗證確定就是這問題,我試著利用 Process Explorer 找出 WebDev.WebServer.EXE 的啟動參數:

 

並重新透過 cmd.exe (命令提示字元) 啟動 WebDev.WebServer.EXE,這時故意用「短目錄」啟動 ASP.NET 開發伺服器,如下指令:

"C:\PROGRA~2\Common Files\Microsoft Shared\DevServer\9.0\WebDev.WebServer.EX 
E"  /port:5970 /path:"D:\XXXX\XXX\Website"/vpath:"/"

 

大部分人在測試 ASP.NET 程式時,大多按下 F5 (開始偵錯)(Start Debugging) 進入 ASP.NET 偵錯模式,不過我個人覺得這個程序非常的慢,所以大多不會直接按下 F5,而是先用 Ctrl + F5 直接看執行的結果,速度會快很多,因為大部分時候只是看執行結果,並沒有設定中斷點,無須進入偵錯模式。我之前曾經提過兩篇(這篇 這篇) Visual Studio 中關於 Attach toProcess 的文章,所以當我需要除錯時才會利用 Attach toProcess WebDev.WebServer.EXE 程序附加上去,就可以進入偵錯模式了。

附加的步驟十分簡單,只需兩個步驟:

总结:

1.cmd运行: "C:\WebDev.WebServer40.exe"  /port:54039 /path:"E:\coding\code\bnProject\Web" /vpath:"/Web"


2.VS2010 工具->附加到进程


2.浏览器: http://localhost:54039/Web/Default.aspx

 

### 常见原因分析 Oracle 错误 `ORA-12154` 表示客户端无法解析指定连接标识符,通常是因为 `tnsnames.ora` 文件中未定义目标数据库的连接描述,或者连接字符串格式不正确。在使用 `impdp` 或 `imp` 命令导入 `.dmp` 文件时,如果连接字符串中的服务名或 SID 配置错误,就会触发该错误[^1]。 例如,用户执行以下命令: ```bash impdp qd20_user/qd20_password@orcl directory=dump_dir dumpfile=qd20_1_320722.dmp full=y ``` 如果 `tnsnames.ora` 中未定义 `orcl` 的连接描述,则会报错 `ORA-12154`[^2]。 --- ### 解决方案 #### 1. 检查 `tnsnames.ora` 文件配置 确保 `tnsnames.ora` 文件中包含目标数据库的服务名定义。该文件通常于 `$ORACLE_HOME/network/admin` 目录下。示例配置如下: ```plaintext ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) ``` 若实际数据库服务名不同,例如为 `upbs`,则需修改为对应的 `SERVICE_NAME` 或 `SID`[^2]。 #### 2. 使用完整连接字符串 如果无法修改 `tnsnames.ora` 文件,可以在导入命令中直接使用完整连接字符串,格式如下: ```bash impdp qd20_user/qd20_password@"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))" directory=dump_dir dumpfile=qd20_1_320722.dmp full=y ``` 这种方式可以绕过 `tnsnames.ora` 的配置限制,适用于临时测试或环境切换场景[^4]。 #### 3. 使用 `EZCONNECT` 简化连接方式 Oracle 提供了 `EZCONNECT` 方式,允许使用简化的连接语法: ```bash impdp qd20_user/qd20_password@//localhost:1521/orcl directory=dump_dir dumpfile=qd20_1_320722.dmp full=y ``` 该方式无需配置 `tnsnames.ora`,适合快速连接测试[^4]。 #### 4. 验证监听器状态 如果连接字符串正确但仍然报错,可能是因为监听器未启动。可以使用以下命令检查监听器状态并启动: ```bash lsnrctl status lsnrctl start ``` 确保监听器配置与 `tnsnames.ora` 中的 `ADDRESS` 部分一致[^2]。 --- ### 其他注意事项 - 确保 `ORACLE_HOME` 和 `PATH` 环境变量已正确设置,指向当前数据库版本的安装目录。 - 如果使用的是 Oracle 19c 或更高版本,注意服务名和 SID 的区别,推荐使用 `SERVICE_NAME` 而非 `SID`。 -Windows 系统中,`tnsnames.ora` 文件可能于 `D:\oracle\product\19.0.0\dbhome_1\network\admin` 等路径下。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值