如何从WSL2 Ubuntu环境连接Windows 10主机的Oracle 19c数据库
WSL2 Ubuntu访问Windows侧Oracle 19c排障指南
场景说明
Windows 10主机本地部署Oracle 19c,同设备启用WSL2 Ubuntu环境,WSL内已安装Oracle Instant Client与sqlplus工具,连接时出现三类TNS相关报错:
- 使用固定IP走EZCONNECT连接时报
ORA-12170: TNS:Connect timeout occurred - 使用tns别名连接时报
ORA-12154: TNS:could not resolve the connect identifier specified - 直接输入本地用户名(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/orclsource ~/.bashrc生效后,直接输入用户名密码即可连接。
3. 解决ORA-12154无法解析连接标识符
这个报错是因为使用@orcl这类别名连接时,sqlplus找不到对应的tns解析配置,按以下方式处理:
- 最简方案:直接使用EZCONNECT格式连接,不需要配置任何tns文件,命令格式如下:
Instant Client默认开启EZCONNECT支持,不需要额外配置即可使用。sqlplus 用户名/密码@//Windows主机IP:1521/orcl - 若需要使用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/adminsource ~/.bashrc生效后,即可使用sqlplus 用户名/密码@orcl的格式正常连接。
最终验证
网络层打通、配置完成后,在WSL终端执行连接命令,即可正常访问Windows侧的Oracle 19c数据库。
内容的提问来源于stack exchange,提问作者lakshmi narayanan
相关产品推荐
相关产品推荐

