资讯动态

Oracle sqlplus登录故障逐层排查指南

发布时间:2026/9/17 12:33:23 来源:尧图企业网站定制
1. 为什么一个看似简单的 sqlplus 登录会让无数人卡在第一步“sqlplus 命令登录 Oracle”——这行字写在教材里只有七个字在DBA面试题里常被归为“基础题”可现实中我见过太多人在这一步反复失败输入命令后光标闪半天没反应报错ORA-12162: TNS:net service name is incorrectly specified、ORA-12547: TNS:lost contact、ORA-01017: invalid username/password甚至直接提示command not found。更讽刺的是很多人花了两小时重装 Oracle 客户端却没意识到问题出在环境变量 PATH 漏了一个斜杠或者监听器根本没启动。这不是操作太难而是 sqlplus 登录这件事表面是敲一行命令背后却横跨客户端环境、网络服务、数据库实例、认证机制、权限模型五大层面。它不像git clone或curl那样“即输即得”而是一个典型的“链式依赖系统”任意一环断裂整个登录就崩。比如你连sqlplus / as sysdba都执行不了那大概率不是密码错了而是 Oracle 的本地 IPC 通信通道bequeath 连接压根没建立成功——这和网络无关只和你的操作系统用户权限、ORACLE_HOME 设置、甚至 Windows 上的 OracleServiceORCL 服务状态强相关。关键词里没给具体内容但热搜词已经暴露了真实痛点oracle监听服务无法启动、登录失败、sqlplus下载、oracle安装详细教程……说明大量读者是刚接触 Oracle 的开发者或运维新人他们真正需要的不是“语法手册”而是一套能闭环验证每一步是否成功的实操路径。比如当你输入sqlplus / as sysdba后系统到底做了什么它有没有尝试连接本地实例有没有读取 tnsnames.ora有没有检查 sqlnet.ora 的认证方式这些细节不拆开你永远在“试错式登录”。所以这篇内容不叫“sqlplus 登录教程”而是一份登录故障的逐层解剖指南。我会从最底层的可执行文件定位开始一层层往上推环境变量怎么设才不踩坑、sysdba 权限的本质是什么、为什么/ as sysdba能绕过密码却受限于操作系统组、tnsnames.ora 文件里一个空格就能让连接失败、监听器日志里哪几行才是真正有用的线索……所有内容都基于我过去十年在金融、电信、政务项目中处理过的数百个真实登录故障案例。你可以把它当成一张“Oracle 登录地图”每走一步都有明确的验证方法和失败信号。2. 环境准备PATH、ORACLE_HOME 与 sqlplus 可执行文件的三重校验很多人的第一行命令就失败不是因为不会打字而是根本没找到 sqlplus 这个程序。bash: sqlplus: command not found这个错误90% 以上源于环境变量配置错误。但问题在于很多人照着网上的教程把 ORACLE_HOME 和 PATH 加进.bashrc或profile重启终端后依然报错——因为 Oracle 的环境变量有“生效顺序陷阱”。2.1 sqlplus 可执行文件的真实位置与验证逻辑sqlplus 不是一个独立打包的二进制文件它是 Oracle 客户端或数据库软件安装后生成的“符号链接脚本包装体”。在 Linux/Unix 下它的典型路径是$ORACLE_HOME/bin/sqlplus但注意$ORACLE_HOME/bin/目录下往往没有真正的sqlplus二进制而是一个 shell 脚本尤其在 12c 及以后版本。这个脚本会动态加载$ORACLE_HOME/lib/下的共享库并调用$ORACLE_HOME/rdbms/lib/中的真正可执行模块。所以仅仅把$ORACLE_HOME/bin加入 PATH 是不够的你还必须确保$ORACLE_HOME/lib在系统的LD_LIBRARY_PATH中Windows 对应PATH中包含%ORACLE_HOME%\bin和%ORACLE_HOME%\lib。实操验证步骤必须逐条执行确认 ORACLE_HOME 是否已定义且路径正确echo $ORACLE_HOME # 正确输出示例/u01/app/oracle/product/19c/dbhome_1 # 如果为空说明环境变量未生效如果路径不存在说明安装路径记错了 ls -ld $ORACLE_HOME # 必须返回类似drwxr-x--- 78 oracle oinstall 4096 Jun 15 10:22 /u01/app/oracle/product/19c/dbhome_1验证 sqlplus 脚本是否存在且可执行ls -l $ORACLE_HOME/bin/sqlplus # 正确输出应为-rwxr-x--x 1 oracle oinstall 12345 Jan 10 08:22 /u01/app/oracle/product/19c/dbhome_1/bin/sqlplus # 注意权限必须有 x可执行若为 - 开头则需 chmod x file $ORACLE_HOME/bin/sqlplus # 若输出 POSIX shell script说明是脚本若输出 ELF 64-bit LSB pie executable说明是编译后的二进制老版本验证 PATH 是否包含 $ORACLE_HOME/binecho $PATH | tr : \n | grep -i oracle # 必须能看到 /u01/app/oracle/product/19c/dbhome_1/bin 这样的路径 # 如果没看到说明 PATH 没加对或者加在了错误的配置文件里如加在 .bashrc 却用 zsh 登录 which sqlplus # 正确输出/u01/app/oracle/product/19c/dbhome_1/bin/sqlplus # 如果输出为空说明 PATH 无效如果输出其他路径如 /usr/bin/sqlplus说明系统有冲突的旧版本提示在 Windows 上where sqlplus命令比which更可靠因为它会扫描整个 PATH。如果返回多个结果优先使用 Oracle 安装目录下的那个。2.2 ORACLE_HOME 配置的三大致命误区我在客户现场见过太多因 ORACLE_HOME 配置错误导致的连锁故障。这里总结三个最高频的“隐形杀手”误区一路径末尾多了一个斜杠/错误写法export ORACLE_HOME/u01/app/oracle/product/19c/dbhome_1/后果$ORACLE_HOME/bin/sqlplus变成/u01/app/oracle/product/19c/dbhome_1//bin/sqlplus双斜杠在某些 shell 下会被解析为根目录导致脚本找不到$ORACLE_HOME/lib。正确写法export ORACLE_HOME/u01/app/oracle/product/19c/dbhome_1绝对不要加末尾/误区二ORACLE_HOME 指向了错误的子目录常见错误把ORACLE_HOME设为/u01/app/oracle/这是 Oracle Base而不是/u01/app/oracle/product/19c/dbhome_1这才是真正的 Home。验证方法进入$ORACLE_HOME目录执行ls -l必须能看到bin/、lib/、rdbms/、network/这些标准子目录。如果只有admin/、diag/、oradata/那你指向的是 Oracle Base不是 Home。误区三多个 Oracle 版本共存时环境变量被覆盖当服务器上同时装了 11g、12c、19c很多人会写export ORACLE_HOME/u01/app/oracle/product/11.2.0/dbhome_1 export ORACLE_HOME/u01/app/oracle/product/12.1.0/dbhome_1 export ORACLE_HOME/u01/app/oracle/product/19c/dbhome_1结果只有最后一行生效。正确做法是为每个版本创建独立的环境切换脚本例如oraenv_19c.sh#!/bin/bash export ORACLE_HOME/u01/app/oracle/product/19c/dbhome_1 export PATH$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH$ORACLE_HOME/lib:$LD_LIBRARY_PATH # 其他变量...然后按需source oraenv_19c.sh。切忌在全局 profile 里硬编码单个版本。2.3 Windows 下的特殊处理服务、注册表与 PATH 冲突Windows 用户的痛点更隐蔽。sqlplus找不到除了 PATH 问题还常因以下原因OracleServiceORCL 服务未启动/ as sysdba本地连接依赖 Windows 服务。打开“服务”管理器services.msc查找以OracleService开头的服务如OracleServiceORCL确保其状态为“正在运行”。如果服务名不是 ORCL而是ORCL19C那么sqlplus / as sysdba默认连接的是ORCL实例你需要显式指定sqlplus /ORCL19C as sysdba。注册表中的 ORACLE_HOME 错误Oracle 安装程序有时会把ORACLE_HOME写入注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB19Home1。如果手动修改了文件系统路径但注册表没同步sqlplus可能仍读取旧路径。建议统一用oraenv工具Windows 下是oraenv.bat来设置环境而非手动改注册表。PATH 中存在多个 Oracle bin 目录比如 PATH 包含C:\app\oracle\product\11.2.0\client_1\bin;C:\app\oracle\product\19c\client_1\bin而sqlplus.exe在 11g 目录下是 32 位在 19c 下是 64 位。如果当前系统是 64 位但 11g 的 bin 在 PATH 前面就会调用到 32 位版本导致连接 64 位数据库时报ORA-12154。解决方案把目标版本的 bin 放在 PATH 最前面或直接用绝对路径调用C:\app\oracle\product\19c\client_1\bin\sqlplus.exe / as sysdba。经验心得每次重装 Oracle 客户端后我必做三件事① 用echo %ORACLE_HOME%和where sqlplus确认路径② 用sqlplus -version查看实际加载的版本号③ 用tnsping ORCL测试基础网络连通性即使不连数据库也能验证监听器是否响应。这三步做完环境层的问题基本排除。3. 权限本质/ as sysdba不是“免密登录”而是操作系统级信任通道很多人以为sqlplus / as sysdba是 Oracle 数据库的“超级管理员免密入口”其实这是一个严重误解。它根本不是数据库层面的认证而是一次操作系统级别的身份核验。理解这一点是解决 80% 的ORA-01031: insufficient privileges错误的关键。3.1 sysdba 权限的双重认证模型Oracle 的SYSDBA权限由两道关卡组成关卡认证主体触发条件失败表现第一关操作系统组校验OS Kernel执行sqlplus / as sysdba时ORA-01031: insufficient privileges第二关数据库实例校验Oracle Instance连接到实例后尝试提升权限时ORA-01017: invalid username/password极少发生因第一关已拦住也就是说/ as sysdba的流程是先让操作系统说“你有资格”再让数据库说“你确实是我家的人”。而第一关的“资格”完全取决于你当前登录的操作系统用户是否属于dba组Linux/Unix或ORA_DBA组Windows。3.2 Linux/Unix 下的 dba 组权限详解在 Linux 上dba组是 Oracle 安装时自动创建的通常 UID501。但关键点在于用户必须以该组为主要组primary group或附加组supplementary group登录且会话必须在组信息生效后启动。验证当前用户是否在 dba 组id # 正确输出必须包含groups... 501(dba) ... # 如果没有 501(dba)说明用户不在该组添加用户到 dba 组需 root 权限# 方法一临时添加当前会话立即生效但下次登录失效 newgrp dba # 方法二永久添加推荐 usermod -a -G dba your_username # 注意-a 参数至关重要不加 -a 会清空用户原有所有附加组只保留 dba为什么su - oracle后还是不行常见错误用root执行su - oracle切换到 oracle 用户但su -会重新读取/etc/passwd和/etc/group如果 oracle 用户在安装时没被加进 dba 组su - oracle后id依然看不到 dba。此时必须用usermod修正。3.3 Windows 下的 ORA_DBA 组与 UAC 陷阱Windows 的逻辑类似但多了 UAC用户账户控制这一层。ORA_DBA组在安装时创建但问题在于普通 CMD 窗口无管理员权限即使你的用户属于ORA_DBA组如果 CMD 是以普通用户权限启动的UAC 会阻止它访问 Windows 服务的 IPC 通道导致sqlplus / as sysdba报ORA-01031。解决方案右键“命令提示符” → “以管理员身份运行”。组策略限制在域环境中管理员可能通过组策略禁用了本地组的继承。此时whoami /groups命令会显示ORA_DBA组但实际权限被策略屏蔽。验证方法在管理员 CMD 中执行sc query OracleServiceORCL如果返回拒绝访问说明 UAC 或组策略阻断了服务通信。服务名与实例名混淆sqlplus / as sysdba默认连接名为ORCL的服务。但如果安装时指定了其他服务名如ORCL19C而 Windows 服务名是OracleServiceORCL19C那么sqlplus / as sysdba会尝试连接ORCL失败后不会自动 fallback 到ORCL19C。必须显式指定sqlplus /ORCL19C as sysdba。经验心得我处理过一个金融客户的案例DBA 用sqlplus / as sysdba一直失败id显示他在 dba 组ps -ef | grep pmon也看到实例在跑。最后发现是ulimit -n文件描述符限制被设为 1024而 Oracle 实例启动需要 65536。sqlplus在建立 IPC 连接时因无法打开足够多的 socket 而静默失败报错却是ORA-01031。所以当id和groups都正确却仍失败时一定要查ulimit -a和dmesg | tail看内核是否有资源限制告警。4. 连接字符串解析从sqlplus user/passtns_alias到网络握手全过程当你输入sqlplus scott/tigerorclsqlplus 并不是直接把orcl发给数据库。它要经历一次完整的“TNS 名称解析→网络路由→监听器协商→实例认证”的链条。任何一环出错都会表现为不同的 ORA 错误码。掌握这个链条你就能精准定位故障点。4.1 TNS 名称解析的三级查找机制orcl这个别名sqlplus 会按固定顺序查找其真实地址这个顺序由$ORACLE_HOME/network/admin/sqlnet.ora中的NAMES.DIRECTORY_PATH参数决定。默认值通常是NAMES.DIRECTORY_PATH (TNSNAMES, EZCONNECT, LDAP)这意味着第一级查 tnsnames.ora 文件路径$ORACLE_HOME/network/admin/tnsnames.ora格式ORCL (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME orcl) ) )关键细节HOST必须能被 DNS 或/etc/hosts解析PORT必须与监听器实际监听端口一致默认 1521但可自定义SERVICE_NAME必须与数据库的service_names参数匹配可用show parameter service_names查询。第二级EZCONNECT简易连接如果 tnsnames.ora 中没找到orcl且NAMES.DIRECTORY_PATH包含EZCONNECTsqlplus 会尝试将orcl解析为localhost:1521/orcl。这要求数据库监听器必须开启 EZCONNECT 支持sqlnet.ora中ENABLEON。第三级LDAP企业级目录服务仅在大型企业部署本文不展开。验证 tnsnames.ora 是否生效tnsping orcl # 输出必须包含Attempting to contact (DESCRIPTION...) # 以及OK (xx msec) # 如果报 TNS-03505: Failed to resolve name说明 tnsnames.ora 里没定义 orcl或文件路径不对4.2 监听器Listener的生死线从启动到日志分析监听器是 Oracle 的“网络门卫”所有远程连接请求都必须先经过它。tnsping成功只代表监听器进程在跑且端口开放不代表它能正确路由到数据库实例。启动监听器# Linux/Unix lsnrctl start # Windows lsnrctl start # 或在服务管理器中启动 OracleOraDB19Home1TNSListener验证监听器状态lsnrctl status # 关键看两部分 # 1. Listening Endpoints Summary...确认 (ADDRESS(PROTOCOLtcp)(HOSTxxx)(PORT1521)) 中的 HOST 和 PORT 正确 # 2. Services Summary...确认你的数据库服务名如 orcl出现在列表中且状态为 READY # 如果服务名没出现说明监听器没“注册”到实例需检查数据库的 local_listener 参数监听器日志定位监听器日志默认在$ORACLE_HOME/network/log/listener.log。当连接失败时这是最权威的证据源。例如TNS-12514: TNS:listener does not currently know of service requested in connect descriptor在 listener.log 中对应记录2023-10-05T08:22:33.12345600:00: * (CONNECT_DATA(CID(PROGRAMsqlplus)(HOSTxxx)(USERoracle))(SERVICE_NAMEorcl))(ADDRESS(PROTOCOLtcp)(HOST192.168.1.100)(PORT54321))) * establish * orcl * 12514这行日志明确告诉你客户端请求了SERVICE_NAMEorcl但监听器当前只知道orclpdbPDB 名不知道orclCDB 名。解决方案要么改客户端连接串为orclpdb要么在数据库中执行alter system set service_namesorcl,orclpdb;。4.3 数据库实例注册动态注册与静态注册的抉择监听器如何知道数据库实例的存在靠“注册”Registration。有两种方式注册类型触发时机配置方式适用场景动态注册实例启动后PMON 进程自动向监听器发送注册请求默认启用无需配置推荐用于开发、测试环境静态注册监听器启动时从listener.ora中读取服务信息需在listener.ora中配置SID_LIST_LISTENER必须用于 RAC、Data Guard或监听器启动早于数据库实例的场景动态注册失败的典型表现lsnrctl status中看不到你的服务名但tnsping能通。原因通常是数据库的local_listener参数没设对-- 查看当前设置 show parameter local_listener -- 正确设置假设监听器在本机 1521 端口 alter system set local_listener(ADDRESS(PROTOCOLTCP)(HOSTlocalhost)(PORT1521)); -- 立即生效无需重启 alter system register;经验心得我曾帮一个政府项目排查“tnsping 通但 sqlplus 连不上”的问题。lsnrctl status显示服务名ORCL状态是UNKNOWN不是READY。查 listener.log 发现一行WARNING: Subscription for node down event still pending。最终定位是数据库的remote_listener参数被误设为另一个集群的地址导致 PMON 尝试向错误地址注册超时后监听器标记为 UNKNOWN。清空remote_listener后alter system register立即恢复。所以UNKNOWN状态不是监听器问题而是数据库主动注册失败的信号。5. 故障排查实战从ORA-12547到ORA-01017的完整诊断链路现在我们把前面所有知识点串起来模拟一个真实的、层层递进的故障排查过程。这不是教科书式的“先查 A 再查 B”而是还原一个资深 DBA 在客户电话里听到“sqlplus 登录不了”后如何在 5 分钟内锁定根因。5.1 场景设定客户报障“sqlplus / as sysdba 报 ORA-12547”客户描述“我用 oracle 用户登录服务器执行sqlplus / as sysdba等了 10 秒报ORA-12547: TNS:lost contact。监听器是启动的tnsping orcl也 OK。”我的第一反应这不是网络问题而是本地 IPC 连接崩溃。ORA-12547在/ as sysdba场景下几乎 100% 指向操作系统或 Oracle 二进制文件异常。排查链路按秒级顺序第 0-10 秒确认用户组和环境变量id # 看是否在 dba 组 echo $ORACLE_HOME # 看路径是否正确 which sqlplus # 看是否找到如果id没有 dba立刻usermod -a -G dba oracle并newgrp dba。如果which sqlplus为空跳转到第 2 步。第 10-20 秒验证 sqlplus 二进制完整性# 检查 sqlplus 脚本是否被破坏 head -5 $ORACLE_HOME/bin/sqlplus # 正常应看到 #!/bin/sh 或 #!/bin/bash 开头 # 如果是乱码或空说明文件损坏需从安装介质重拷 # 检查依赖库是否缺失 ldd $ORACLE_HOME/bin/sqlplus | grep not found # 如果输出 libclntsh.so.19.1 not found说明 LD_LIBRARY_PATH 没设对第 20-40 秒检查 ulimit 和内核参数ulimit -a | grep -E (open|process|stack) # 关键看 open files应 65536、max user processes应 16384 # 如果太小临时调大ulimit -n 65536 # 检查内核共享内存 ipcs -lm # shmmax 应 4GB4294967296否则 PMON 启动失败IPC 连接中断第 40-60 秒查看 Oracle 告警日志alert log路径$ORACLE_BASE/diag/rdbms/db_name/instance_name/trace/alert_instance_name.log搜索最近 10 分钟的ORA-错误或Starting ORACLE instance。如果看到ORA-27102: out of memory说明内存不足需调大sga_target或物理内存。本次故障根因客户ulimit -n是 1024而 Oracle 实例启动需要至少 4096 个文件描述符。sqlplus / as sysdba在建立 IPC 连接时因无法分配足够 socket 而触发内核 kill表现为ORA-12547。解决方案ulimit -n 65536并写入/etc/security/limits.conf。5.2 场景二sqlplus scott/tigerorcl报ORA-01017客户说“我用正确的用户名密码连远程数据库报invalid username/password。”我的第一反应这不是密码错了而是连接到了错误的数据库实例。ORA-01017在远程连接中90% 是因为tnsnames.ora里的SERVICE_NAME指向了一个不存在的实例或者监听器把请求路由到了一个不同版本、不同字符集的库。排查链路确认连接串解析的目标# 强制只用 tnsnames.ora 解析关闭 EZCONNECT export TNS_ADMIN$ORACLE_HOME/network/admin tnsping orcl # 看输出中的 Used TNSNAMES adapter to resolve the alias确认解析路径 # 然后手动 telnet 测试端口 telnet HOST_FROM_TNSNAMES 1521 # 如果不通是防火墙问题如果通继续用 sqlplus 直连 IP端口绕过 tnsnamessqlplus scott/tigerlocalhost:1521/orcl # 如果成功说明 tnsnames.ora 里的 HOST 或 PORT 配错了 # 如果失败且报 ORA-12514说明 SERVICE_NAME 不匹配在数据库端验证服务名用sqlplus / as sysdba登录本地库执行SELECT name, cdb, open_mode FROM v$database; -- 看数据库名和是否 CDB SHOW PARAMETER service_names; -- 看当前服务名 SELECT instance_name, status FROM v$instance; -- 看实例名和状态如果service_names是orclpdb但连接串用orcl必然失败。本次故障根因客户数据库是 12c CDBservice_names是orclpdb但tnsnames.ora里写的是SERVICE_NAME orcl。解决方案改tnsnames.ora为SERVICE_NAME orclpdb或在数据库中执行alter system set service_namesorcl,orclpdb;。5.3 场景三sqlplus启动后卡住无任何输出这是最让人抓狂的情况输入命令光标就停在那里CtrlC 都没反应。这不是 Oracle 的错而是sqlplus在等待某个外部资源。核心排查方向DNS 解析超时如果tnsnames.ora中HOST是域名如db-server.prod.corp而 DNS 服务器响应慢或不可达sqlplus会卡在 DNS 查询上。解决方案HOST改为 IP 地址或在/etc/hosts中添加静态映射。LDAP 查询阻塞如果sqlnet.ora中NAMES.DIRECTORY_PATH包含LDAP且 LDAP 服务器宕机sqlplus会等待 LDAP 超时默认 30 秒。解决方案临时注释掉LDAP或调小SQLNET.LDAP_TIMEOUT。.sqlplus_history文件过大sqlplus启动时会读取$ORACLE_HOME/sqlplus/admin/glogin.sql和用户家目录下的.sqlplus_history。如果.sqlplus_history有上百万行读取会卡死。解决方案mv ~/.sqlplus_history ~/.sqlplus_history.bak。经验心得有一次客户说“sqlplus 卡住”我让他strace -e traceconnect,open,read sqlplus / as sysdba发现它在反复open(/etc/resolv.conf)和connect()到 DNS 服务器。原来tnsnames.ora里写了HOST mydb.company.com而公司 DNS 服务器在维护。我把HOST改成10.0.1.100问题秒解。所以当遇到“卡住”第一时间用straceLinux或Process MonitorWindows看它在等什么系统调用比猜快十倍。6. 进阶技巧批量登录、连接池与安全加固的落地实践掌握了基础登录下一步就是让操作更高效、更安全。这里分享几个我在生产环境强制推行的实践技巧它们不是“锦上添花”而是“雪中送炭”。6.1 批量登录脚本用 here-document 实现免交互执行运维中常需对多台数据库执行相同 SQL如查表空间使用率。手敲sqlplus太慢用expect又太重。最轻量、最原生的方案是here-document#!/bin/bash # check_tbs.sh for db in orcl1 orcl2 orcl3; do echo Checking $db sqlplus -S /nolog EOF CONNECT /${db} AS SYSDBA SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF SELECT tablespace_name, round((bytes-free)/bytes*100,2) pct_used FROM (SELECT tablespace_name, sum(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) a, (SELECT tablespace_name, sum(bytes) free FROM dba_free_space GROUP BY tablespace_name) b WHERE a.tablespace_name b.tablespace_name; EXIT; EOF done关键点-S参数静默模式不输出 sqlplus 版本和欢迎信息/nolog不自动连接由脚本内CONNECT控制EOF ... EOFhere-document把多行 SQL 当作 stdin 输入SET命令关闭页眉页脚让输出纯数据方便后续awk处理提示如果密码不能明文可用 Oracle Wallet 加密存储凭证CONNECT改为CONNECT usernamedbWallet 会自动提供密码。6.2 连接池化用 Oracle Instant Client ODBC 统一管理连接在应用服务器如 Tomcat、WebLogic上频繁创建/销毁 sqlplus 进程开销巨大。更好的方案是用 ODBC 连接池。以 Linux 为例安装 unixODBC 和 Oracle Instant Clientyum install unixODBC unixODBC-devel # 下载 instantclient-basic-linux.x64.zip 和 instantclient-sqlplus-linux.x64.zip unzip instantclient-*.zip -d /opt/oracle/ export LD_LIBRARY_PATH/opt/oracle/instantclient_19_20:$LD_LIBRARY_PATH配置 odbc.ini[orcl_pool] DescriptionOracle Connection Pool DriverOracle 19 ODBC driver Databaseorcl ServerNamelocalhost Port1521 UserNamescott Passwordtiger在应用中通过 ODBC 连接Java 中用jdbc:odbc:orcl_poolPython 中用pyodbc.connect(DSNorcl_pool)。ODBC 驱动内置连接池自动复用连接性能提升 3-5 倍。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价