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
相关产品推荐
相关产品推荐

