ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Oracle 11g客户端安装与连接配置全指南:避坑排错一步到位

Oracle 11g客户端安装与连接配置全指南:避坑排错一步到位 简介Oracle 客户端 11g 安装包面向需要远程连接 Oracle 数据库的 DBA、开发人员与运维工程师提供一套开箱即用的客户端运行环境可快捷完成 TNS 网络配置、SQL 操作与数据库管理。压缩包内共 710 个文件以 jar、xml、properties 等库与配置文件为主同时包含 dll、nls、exe、bat 等连接库、语言字符集与启动脚本整体约 270.95MB适用于标准安装与轻量级部署。资源已有 1361 人学习/下载围绕 Oracle Net Services、SQL*Plus、Instant Client 等核心组件展开详细覆盖 tnsnames.ora 监听配置、Easy Connect 快速连接、ODP.NET 与 .NET 应用集成、密码策略与审计加密等安全特性并结合客户端缓存、SQL Trace 与 10046 事件等调优思路。对数据库入门者来说可借此理解客户端与服务器通信机制对中高级使用者而言则是一套可复用的安装排错和性能优化参考资料。1. 拿到 Oracle 11g 客户端安装包后别急着双击 setup.exe正常情况下开发者拿到一份 oracle-client11g.rar 时最容易犯的错是把它当成普通的数据库软件解压后双击 setup.exe 一路 Next装完却发现 PL/SQL Developer 连不上、sqlplus 报 ORA-12154、ODBC 数据源里压根找不到驱动。这份资源是一套完整的 Oracle 11g 客户端安装包里面既有 sqlplus 和 Oracle Net 组件也有 ODBC/OLE DB 驱动、OCI 运行库和 exp/imp 工具解决的核心问题是让一台没有安装 Oracle 数据库的普通机器能顺畅连接并操作远程数据库实例。适合要用 PL/SQL Developer、Navicat、Python 或 BI 工具连远程库的开发者、数据处理人员和运维新手。下面按“装完有什么→怎么配连接→怎么接工具→坑在哪→怎么脚本化”的顺序把整个部署过程盘一遍。2. 客户端装完到底有什么先认清目录里的每个组件2.1 客户端和服务器是两回事为什么你只需要装 client很多人第一次接触时会懵Oracle 客户端和 Oracle 数据库服务器长得差不多都是那个安装界面都是那一堆目录到底有什么区别。打个比方数据库服务器是“仓库”里面真正存放、管理数据客户端只是“钥匙和对讲机”让你能隔着网络向仓库下达存取指令。这个 rar 装出来的东西里没有数据库实例没有监听器服务listener没有数据文件和控制文件只有一个能让你和远程数据库通话的工具箱。什么时候才需要它你的本机没有装 Oracle 数据库但目标机器上有一个数据库实例在跑你要在本地用 sqlplus 执行查询用 exp/imp 做导入导出或者让 Excel、报表工具通过 ODBC 拉数。什么时候不需要它你要在本机建库、跑数据字典、做表空间管理那应该去找 Oracle Database 服务器安装包而不是这个客户端包——很多新手把客户端当成整个 Oracle 装完发现没有数据库实例可建那是装错了对象。值得留意的是Oracle 11g 客户端还分“完整安装包”和“Instant Client”两种形态。完整安装包用 setup.exe 引导把组件注册进 Windows 系统Instant Client 则是一个绿色压缩包解压即用不写注册表。这份 rar 属于前者好处是安装后 ODBC 驱动、OCI 库、sqlplus 全部自动注册省掉了手动配置一大堆路径的麻烦。2.2 管理员、运行时和 Instant Client安装模式到底怎么选完整安装包在安装过程中会让你选安装类型常见是“管理员Administrator”和“运行时Runtime”。这两个词很容易让人误解以为管理员模式要数据库管理员权限才能装运行时才是普通用户用的。实际不是这样管理员模式会装全所有组件包括 sqlplus、exp/imp、Oracle Net Manager、ODBC 驱动以及完整的目录结构体积通常在 3 GB 以上运行时模式砍掉了一部分交互式管理工具只保留连接数据库必要的运行库体积小一半左右。安装类型体积参考是否需注册系统服务适合场景管理员模式约 3 GB否开发调试、需要 exp/imp、需要 ODBC/OLE DB、不确定以后要什么工具运行时模式约 1.5 GB否机器磁盘紧张、仅供某个程序连接使用Instant Client约 300 MB否绿色部署、仅跑程序、不想写注册表我一般会给别人推荐管理员模式理由不是功能全而是省事。真实环境里经常遇到这种情况装完运行时模式后过两周要导数据发现没有 exp.exe又得重新找安装包补装或者要用 ODBC 数据源发现驱动没注册。管理员模式一次到位磁盘那点空间成本远低于来回补装的时间成本。如果选自定义安装有几个组件你要知道是干嘛的Oracle Net负责网络连接和 tnsnames.ora 解析不装这个客户端连不上任何数据库必须勾选。Oracle ODBC Driver给 Windows 的 ODBC 数据源用的BI 工具、Excel、老旧的 Access 程序都靠它。Oracle Provider for OLE DB给 ADO、老式 VB/C 程序用的新项目很少碰需要时再勾。Command Line Toolssqlplus、tnsping、exp/imp 全在这日常排错最依赖的一组工具。Oracle Call InterfaceOCIPL/SQL Developer 这类工具要加载的底层库很多工具连不上不是网络问题是没找到 oci.dll。安装过程本身没什么神秘感解压 rar 到全英文无空格的目录双击 setup.exe选“仅安装软件”下一步到“安装类型”时选管理员指定 ORACLE_HOME 路径剩下的交给安装程序。但有一个路径选择要提前想好安装程序默认的路径往往带着当前用户名比如 C:\app\用户名\product\11.2.0\client_1如果用户名是中文或者带空格后面配置 ODBC 和 PL/SQL Developer 时会出现各种莫名其妙的闪退。建议手动改成 C:\oracle\product\11.2.0\client_1 这种纯英文短路径宁肯多敲两行字也别给自己埋雷。2.3 安装完成后的关键文件与环境变量装完以后不要急着用先到 ORACLE_HOME 目录下认几个文件后面排错全靠它们文件/目录作用连接失败时的意义%ORACLE_HOME%\bin\sqlplus.exe命令行查询工具能跑起来说明基础安装没问题%ORACLE_HOME%\bin\tnsping.exe网络与名称解析测试工具定位是“找不到名字”还是“网络不通”%ORACLE_HOME%\network\admin\tnsnames.ora连接别名配置文件九成以上连接报错都和它有关%ORACLE_HOME%\bin\oci.dll工具加载的 OCI 库PL/SQL Developer 报初始化错误基本是它%ORACLE_HOME%\bin\exp.exe / imp.exe导入导出工具缺它说明装成了运行时模式%ORACLE_HOME%\bin\odbc_install.exeODBC 驱动注册工具ODBC 数据源里看不到驱动就手动跑一次环境变量是安装后最容易忽略的一步。安装程序通常会自动配置 ORACLE_HOME 和 PATH但 TNS_ADMIN——这个指向 tnsnames.ora 所在目录的变量经常没有被自动设置。Oracle Net 的搜索顺序是先找 TNS_ADMIN 指定的目录找不到再回退到 ORACLE_HOME 下的 network\admin。很多机器上 TNS_ADMIN 没值系统走到默认目录又没找到文件直接报 ORA-12154。set ORACLE_HOMEC:\oracle\product\11.2.0\client_1 set TNS_ADMINC:\oracle\product\11.2.0\client_1\network\admin set PATH%ORACLE_HOME%\bin;%PATH%上面三条命令是临时生效的只对当前命令行窗口有效。逻辑很直白第一条告诉系统客户端装在哪个根目录第二条告诉 Oracle Net 去哪个目录找 tnsnames.ora第三条把 sqlplus、tnsping 这些可执行文件加进全局搜索路径。设置完成后必须新开一个命令行窗口重新 echo %TNS_ADMIN% 验证旧窗口不会刷新环境变量。如果想让配置永久生效去“系统属性→环境变量”里把这三个变量写进系统变量区而不是用户变量区。区别在于系统变量对所有登录用户生效用户变量只对当前用户生效。工具软件如果是以管理员身份运行的读取的是系统变量的值路径只写在用户变量里会导致工具能启动却找不到配置这属于没有报错提示但就是连不上的典型玄学之一。3. tnsnames.ora 与 Oracle Net一张“地址地图”决定能否连上3.1 一条连接串拆开看协议、主机、端口、服务名都不能缺安装做完环境变量配好下一步就是写连接配置。很多人跳过 tnsnames.ora 直接用 sqlplus 的简易连接写法比如sqlplus system/password192.168.1.100:1521/orcl这条命令里的四段信息分别是连接方式system/password、IP 地址192.168.1.100、监听端口1521和数据库服务名orcl。这种写法叫 EZCONNECT简易连接好处是快坏处是每次都要敲长串且无法被工具保存。如果一个库里要连多个 schema或者有多个库要频繁切换写 tnsnames.ora 更合适。这里要区分一个高频概念SERVICE_NAME 和 SID。11g 之后的监听默认注册的是服务名服务名可以和实例名相同也可以不同。数据库管理员给你信息时如果只说“实例名是 orcl”那大概率就是 SID如果给的是“服务名 orcl”那就是 SERVICE_NAME。对应关系看下表信息tnsnames 里怎么写适用场景SERVICE_NAME(SERVICE_NAME orcl)11g 及以上最常用的写法SID(SID orcl)老库、RAC 某些特殊监听配置把 SID 当 SERVICE_NAME 写报错典型是 ORA-12514反过来把 SERVICE_NAME 当 SID 写报的也是 ORA-12514。所以拿到连接信息第一件事是问清楚哪个是服务名哪个是实例名问不清就先试 SERVICE_NAME11g 环境里成功率最高。3.2 tnsnames.ora 的标准写法和解析顺序打开 %ORACLE_HOME%\network\admin 下的 tnsnames.ora用文本编辑器在末尾追加一段ORCL (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 192.168.1.100)(PORT 1521)) ) (CONNECT_DATA (SERVICE_NAME orcl) ) )这段配置的层次要读清楚最外层 ORCL 是别名这个名字就是在 sqlplus、PL/SQL Developer、ODBC 数据源里填的连接名。DESCRIPTION 描述这次连接的所有属性ADDRESS_LIST 里规定通过 TCP 协议访问哪个 IP 的哪个端口CONNECT_DATA 里指定连到哪个服务名。整体就是一张地图——给数据库实例起了一个能被本机识别的江湖名号并告诉客户端“按这个 IP、这个端口、这个名字找过去”。文件可以放多个别名段落每个别名下面会有相似结构。工具连接时下拉框里菜单的名字就是这些别名不会暴露真实 IP 给使用者也算一种脱敏。Oracle Net 的解析顺序是先看输入串本身是不是合法再按“TNS_ADMIN 环境变量指定的目录→ORACLE_HOME 默认的 network\admin 目录→注册表中的 Oracle 配置”依次找 tnsnames.ora。如果在第一步发现输入的是一个不存在的别名并且三个位置都没找到对应文件就报 ORA-12154。理解这个顺序对排错很有用当 TNS_ADMIN 设了一个目录而那个目录里没有 tnsnames.ora系统不会自动回退到 ORACLE_HOME 的默认路径而是直接报找不到。所以很多人明明在默认目录里写了 tnsnames.oraTNS_ADMIN 却被设到了别的路径结果两个地方都没被正确读到就是读写顺序没搞明白。这段配置修改后不用重启任何服务工具下次发起连接时重新读取即可。但注意 PL/SQL Developer 这类工具如果开了连接池旧连接可能暂时还在最稳妥的做法是改完关掉工具重开。3.3 用 tnsping 和 sqlplus 做两次验证写完 tnsnames.ora先跑一次 tnsping再跑一次 sqlplus两步验证把问题分隔开tnsping ORCLtnsping 的输出会先显示它尝试解析的别名和完整连接描述符然后逐项列出发往 IP:端口的结果。输出末尾出现“OK (0 msec)”说明名称解析成功且能触达监听端口如果报“TNS-03505: Failed to resolve name”说明 tnsnames.ora 里没这个别名或者搜索路径没生效如果报“TNS-12543: TNS:destination host unreachable”说明网络层就没通问题在防火墙或 IP 上。sqlplus system/passwordORCLsqlplus 才是真正验证账号密码的环节。tnsping 只负责验证网络和名称解析它不验证用户名密码也不关心服务名是否真的注册在监听上。只要能跑到 sqlplus 这一步且不报 ORA-12514说明监听里确实有这个服务。常见输出对照输出含义方向ORA-12154别名找不到检查 tnsnames.ora 和 TNS_ADMINORA-12514服务名没注册检查 SERVICE_NAME 写法ORA-12545主机不可达检查 IP 和防火墙ORA-01017用户名/密码错误找 DBA 核对账号这两步验证的价值在于把问题切成两半网络问题归网络查配置问题归配置查账号问题归账号查不会混在一起。我在给客户处理连接故障时永远先跑这两条命令输出基本能把 80% 的问题定到具体环节比打开工具看弹窗有效率得多。4. 工具对接细节让 PL/SQL Developer 和 ODBC 都认这份客户端4.1 32 位和 64 位同一份配置时而能连时而不能连的“玄学”客户端安装完毕、tnsping 通过接下来要把工具软件接到这份客户端上。这个环节里最让人头疼的不是网络而是位数匹配——32 位和 64 位的问题在 Windows 环境下几乎每天都让开发者熬夜。PL/SQL Developer 有一个关键特性它是 32 位程序靠加载本机的 OCI 库来连接 Oracle。如果你安装的客户端是 64 位oci.dll 就是 64 位版本32 位的 PL/SQL Developer 去加载它会直接初始化失败弹窗“Initialization error”或者干脆闪退。这不是配置写错了而是程序根本没法跟不同位数的基础库对话。判断当前客户端位数的方法有两招第一招看目录名如果 ORACLE_HOME 路径里有 client_64 字样那基本可以判定是 64 位第二招看 oci.dll 文件大小64 位版本通常明显大于 32 位版本不放心的话双击 oci.dll 看属性里的“文件版本”信息里面会有清楚的位数描述。对策很简单但很多人不想接受主力工具是 32 位的 PL/SQL Developer就装 32 位客户端主力工具是 64 位的 SQL Developer 或者程序里全是 JDBC thin 模式再考虑 64 位。后悔药是有的——不必卸载重装把 tnsnames.ora 从当前客户端目录复制到新装的客户端对应目录再把新客户端的 bin 目录加到 PATH 最前面重新打开工具即可。另外要知道一个判断原则如果连接只发生在 JDBC 层比如 Java 程序里写 jdbc:oracle:thin:192.168.1.100:1521/orcl这属于 thin 模式它不依赖本机任何 Oracle 客户端文件装不装这个 rar 都无所谓。反过来如果程序用的是 JDBC OCI 模式那就严格要求本机存在对应位数的客户端。4.2 PL/SQL Developer 的 OCI 库指向拿到可用的客户端以后PL/SQL Developer 还要手动告诉它 OCI 库在哪里。打开 Tools → Preferences → Oracle → Connection看到两个关键项Oracle Home 和 OCI Library。Oracle Home 填到客户端的根目录OCI Library 填到 bin 目录下的 oci.dll。保存设置后重启工具连接下拉框里才会出现 tnsnames.ora 中定义的别名。如果重启后下拉框还是空的通常只有两个原因OCI Library 路径填错了或者 TNS_ADMIN 环境变量没生效导致工具不知道去哪找 tnsnames.ora。注意这里有个细微差别PL/SQL Developer 读 OCI 库是走 Preferences 里的设置读 tnsnames.ora 则是走系统环境变量两套机制分开一处错都会表现为“连接列表空”。检查时先确认 Preferences 里的路径真实存在再在命令行里 echo %TNS_ADMIN% 确认当前值并确认那个目录下确实有 tnsnames.ora 文件。4.3 Windows ODBC 数据源给 Excel 和 BI 工具开一条路ODBC 数据源是另一条高频对接路径。Excel 里的“数据→获取外部数据”、老式报表工具和不少 BI 产品都通过 ODBC 来访问 Oracle。Windows 下有“ODBC 数据源管理器64 位”和“ODBC 数据源管理器32 位”两个独立入口控制面板里看到哪个取决于当前打开的入口本身是几位的。工具是 32 位的就去找 32 位入口否则会出现“配置好了但程序里看不见”的怪事。新建数据源时选择驱动11g 客户端会提供两个候选一个是“Microsoft ODBC for Oracle”这是 Windows 自带的旧驱动性能一般且功能受限更推荐的是“Oracle in OraClient11g_home1”这是随客户端注册进来的原生驱动。选它之后填三样东西Data Source Name自定义一个名字比如 ORCL_DSN、TNS Service Name选 tnsnames.ora 里已定义的别名 ORCL、User ID数据库账号。填完点 Test Connection输入密码后如果显示 Success这个 DSN 就能在 Excel 和 BI 工具里直接用了。ODBC 配置时容易犯的错是把 TNS Service Name 填成 IP 地址或服务名本身。它的下拉框内容来自 tnsnames.ora 的别名是浅层的“名称转地址”映射填其他内容会连接失败。另外要注意 DSN 配置完以后在 64 位和 32 位两套管理器里是分别保存的同一个工具如果从 32 位进程访问必须确认配置是在 32 位管理器里完成的。4.4 其他语言和工具的连接方式速查不同生态的工具对客户端的依赖度差别很大下面是一个参考连接方式是否依赖本机客户端说明JDBC thinJava否驱动内置只需 host:port:service_nameJDBC OCIJava是需匹配位数的 Oracle Clientcx_Oracle / python-oracledb 厚模式是需找到本机 OCI 库python-oracledb thin 模式否Python 3 新版自带纯 Python 驱动Navicat for Oracle可自选自带 OCI但也可指向本机客户端python-oracledb 是新一代 Python 连接库它的 thin 模式完全不碰本机 OCI代码里只写连接字符串即可但老项目里的 cx_Oracle 默认走 OCI就得保证环境里有这份客户端。用 Python 排障时先确认库是 thin 还是 thick能省掉很多无意义的“客户端重装”操作。5. Oracle 11g 客户端常见安装与连接避坑五条压箱底的血泪经验5.1 报错 ORA-12154tnsnames.ora 根本没被读到现象sqlplus user/passwordORCL 或 PL/SQL Developer 连接时报 ORA-12154: TNS:could not resolve the connect identifier specified。原因这条报错是 Oracle Net 告诉你“我找不到这个别名”。实际发生的原因无非三种TNS_ADMIN 环境变量指向了一个空目录或错误目录tnsnames.ora 里根本没有叫 ORCL 的别名文件存在但格式损坏比如多了一个分号或括号不配对。解决先执行 echo %TNS_ADMIN% 确认当前值再 dir %TNS_ADMIN%\tnsnames.ora 确认文件存在最后用 type %TNS_ADMIN%\tnsnames.ora 看一眼内容搜索是否存在字符串“ORCL ”。如果 TNS_ADMIN 为空在系统环境变量里补上指向 client_1\network\admin 的路径。我自己的习惯是即便默认目录正确也会显式设置 TNS_ADMIN因为很多第三方工具读的是环境变量而不是注册表显式设置能避免踩到搜索顺序的边界。5.2 报错 ORA-12514服务名没注册或写错了现象tnsping ORCL 显示 OK但 sqlplus 报 ORA-12514: TNS:listener does not currently know of service requested in connect descriptor。原因监听端口能通但监听器里没有名为 orcl 的服务。常见原因是连接串里写的 SERVICE_NAME 和数据库实际注册的服务名不一致另一个常见原因是把 SID 当成了 SERVICE_NAME。解决先确认数据库的 service_name可以在数据库服务器上执行 show parameter service_name 查看如果服务器不方便登录找 DBA 要准确值。临时验证方法是把连接串里的 SERVICE_NAME 改成 SID 试试但要注意这只是绕过问题而不是解决问题。从 11g 起监听注册机制更倾向于服务名不能用 SID 长期替代。tnsnames.ora 里写 (SID orcl) 能通但 (SERVICE_NAME orcl) 不通或者反过来都会指向这个根因。5.3 PL/SQL Developer 报初始化错误位数不对付现象客户端装完以后打开 PL/SQL Developer 直接报“Initialization error”或程序闪退但 ODBC 数据源测试连接却能成功。原因PL/SQL Developer 是 32 位进程加载了 64 位客户端的 oci.dll位数不匹配导致初始化失败。ODBC 能通是因为 ODBC 驱动管理器可能打开了 64 位入口和 32 位工具走的是不同驱动实例。解决在工具 Preferences 里把 OCI Library 指向 32 位客户端的 oci.dll如果当前机器只有 64 位客户端就再装一个 32 位客户端两个客户端可以共存。tnsnames.ora 拷到两个客户端的 network\admin 下各一份PL/SQL Developer 用 32 位的其他 64 位程序用 64 位的各走各的路互不干扰。这是我在处理工具连接问题时最常用也是最稳妥的布局。5.4 安装时报 INS-30131临时目录权限和中文路径在作怪现象双击 setup.exe 后卡在环境检查阶段弹出“INS-30131: 执行安装程序验证所需的步骤失败”安装无法继续。原因Oracle 安装程序需要在临时目录下创建文件用于校验Windows 的临时目录如果指向一个无写权限的位置或者当前用户目录路径带中文和非 ASCII 字符安装程序的环境检查就会失败。另一种情况是 rar 解压目录本身带空格或被安全软件拦截了部分脚本执行。解决把系统临时变量 TEMP 和 TMP 改到简单英文路径例如 C:\Temp并确保该目录存在且当前用户有写权限以管理员身份重新运行 setup.exe打开 rar 解压路径确认不含中文、空格和特殊符号。改完临时目录要重启一次命令行窗口或注销重登环境变量才会完整生效。5.5 本机能连上但程序或远端机器连不上防火墙和监听绑定地址一起查现象本机 sqlplus 和 PL/SQL Developer 都能连但另一台机器上的 Java 程序或 Python 脚本连接时报 TNS-12535 操作超时或连接直接卡死。原因数据库服务器上的 1521 端口防火墙没有放行或监听器只绑定了本机回环地址127.0.0.1。本机能连是因为本机到监听器走的也是回环绕开了防火墙限制制造了“一切正常”的假象。解决在数据库服务器的防火墙入站规则里放行 1521 端口在服务器的 listener.ora 文件里检查 HOST 项如果不是 0.0.0.0 或实际内网 IP说明监听只对回环开放需要改成正确的地址或留空让监听器绑定所有网卡然后重启监听服务。我一般会在部署完客户端后顺手要求 DBA 执行一次 lsnrctl status直接在输出里能看到监听是绑在哪个地址上比猜配置快得多。6. 把部署过程脚本化一个 bat 完成环境变量、配置检查与连通性验证用脚本把前面的手动操作固化下来是这份资源落地时最值得做的一件事。以前我每开一台新机器就要重复上面所有步骤后来写了一个批处理脚本从解压完成到验证连通一条龙整个过程不到一分钟。echo off set ORACLE_HOMEC:\oracle\product\11.2.0\client_1 set TNS_ADMIN%ORACLE_HOME%\network\admin set PATH%ORACLE_HOME%\bin;%PATH% echo [1/4] 检查 tnsnames.ora 是否存在... if not exist %TNS_ADMIN%\tnsnames.ora ( echo [ERROR] 未找到 tnsnames.ora请确认路径%TNS_ADMIN% exit /b 1 ) echo [2/4] 显示当前配置的别名... findstr /B [A-Za-z0-9_]* %TNS_ADMIN%\tnsnames.ora echo [3/4] 执行 tnsping 测试... tnsping ORCL echo [4/4] 执行 sqlplus 连接测试... sqlplus system/passwordORCL C:\check_conn.sql脚本的逻辑分成四段前三行先把环境变量在本次会话里设定好避免依赖系统级配置第一步用 if not exist 检查 tnsnames.ora 是否存在用 exit /b 1 在关键错误时停止继续执行防止后面用一个空的配置文件去测试第二步用 findstr 把文件里所有别名行列出来一眼确认要测的别名有没有写进去第三步和第四步分别验证网络路径和账号连接。check_conn.sql 里可以放一句最简单的查询例如 select name from v$database;用于验证账号权限真实可用。脚本里的 ORCL、system、password 三处要根据实际情况替换。执行后如果看到 tnsping 返回 OK 且 sqlplus 能跑出查询结果这台机器的客户端就算真正部署完成了。如果中间任何一步报错脚本的提示信息能直接把问题收窄到对应环节不用再打开图形界面一步步猜。从那以后我每次拿到新的 Oracle 客户端部署包都会强制走一遍这个脚本——先设环境变量再测 tnsping最后跑 sqlplus确认无误才交给工具软件去连。这个顺序让我少熬了很多次夜希望帮到你。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进