You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从WSL2 Ubuntu环境连接Windows 10主机的Oracle 19c数据库

WSL2 Ubuntu访问Windows侧Oracle 19c排障指南

场景说明

Windows 10主机本地部署Oracle 19c,同设备启用WSL2 Ubuntu环境,WSL内已安装Oracle Instant Client与sqlplus工具,连接时出现三类TNS相关报错:

  1. 使用固定IP走EZCONNECT连接时报ORA-12170: TNS:Connect timeout occurred
  2. 使用tns别名连接时报ORA-12154: TNS:could not resolve the connect identifier specified
  3. 直接输入本地用户名(SYSTEM/sys)连接时报ORA-12162: TNS:net service name is incorrectly specified

分步排障方案

1. 解决ORA-12170连接超时问题

这个报错本质是网络层不通,按以下顺序检查:

  • 不要写死WSL访问Windows的虚拟IP。WSL2每次重启都会重新分配虚拟网段IP,手动固定的172.22.100.119大概率在重启后失效,在WSL终端执行以下命令获取当前生效的Windows主机虚拟IP:
    cat /etc/resolv.conf | grep nameserver | awk '{print $2}'
    
  • 放行Windows防火墙对WSL网段的1521端口拦截。WSL2属于独立虚拟网络,默认Windows防火墙会拦截该网段的入站请求,可在Windows高级安全防火墙中添加入站规则:放行TCP 1521端口,作用域选择WSL所属的虚拟专用网络;临时测试阶段也可短暂关闭专用网络防火墙验证连通性,确认问题后再配置精细化规则。
  • 确认Windows侧Oracle监听配置正常。首先检查Windows服务中OracleOraDB19Home1TNSListener、OracleServiceORCL两个服务处于运行状态;打开Oracle Net Configuration Assistant,确认监听程序绑定地址为0.0.0.0(不要仅绑定127.0.0.1回环地址),监听端口为默认1521;最后在Windows本地cmd执行以下命令验证本地监听可用:
    sqlplus /nolog
    SQL> conn sys/你的sys用户密码@//127.0.0.1:1521/orcl as sysdba
    
    本地能正常登录说明监听和实例本身无问题。
  • 网络层连通性验证:在WSL终端执行telnet 上一步获取的Windows主机IP 1521,如果返回黑屏无报错,说明网络层已经打通。

2. 解决ORA-12162网络服务名指定错误

这个报错是因为WSL/Linux环境下sqlplus默认不会连接本地实例,直接输入用户名不带连接串时,会读取TWO_TASK环境变量获取默认连接目标,未配置该变量就会触发报错。两种处理方式:

  • 连接时显式写全连接串,不依赖默认配置
  • 若需要默认直接连接,在WSL的~/.bashrc文件中添加以下环境变量:
    export TWO_TASK=//前面获取的Windows主机IP:1521/orcl
    
    执行source ~/.bashrc生效后,直接输入用户名密码即可连接。

3. 解决ORA-12154无法解析连接标识符

这个报错是因为使用@orcl这类别名连接时,sqlplus找不到对应的tns解析配置,按以下方式处理:

  • 最简方案:直接使用EZCONNECT格式连接,不需要配置任何tns文件,命令格式如下:
    sqlplus 用户名/密码@//Windows主机IP:1521/orcl
    
    Instant Client默认开启EZCONNECT支持,不需要额外配置即可使用。
  • 若需要使用tns别名连接,先找到Instant Client的安装目录,在目录下创建network/admin层级文件夹,在该文件夹内新建tnsnames.ora文件,写入以下配置:
    orcl =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 前面获取的Windows主机IP)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = orcl)
        )
      )
    
    之后在~/.bashrc中添加环境变量指定tns配置路径:
    export TNS_ADMIN=你的Instant Client安装绝对路径/network/admin
    
    执行source ~/.bashrc生效后,即可使用sqlplus 用户名/密码@orcl的格式正常连接。

最终验证

网络层打通、配置完成后,在WSL终端执行连接命令,即可正常访问Windows侧的Oracle 19c数据库。

内容的提问来源于stack exchange,提问作者lakshmi narayanan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:03:24