必须配置ORACLE_HOME、ORACLE_SID、TNS_ADMIN和NLS_LANG四个环境变量,缺一不可;其中ORACLE_HOME须指向真实安装目录,PATH需包含%ORACLE_HOME%\BIN且置于前面,TNS_ADMIN须精确指向tnsnames.ora所在路径,NLS_LANG必须与服务端字符集严格一致。

ORACLE_HOME 必须指向真实安装目录,否则 sqlplus、lsnrctl 等命令直接报“不是内部或外部命令”。
Windows 下必须设这 4 个变量
只配 ORACLE_HOME 和 PATH 是不够的,缺一不可:
-
ORACLE_HOME:填 Oracle 安装根目录,比如D:\app\Administrator\product\12.1.0\dbhome_1 -
ORACLE_SID:填数据库实例名(不是服务名),比如orcl;可通过select instance_name from v$instance;确认 -
TNS_ADMIN:指向tnsnames.ora所在目录,比如D:\app\Administrator\product\12.1.0\dbhome_1\NETWORK\ADMIN -
NLS_LANG:必须和服务端字符集一致,查服务端用select value from nls_database_parameters where parameter='NLS_CHARACTERSET';,常见值如AMERICAN_AMERICA.AL32UTF8或SIMPLIFIED CHINESE_CHINA.ZHS16GBK
注意:PATH 中要包含 %ORACLE_HOME%\bin,且该路径必须排在前面,避免系统自带的同名工具(如 sqlplus.exe)被误调用。
Linux 下 LD_LIBRARY_PATH 容易漏设
不设这个,sqlplus 启动时大概率报 libclntsh.so: cannot open shared object file。正确写法是:
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH export PATH=$ORACLE_HOME/bin:$PATH
关键点:
-
LD_LIBRARY_PATH必须显式包含$ORACLE_HOME/lib,不能只靠PATH - 建议在
~/.bash_profile里设置,并执行source ~/.bash_profile生效 - 如果用 systemd 启动监听器或数据库服务,需在 service 文件中单独定义
Environment=,否则环境变量不继承
TNS_ADMIN 指向错导致连接失败但无明确提示
现象是 sqlplus user/pass@orcl 报 ORA-12154: TNS:could not resolve the connect identifier specified,但 tnsping orcl 却成功——说明 tnsnames.ora 文件存在,只是没被读到。
排查步骤:
- 运行
echo $TNS_ADMIN(Linux)或echo %TNS_ADMIN%(Windows),确认路径是否拼写正确、末尾无空格 - 检查该路径下是否存在
tnsnames.ora,文件名必须全小写,不能是TNSNAMES.ORA(Linux 区分大小写) - 若用 Instant Client,
TNS_ADMIN必须指向你手动创建的network/admin目录,不是 Oracle 安装目录下的默认位置
NLS_LANG 设错引发乱码或插入失败
客户端字符集与服务端不匹配时,中文显示为问号、方块,甚至 INSERT 报 ORA-01756(带引号的字符串未正确终止)。
正确做法:
- 先查服务端字符集:
select value from nls_database_parameters where parameter = 'NLS_CHARACTERSET'; - 按格式拼
NLS_LANG:LANGUAGE_TERRITORY.CHARACTERSET,例如服务端是ZHS16GBK,就设为SIMPLIFIED CHINESE_CHINA.ZHS16GBK - Windows 注册表里可能残留旧的
NLS_LANG值(路径HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE),冲突时优先级高于环境变量,务必清理
真正麻烦的是跨平台场景:Linux 客户端连 Windows 服务端,或反过来——两边字符集命名习惯不同,ZHS16GBK 和 AL32UTF8 不能混用,哪怕看起来都能存中文。


















