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

Python连接Oracle XE数据库失败:tnsnames.ora文件未找到

Oracle XE连接报错:tnsnames.ora文件找不到解决方法

问题场景

尝试用Python的oracledb库连接Oracle XE单实例数据库,最初未指定config_dir参数,添加该参数指向tnsnames.ora所在路径后,仍报错找不到目标文件。

使用的代码

import getpass
import oracledb

# ===== config_dir是tnsnames.ora的路径
c = oracledb.connect(user='sys', password="my_password", dsn="xe", config_dir="E:/oracle_21c/homes/OraDB21Home/network/admin")

print("Successfully connected to Oracle Database")

报错信息

file tnsnames.ora not found in E:/oracle_21c/homes/OraDB21Home/network/admin

解决步骤

  • 先确认指定路径下确实存在tnsnames.ora文件,检查文件名拼写(注意后缀是.ora,避免大小写或拼写错误)
  • 若文件不存在,手动创建tnsnames.ora,示例内容如下(根据实际主机、端口修改):
    XE =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = XE)
        )
      )
    
  • 验证config_dir路径正确性,确认路径中的文件夹层级、名称均无误(Windows路径支持正斜杠/或双反斜杠\\)
  • 无需依赖tnsnames.ora的替代方案:使用Thin模式直接传入连接字符串作为dsn,示例代码:
    import oracledb
    
    dsn = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)))"
    c = oracledb.connect(user='sys', password="my_password", dsn=dsn, mode=oracledb.AUTH_SYSDBA)
    print("Successfully connected to Oracle Database")
    
  • 注意:sys作为特权用户,连接时必须添加mode=oracledb.AUTH_SYSDBA参数,否则会触发权限错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 15:59:54