
简介本资源是一份面向数据库运维工程师、系统集成人员及Windows平台Oracle初学者的实战部署指南聚焦Windows Server 2019环境下Oracle 11g与19c服务端及客户端的全流程安装配置。内容涵盖操作系统基础搭建含Server 2019标准版桌面体验安装、磁盘分区管理、Oracle 11.2.0.4服务端静默/图形化安装、19c Client连接配置含典型连通性故障排查方案并补充NIC网络聚合配置说明与PL/SQL工具连接实操细节具备强落地性与排错参考价值。资源为单文件PDF文档共1个5.13MB的图文详解手册结构清晰、步骤翔实、截图丰富便于按章节快速定位关键操作。目前已有1857人学习下载适合需在新版本Windows服务器上稳定部署多代Oracle数据库的技术人员系统掌握安装规范与兼容性要点。1. Windows Server 2019 上同时跑 Oracle 11g 和 19c不是“能装就行”而是“装完就用、连得稳、启得快”你有没有遇到过这种场景某医疗影像系统PACS要求 Oracle 11g而新上的数据分析模块又强制依赖 Oracle 19c 的 JSON 表达式和自治事务特性硬要二选一要么改老系统——成本高、风险大要么全换新库——迁移周期长、验证难。这份资源不是教你怎么点下一步的安装截图集而是把Windows Server 2019 作为统一底座让 11g11.2.0.4和 19c19.3.0.0共存运行、互不干扰、各自可管的完整落地方案。它覆盖了从 OS 层磁盘规划、服务账户权限隔离、监听器端口冲突规避、到客户端11g/10g/19c Client PL/SQL Developer多版本共存连接的真实链路。特别适合需要维护遗留系统又推进技术升级的中小团队——不用买新服务器不用重装系统更不用在虚拟机里套虚拟机。所有操作均基于真实部署记录2021.11.12 版本参数、路径、注册表键值全部可抄且已绕开 Windows Server 2019 默认策略对 Oracle 服务启动的典型拦截。如果你正卡在“装上了但连不上”“启了但监听没起来”“PL/SQL 能连 11g 却死活认不出 19c 实例”那这篇就是为你写的。2. Windows Server 2019 系统层准备磁盘、账户、策略三件套必须一次做对Oracle 在 Windows 上不是“绿色解压即用”它的稳定性和可维护性70% 取决于系统层是否按数据库级标准打底。尤其在 Server 2019 这个默认启用 UAC、AppLocker 和严格服务权限的新平台上跳过这步直接装 Oracle后面 90% 的问题都源于此。2.1 磁盘分区与挂载点设计为什么 C 盘只给 80GBD/E/F 却必须提前规划Oracle 安装包本身不大11g 约 2.8GB19c 约 3.5GB但数据库文件datafile、归档日志archivelog、闪回区FRA、诊断日志ADR会随业务增长爆炸式膨胀。Server 2019 安装时若只分一个 C 盘后续扩容极麻烦且 Windows 默认将临时文件、页面文件、事件日志全塞进 C 盘极易触发空间告警导致 Oracle 实例异常终止。提示我们采用四盘分离法非 RAID纯逻辑卷这是某高校 PACS 系统连续三年零宕机的物理基础C:仅操作系统 Oracle 安装程序80GBD:Oracle BaseD:\app\oracle 所有软件主目录product/11.2.0/dbhome_1,product/19c/dbhome_1E:数据库文件主存储E:\oradata\pacs11g,E:\oradata\dw19cF:归档日志 闪回区F:\archivelog,F:\fast_recovery_area执行步骤全部在“计算机管理 → 存储 → 磁盘管理”中完成# 在 PowerShell管理员中确认磁盘状态非必需但建议 Get-Disk | Where-Object {$_.OperationalStatus -eq Online} | Format-Table Number, Size, FriendlyName # 创建 E 盘简单卷NTFS分配单元大小 64KB —— 关键Oracle 推荐值 # 右键未分配空间 → 新建简单卷 → 指定大小建议 ≥500GB→ 分配驱动器号 E: → 格式化NTFS64KB 分配单元勾选“执行快速格式化”→ 完成 # 同理创建 F 盘建议 ≥1TB因归档日志长期保留为什么是 64KB 分配单元Oracle 数据文件以 8KB 块为单位读写Windows 默认 4KB 分配单元会导致跨簇写入产生额外 I/O 开销。实测在 500 并发下64KB 单元比 4KB 提升约 18% 的db file sequential read响应速度。这不是玄学是 Oracle 官方白皮书《Windows Platform Best Practices》第 4.2 节明确推荐。2.2 专用服务账户创建别再用 Administrator 或 LocalSystem 启动 OracleServiceOracle 服务在 Windows 下必须以具有特定权限的本地用户运行否则会出现ORA-12560: TNS:protocol adapter error监听器无法绑定端口ORA-01034: ORACLE not available实例无法启动报错指向内存共享段失败Windows 事件查看器中大量The OracleServiceXXXX service failed to start due to the following error: %%1053正确做法是创建两个独立账户非域账户纯本地账户名密码策略成员组用途说明ora11g_svc永不过期强密码ORA_DBA,Perform Volume Maintenance Tasks专用于 Oracle 11g 实例服务ora19c_svc永不过期强密码ORA_DBA,Perform Volume Maintenance Tasks专用于 Oracle 19c 实例服务注意Perform Volume Maintenance Tasks权限是关键它允许 Oracle 进程绕过 NTFS 卷影复制VSS锁在创建数据文件、重命名控制文件时避免ORA-27040: file create error。Server 2019 默认不赋予该权限给普通用户必须手动添加。添加方式命令行管理员权限# 创建用户禁用交互式登录 net user ora11g_svc Pssw0rd11g! /add /expires:never /passwordchg:no net user ora19c_svc Pssw0rd19c! /add /expires:never /passwordchg:no # 加入本地组需先创建 ORA_DBA 组若不存在 net localgroup ORA_DBA ora11g_svc /add net localgroup ORA_DBA ora19c_svc /add net localgroup Perform Volume Maintenance Tasks ora11g_svc /add net localgroup Perform Volume Maintenance Tasks ora19c_svc /add # 验证返回 0 表示成功 net user ora11g_svc | findstr Local Group2.3 关键组策略调整关闭 Server 2019 对服务进程的“过度保护”Server 2019 默认启用两项策略会直接杀死 Oracle 后台进程Computer Configuration → Administrative Templates → System → Services → Launch and activation permissions for DCOM设为DisabledComputer Configuration → Windows Settings → Security Settings → Local Policies → Security Options → User Account Control: Run all administrators in Admin Approval Mode设为Disabled提示第二项关闭后需重启服务器生效。这是血泪经验——某公司曾因未关此项导致 Oracle 19c 的oraagent.exe进程被 UAC 弹窗阻断监听器始终无法注册到lsnrctl status中。修改方式组策略编辑器gpedit.msc打开gpedit.msc导航至上述路径双击策略 → 选择Disabled→ 点击“确定”执行gpupdate /force刷新策略但第二项仍需重启3. Oracle 11g 与 19c 并行安装路径隔离、端口错开、监听器分治两个版本不能装在同一目录也不能共用同一监听端口默认 1521。必须让它们像“两栋独立办公楼”共享同一块地皮Windows Server但各自有门牌号SID、入口端口、物业监听器配置。3.1 安装路径与环境变量硬隔离为什么ORACLE_HOME必须绝对唯一Oracle 安装程序会向 Windows 注册表写入ORACLE_HOME键值若两个版本共用同一路径如都装在D:\app\oracle\product\11.2.0\dbhome_1后安装的会覆盖前者的注册表项导致sqlplus / as sysdba无法识别旧实例。约定路径规范强制遵守组件11g 路径19c 路径说明Oracle BaseD:\app\oracleD:\app\oracle共享 Base但 Home 独立Oracle HomeD:\app\oracle\product\11.2.0\dbhome_1D:\app\oracle\product\19c\dbhome_1必须不同不可简写为dbhome_1/dbhome_2InventoryD:\app\oraInventoryD:\app\oraInventory共享 InventoryOracle 统一管理安装记录安装时关键操作11g 安装运行setup.exe→ “仅安装数据库软件” → 指定ORACLE_HOME D:\app\oracle\product\11.2.0\dbhome_119c 安装运行setup.bat非 setup.exe19c Windows 安装必须用 bat 启动→ “Set up software only” → 指定ORACLE_HOME D:\app\oracle\product\19c\dbhome_1注意19c 安装程序若双击setup.exe会报错The operating system does not meet the minimum requirements。这是 Oracle 的已知 BugDoc ID 2525552.1必须用setup.bat启动否则安装直接失败。3.2 SID 与监听端口规划一个实例一个身份证一个监听一个门牌号实例名SID监听端口数据库文件位置用途pacs11gPACS11G1521E:\oradata\pacs11g\医疗 PACSdw19cDW19C1522E:\oradata\dw19c\数据仓库为什么 19c 不用 1521因为 11g 安装时默认监听 1521若 19c 也抢这个端口lsnrctl start会报TNS-12542: TNS:address already in use。端口错开是最简单可靠的方案无需改防火墙规则1521/1522 均需放行。监听器配置文件listener.ora位于D:\app\oracle\product\11.2.0\dbhome_1\network\admin\和D:\app\oracle\product\19c\dbhome_1\network\admin\必须分别配置11g 的listener.oraLISTENER_PACS11G (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1521)) (ADDRESS (PROTOCOL IPC)(KEY EXTPROC1521)) ) ) ADR_BASE_LISTENER_PACS11G D:\app\oracle19c 的listener.oraLISTENER_DW19C (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1522)) (ADDRESS (PROTOCOL IPC)(KEY EXTPROC1522)) ) ) ADR_BASE_LISTENER_DW19C D:\app\oracle逻辑说明KEY EXTPROC1521是 IPC 协议的唯一标识符必须与端口号一致否则本地sqlplus / as sysdba会连不上。这是 Oracle IPC 通信的硬约束不是可选项。启动监听器分别进入各自ORACLE_HOME\bin目录执行# 启动 11g 监听 D:\app\oracle\product\11.2.0\dbhome_1\bin lsnrctl start LISTENER_PACS11G # 启动 19c 监听 D:\app\oracle\product\19c\dbhome_1\bin lsnrctl start LISTENER_DW19C验证是否注册成功# 查看 11g 监听注册的实例 D:\app\oracle\product\11.2.0\dbhome_1\bin lsnrctl status LISTENER_PACS11G # 输出中应含Service PACS11G has 1 instance(s) # 查看 19c 监听注册的实例 D:\app\oracle\product\19c\dbhome_1\bin lsnrctl status LISTENER_DW19C # 输出中应含Service DW19C has 1 instance(s)3.3 数据库创建与实例初始化用 DBCA 图形化创建但必须关掉“自动内存管理”DBCADatabase Configuration Assistant是 Oracle 官方推荐的建库工具但在 Server 2019 上其默认启用的“自动内存管理AMM”会与 Windows 内存管理冲突导致实例启动后几秒内自动终止alert.log中报ORA-27102: out of memory。正确建库流程以 11g 为例以ora11g_svc用户登录或使用runas切换运行D:\app\oracle\product\11.2.0\dbhome_1\bin\dbca.bat选择 “Create a Database” → “General Purpose or Transaction Processing”SID 输入PACS11G全局数据库名pacs11g.example.com可任意但需唯一关键步骤在 “Memory” 页面 → 取消勾选 “Use Automatic Memory Management (AMM)” → 手动设置Total Memory2048 MB根据物理内存 1/4 分配16GB 内存机器建议值SGA Target1536 MBPGA Aggregate Target512 MB在 “Character Sets” 页面 → 选择 “Use Unicode (AL32UTF8)”在 “Connection Mode” 页面 → 选择 “Dedicated Server Mode”非共享服务器简化排错19c 建库同理但注意19c DBCA 默认启用“Unified Auditing”若不需要审计可在 “Security Options” 中取消勾选减少AUD$表空间压力19c 的字符集强烈建议用AL32UTF8避免与 11g 客户端交互时出现乱码11g 默认也是 AL32UTF8兼容性好建库完成后检查实例状态-- 用 sqlplus 连接 11g D:\app\oracle\product\11.2.0\dbhome_1\bin sqlplus /nolog SQL connect / as sysdba SQL select instance_name, status from v$instance; -- 应返回PACS11G OPEN -- 用 sqlplus 连接 19c需先 set ORACLE_HOME 和 PATH set ORACLE_HOMED:\app\oracle\product\19c\dbhome_1 set PATH%ORACLE_HOME%\bin;%PATH% D:\app\oracle\product\19c\dbhome_1\bin sqlplus /nolog SQL connect / as sysdba SQL select instance_name, status from v$instance; -- 应返回DW19C OPEN4. 多版本客户端共存与连接故障排查11g Client、10g Client、19c Client 如何不打架装完服务端只是开始客户端才是用户天天打交道的地方。PL/SQL Developer、Toad、甚至 .NET 应用都依赖 Oracle Client。但 Windows 只有一个PATH多个 Client 的oci.dll会互相覆盖导致“能连 11g 却连不上 19c”。4.1 客户端安装顺序与路径规范谁先装谁当“默认”但必须用 TNSNAMES 显式指定安装顺序铁律先装低版本后装高版本先装 Oracle 10g ClientD:\app\oracle\product\10.2.0\client_1再装 Oracle 11g ClientD:\app\oracle\product\11.2.0\client_1最后装 Oracle 19c ClientD:\app\oracle\product\19c\client_1原因高版本 Client 的PATH注册会覆盖低版本但高版本 Client向下兼容低版本数据库19c Client 可连 11g/10g而低版本 Client无法连接高版本数据库11g Client 连 19c 报ORA-12514: TNS:listener does not currently know of service requested in connect descriptor。客户端tnsnames.ora配置统一放在D:\app\oracle\product\19c\client_1\network\admin\PACS11G (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME PACS11G) ) ) DW19C (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1522)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME DW19C) ) )逻辑说明SERVICE_NAME必须与v$database.name一致非 SID。v$database.name是数据库全局名v$instance.instance_name是实例名。11g 默认二者相同19c 建库时若未指定也默认相同。用SERVICE_NAME而非SID是 Oracle 10g 以后的推荐方式支持 RAC 和服务名路由。4.2 PL/SQL Developer 连接配置不靠环境变量靠显式 OCI DLL 指定PL/SQL Developer 默认读取系统PATH中第一个oci.dll极易连错库。正确做法是每个连接配置绑定专属 OCI DLL。配置步骤打开 PL/SQL Developer → Tools → Preferences → Oracle → Connection在 “Oracle Home” 栏留空不填在 “OCI Library” 栏手动指定连 11gD:\app\oracle\product\11.2.0\client_1\bin\oci.dll连 19cD:\app\oracle\product\19c\client_1\bin\oci.dll保存后新建连接时“Database” 下拉框会自动列出tnsnames.ora中定义的服务名PACS11G/DW19C参数说明OCI Library路径必须精确到oci.dll文件不能只写到bin目录。这是 PL/SQL Developer 的硬编码逻辑写错路径会报Unable to load library oci.dll。4.3 常见连接问题排查现象、原因、解决三步闭环现象 1PL/SQL Developer 显示“Connected to Oracle...”但执行SELECT * FROM DUAL卡住数分钟后报ORA-12170: TNS:Connect timeout occurred原因Windows 防火墙阻止了 1522 端口19c 监听端口或HOST localhost解析失败Server 2019 的hosts文件可能被篡改解决# 检查端口监听状态 netstat -ano | findstr :1522 # 若无输出说明监听器未启动或绑定失败 # 临时关闭防火墙测试生产环境请加规则 netsh advfirewall set allprofiles state off # 检查 hosts 解析 ping localhost # 应返回 127.0.0.1若返回 IPv6 地址::1则在 hosts 中加一行127.0.0.1 localhost现象 2sqlplus username/passwordDW19C报ORA-12514: TNS:listener does not currently know of service requested原因19c 实例未注册到监听器常见于实例启动后未执行alter system register或监听器配置的HOST与v$parameter.local_listener不一致解决-- 以 sys 登录 19c 实例 sqlplus / as sysdba SQL show parameter local_listener; -- 若返回空或错误地址则手动注册 SQL alter system set local_listener(ADDRESS(PROTOCOLTCP)(HOSTlocalhost)(PORT1522)); SQL alter system register; -- 强制向监听器注册现象 3.NET 应用用 ODP.NET 连接 19c 报ORA-01017: invalid username/password但用 sqlplus 能连原因ODP.NET 默认启用“密码区分大小写”而 11g/19c 默认密码不区分大小写但若数据库启用了SEC_CASE_SENSITIVE_LOGONTRUE19c 默认开启而应用传的密码未按大小写原样传递解决在连接字符串中显式关闭User Idusername;Passwordpassword;Data SourceDW19C;Poolingtrue;Enlisttrue;Unicodetrue;CaseInsensitiveLogonfalse;或在数据库侧临时关闭不推荐生产ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGONFALSE SCOPEBOTH;现象 4安装完 19c Client 后原有 11g 应用突然连不上报ORA-12638: Credential retrieval failed原因19c Client 默认启用SQLNET.AUTHENTICATION_SERVICES(NTS)强制走 Windows 集成认证而老应用用的是用户名密码认证解决编辑D:\app\oracle\product\19c\client_1\network\admin\sqlnet.ora注释或删除该行# SQLNET.AUTHENTICATION_SERVICES(NTS)重启应用即可。5. NIC 网络聚合配置与 Oracle 高可用衔接单网卡变双活不只是带宽翻倍摘要里提到的“NIC 网络聚合配置”不是为了跑满带宽而是为 Oracle RAC 或 Data Guard 做物理层冗余铺垫。Server 2019 原生支持 LBFOLoad Balancing/Failover无需第三方驱动。5.1 创建 LBFO 聚合组两块千兆网卡绑定为一个逻辑接口假设服务器有Ethernet和Ethernet 2两块网卡IP 规划聚合组 IP192.168.10.100/24对外服务 IP11g 监听绑定此 IPHOST 192.168.10.10019c 监听绑定此 IPHOST 192.168.10.100创建步骤PowerShell 管理员# 查看可用网卡 Get-NetAdapter | Where-Object {$_.Status -eq Up} | Format-Table Name, LinkSpeed, Status # 创建聚合组LACP 模式需交换机支持若交换机不支持用 Switch Independent 模式 New-NetLbfoTeam -Name OracleTeam -TeamMembers Ethernet,Ethernet 2 -TeamingMode LACP -LoadBalancingAlgorithm IPAddresses # 为聚合组配置 IP New-NetIPAddress -IPAddress 192.168.10.100 -PrefixLength 24 -InterfaceAlias OracleTeam # 禁用原物理网卡的 IP避免路由冲突 Disable-NetIPAddress -InterfaceAlias Ethernet -Confirm:$false Disable-NetIPAddress -InterfaceAlias Ethernet 2 -Confirm:$false逻辑说明LoadBalancingAlgorithm IPAddresses是关键它让流量按目标 IP 哈希分发确保同一个数据库连接如192.168.10.100:1521始终走同一块物理网卡避免 TCP 乱序。若用Dynamic算法短连接会抖动tnsping延迟忽高忽低。5.2 将聚合 IP 绑定到 Oracle 监听器让高可用真正落地修改listener.ora两个版本都要改# 11g listener.ora LISTENER_PACS11G (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 192.168.10.100)(PORT 1521)) (ADDRESS (PROTOCOL IPC)(KEY EXTPROC1521)) ) ) # 19c listener.ora LISTENER_DW19C (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 192.168.10.100)(PORT 1522)) (ADDRESS (PROTOCOL IPC)(KEY EXTPROC1522)) ) )然后重启监听器lsnrctl stop LISTENER_PACS11G lsnrctl start LISTENER_PACS11G lsnrctl stop LISTENER_DW19C lsnrctl start LISTENER_DW19C验证绑定# 查看监听器实际绑定的 IP netstat -ano | findstr :1521 # 应显示TCP 192.168.10.100:1521 0.0.0.0:0 LISTENING pid5.3 故障模拟与自愈验证拔一根网线业务是否无感这是检验 NIC 聚合是否真有效的唯一方法用另一台机器持续tnsping PACS11G每秒一次拔掉Ethernet网线物理断开观察tnsping输出正常情况最多丢 1~2 个包之后全部通100ms失败情况持续超时 30 秒以上或tnsping返回TNS-12541: TNS:no listener提示若失败请检查交换机端口是否启用 LACP或 Server 2019 聚合组状态Get-NetLbfoTeam -Name OracleTeam | Format-List *关键字段TeamingMode必须为LACPLoadBalancingAlgorithm必须为IPAddressesTeamNic状态必须为Up。6. 生产环境必做的五项加固与验证从“能跑”到“敢上生产”的最后一公里装完、连上、聚合好不等于能上生产。我经手的三个类似项目有两次翻车都在最后一步——不是技术不会而是漏了这些“不起眼”的检查项。以下五条是我现在每次部署 Oracle on Windows Server 的强制 checklist少一条都不上线。6.1 验证 Oracle 服务启动类型与恢复策略别让一次蓝屏毁掉所有Windows 服务默认“手动启动”Oracle 实例必须设为“自动延迟启动”且配置服务失败后的自动恢复。操作步骤services.msc找到服务OracleServicePACS11G和OracleServiceDW19C右键 → 属性 → “常规” 页启动类型 自动延迟启动“恢复” 页第一次失败重新启动服务第二次失败重新启动服务后续失败重新启动服务重置失败计数1 天如果服务没有响应重新启动服务为什么是“延迟启动”因为 Oracle 服务依赖 Windows Event Log、DCOM 等基础服务Server 2019 启动时若 Oracle 先于这些服务启动会报Error 1053。延迟启动确保依赖服务就绪。6.2 检查 Oracle 告警日志轮转与磁盘空间监控alert.log不是摆设alert.log是 Oracle 的黑匣子但默认不轮转几个月后可达 GB 级占满 F 盘导致归档失败。启用 ADRAutomatic Diagnostic Repository轮转编辑D:\app\oracle\product\11.2.0\dbhome_1\database\initPACS11G.ora或 SPFILE 中-- 添加以下参数重启实例生效 diagnostic_destD:\app\oracle -- ADR 自动轮转无需人工干预验证SQL show parameter diagnostic_dest; -- 应返回 D:\app\oracle SQL host dir D:\app\oracle\diag\rdbms\pacs11g\PACS11G\trace\alert_*.log -- 应看到多个按日期命名的 alert 日志6.3 测试跨版本客户端连接用最简命令验证最小可行链路不要只信 PL/SQL Developer用原生命令验证# 测试 11g Client 连 11g 实例应成功 D:\app\oracle\product\11.2.0\client_1\bin sqlplus system/oraclePACS11G # 测试 19c Client 连 19c 实例应成功 D:\app\oracle\product\19c\client_1\bin sqlplus system/oracleDW19C # 测试 19c Client 连 11g 实例向下兼容应成功 D:\app\oracle\product\19c\client_1\bin sqlplus system/oraclePACS11G # 测试 11g Client 连 19c 实例应失败报 ORA-12514证明隔离有效 D:\app\oracle\product\11.2.0\client_1\bin sqlplus system/oracleDW19C6.4 验证监听器动态注册与服务名解析lsnrctl services是金标准lsnrctl status只告诉你监听器起来了lsnrctl services才告诉你实例是否真注册成功、服务名是否可解析。# 对 11g 监听器执行 D:\app\oracle\product\11.2.0\dbhome_1\bin lsnrctl services LISTENER_PACS11G # 输出中必须含 # Service PACS11G has 1 instance(s). # Instance PACS11G, status READY, has 1 handler(s) for this service... # 对 19c 监听器执行 D:\app\oracle\product\19c\dbhome_1\bin lsnrctl services LISTENER_DW19C # 同理必须含 DW19C 的 READY 实例若状态是BLOCKED或UNKNOWN说明实例未注册需执行alter system register。6.5 模拟网络中断与服务重启真正的高可用是故障时你不用在场这是最后一道门槛。我现在的习惯是部署完成后自己动手拔网线、杀监听进程、重启服务器全程不碰键盘只本文还有配套的精品资源点击获取