sqlnet.ora文件在Oracle 23c等新版本静默安装后不会自动生成,需手动创建于TNS_ADMIN指定路径(或$ORACLE_HOME/network/admin);最小配置只需两行:NAME.DIRECTORY_PATH=(TNSNAMES,EZCONNECT)和SQLNET.ALLOWED_LOGON_VERSION_SERVER=8,修改后立即生效,无需重启监听器。
sqlnet.ora 文件不是安装时必生成的
oracle 23c(包括 21c、19c 等较新版本)在静默安装或最小化安装后,sqlnet.ora 文件**不会自动创建**——它只在明确运行 oracle net configuration assistant(netca)或使用图形化 dbca 配置网络时才生成。单纯解压安装包、运行 runinstaller 并完成数据库创建,$oracle_home/network/admin/ 下很可能只有空目录,甚至不存在 admin 子目录。
手动创建前先确认 TNS_ADMIN 是否生效
直接往 $ORACLE_HOME/network/admin/ 里建文件不一定起作用,因为 Oracle 优先读取 TNS_ADMIN 环境变量指向的路径。常见错误是:用户设置了 TNS_ADMIN 指向自定义目录(如 C:\oracle\netconf),却在 $ORACLE_HOME 下新建了 sqlnet.ora,结果连接时完全不加载。
- Windows:用
echo %TNS_ADMIN%查看是否已设;未设则默认 fallback 到$ORACLE_HOME/network/admin - Linux:用
echo $TNS_ADMIN;若输出为空,再确认$ORACLE_HOME是否正确(env | grep ORACLE_HOME) - 如果
TNS_ADMIN已设置,就**必须在该路径下创建文件**,而不是$ORACLE_HOME下
创建 sqlnet.ora 的最小可用内容
空文件或语法错误的 sqlnet.ora 会导致连接失败(比如 ORA-12154)。最简但能覆盖多数场景的配置只需两行:
NAME.DIRECTORY_PATH=(TNSNAMES, EZCONNECT) SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
说明:
-
NAME.DIRECTORY_PATH决定解析连接字符串的顺序,TNSNAMES表示先查tnsnames.ora,EZCONNECT支持user/pwd@host:port/service这类直连写法 -
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8是解决 ORA-28040(认证协议不匹配)的刚需项,尤其对接老客户端(如 Oracle 11g 客户端连 23c 服务端) - 不需要加
ADR_BASE或其他参数,除非你明确需要诊断日志路径控制
改完不重启监听器也生效?要看改的是哪类参数
sqlnet.ora 中的参数分两类:
- 影响**新连接建立**的(如
SQLNET.ALLOWED_LOGON_VERSION_SERVER、NAME.DIRECTORY_PATH):修改后保存即生效,无需重启监听器或实例,下次新连接就会读取 - 影响**已有连接行为**的(如
SQLNET.EXPIRE_TIME、SQLNET.RECV_TIMEOUT):仅对后续新建连接生效,旧连接仍按原参数运行,直到断开重连 - 唯一需要重启监听器的情况:你同时修改了
listener.ora或启用了sqlnet.ora中依赖监听器重载的特性(极少见)
所以,99% 的手动创建场景,改完保存,立刻试连即可。别被“要重启”这种泛泛说法带偏。


















