Mac端Instant Client启动sqlplus连接Oracle报ORA-12162错误求助
问题根因
触发ORA-12162: TNS:net service name is incorrectly specified的核心原因是连接时未正确指定目标数据库地址,同时操作流程存在两处明显错误:
- 已经进入sqlplus交互登录界面后,在用户名输入位输入
sqlplus /nolog,该命令是终端中启动sqlplus的参数指令,不是登录用的用户名 - 输入system、sys等用户名密码时,没有携带任何数据库连接标识,而Instant Client本身不包含本地Oracle数据库实例,程序无法定位要连接的数据库地址,直接抛出TNS配置错误
排查解决步骤
- 第一步:补全Oracle Instant Client环境变量
Mac端Instant Client除了PATH配置,还需要指定动态库路径、Oracle根目录等参数,避免运行时加载异常。如果使用默认zsh终端,编辑~/.zshrc文件(bash终端编辑~/.bash_profile),写入以下配置:
保存后执行export ORACLE_HOME=~/Downloads/instantclient_19_8 export PATH=$ORACLE_HOME:$PATH export DYLD_LIBRARY_PATH=$ORACLE_HOME:$DYLD_LIBRARY_PATH export NLS_LANG=AMERICAN_AMERICA.UTF8 # 如需使用tnsnames.ora配置连接别名,可指定配置文件目录,目录需手动创建 # export TNS_ADMIN=$ORACLE_HOME/network/adminsource ~/.zshrc(bash对应执行source ~/.bash_profile)让配置生效,终端输入sqlplus -v,能正常返回19.8.0.0.0版本号即说明基础配置正常。 - 第二步:提前确认目标数据库连接信息
Instant Client是纯客户端工具,本地不会启动Oracle数据库实例,必须提前准备好可访问的Oracle数据库信息:数据库主机IP、端口(默认1521)、服务名(12c及之后版本优先用服务名,不要用旧的SID)、合法的账号密码。连接前可在终端执行nc -zv 数据库IP 端口验证网络连通性,返回succeeded再进行后续操作。 - 第三步:使用简易连接语法直接登录(新手推荐,无需额外配置tns文件)
不要先启动sqlplus再在交互界面输用户名,直接在终端执行带连接串的命令即可,语法格式为:
示例:连本地1521端口、服务名为ORCLPDB1的数据库,system用户密码为oracle,执行命令:sqlplus 用户名/密码@//数据库IP:端口/服务名
如果要使用/nolog模式,直接在终端执行sqlplus system/oracle@//127.0.0.1:1521/ORCLPDB1sqlplus /nolog启动无连接的sqlplus控制台,在SQL>提示符后输入连接语句即可,不要在用户名输入位输命令:SQL> conn system/oracle@//127.0.0.1:1521/ORCLPDB1 - 第四步:(可选)配置tnsnames.ora使用别名连接
如果需要用短别名连接,先创建$TNS_ADMIN指向的目录,在目录下新建tnsnames.ora文件,写入连接配置:
保存后即可直接用别名登录,命令为HR_PDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCLPDB1) ) )sqlplus system/oracle@HR_PDB
Mac端sqlplus操作hr schema/新建schema指引
- 连接hr schema注意事项:12c及之后版本Oracle采用多租户架构,hr示例用户默认存放在可插拔数据库(PDB)中,不要直接连CDB根库,必须指定PDB对应的服务名连接。如果hr用户处于锁定状态,用sysdba身份登录后执行以下语句解锁:
解锁后即可用hr账号登录:-- 以sysdba登录:sqlplus sys/你的sys密码@//127.0.0.1:1521/ORCLPDB1 as sysdba ALTER USER hr IDENTIFIED BY hr123456 ACCOUNT UNLOCK;sqlplus hr/hr123456@//127.0.0.1:1521/ORCLPDB1 - 新建schema(即新建用户)注意事项:在CDB根库新建用户必须加
C##前缀,常规业务用户建议在PDB中创建,无需前缀,创建后分配基础权限即可使用:
执行完成后即可用test_user账号登录,该账号对应的独立schema创建完成。-- 切到PDB内执行 CREATE USER test_user IDENTIFIED BY Test@123456; GRANT CONNECT, RESOURCE, CREATE VIEW, CREATE SEQUENCE TO test_user;
内容的提问来源于stack exchange,提问作者ahmed
相关产品推荐
相关产品推荐

