1. 环境准备与安装规划
1.1 版本选择与软硬件门槛
在Windows上装Oracle 21C,很多人一上来就踩坑,其实大部分问题都出在没搞清楚“这个版本到底适不适合你”。
Oracle 21C属于创新版本(Innovation Release),不是长期支持版本。它的定位更偏尝鲜和功能验证,官方对21C的标准支持周期比较短,生产环境一般不建议主力跑在21C上,但作为开发机、学习环境、做demo演示,21C反而挺合适——它内置了很多新特性,比如区块链表、原生JSON、自动内存管理优化这些,在Windows上体验一遍成本很低。
硬件门槛建议别再拿十年前的配置硬撑。Windows上安装Oracle 21C企业版,官方要求稍宽松,但实际跑起来,我建议至少4核CPU、8GB内存、20GB可用磁盘。装的时候你会发现,Oracle安装程序会做前置检查,内存不够虽然也能继续,但后面启动实例、跑监听、占内存这几个环节会非常难受。我在8GB内存的笔记本上装过,空闲时内存剩3GB多,一旦启动数据库,内存直接吃掉1.5GB左右,如果再开个PL/SQL Developer和浏览器,基本快到极限。有条件建议16GB内存,体验完全不是一个级别。
磁盘方面,Oracle 21C的安装文件解压后就有2GB多,安装完数据库主目录(ORACLE_HOME)加上数据文件,轻松超过10GB。如果你选择的是企业版,尽量留足30GB再动手。很多人在安装中途报“磁盘空间不足”然后卡死,就是因为只留了不到15GB。
1.2 下载Oracle 21C Windows版的关键细节
下载Oracle 21C Windows版,要去Oracle官网的Software Delivery Cloud(OTN)页面,这里需要注册并登录Oracle账号。不需要付费,但账号是必须的,很多人卡在这一步,以为要授权费,其实个人学习用途完全免费。
下载时注意选对平台和版本。关键选项是:
- 平台:Microsoft Windows x64(64位)
- 版本:Oracle Database 21C(21.3)for Microsoft Windows x64
下载下来的文件一般是ZIP压缩包,名称类似WINDOWS.X64_213000_db_home.zip,大小约2GB。这里有个容易忽略的点:下载完成后务必校验文件完整性。Oracle官方页面会提供对应文件的校验值,Windows下可以用PowerShell的Get-FileHash命令,或者7-Zip自带的校验功能。我曾经图省事跳过这一步,结果解压到一半报“文件损坏”,重新下载花了大半天,血的教训。
解压路径也要提前规划好。Oracle的安装程序要求安装路径中不能包含中文和空格,建议放在纯英文目录,比如D:\oracle21c。有人说“我放中文目录也能装”,那是运气好,碰上游戏规则没触发。实操下来,Oracle在Windows上的路径解析对中文兼容一直不稳定,不要赌这个小概率。
1.3 安装前的Windows系统准备
正式安装前,有几步准备工作建议先做完,能省大量排查时间。
第一,关闭UAC(用户账户控制)或者至少确保以管理员身份运行安装程序。不关UAC也能装,但安装过程中弹出一堆授权提示,稍不留神点“否”就直接中断,装到一半失败后再回头处理,非常麻烦。我在Windows 10和Windows 11上都试过,最稳的方式是右键setup.exe选择“以管理员身份运行”,UAC弹窗时选“是”。如果你想让安装更顺畅,可以临时把UAC拉到最低,装完再调回来,但非必要不建议动UAC全局设置。
第二,提前确认防火墙不会拦Oracle服务。Oracle安装完成后,监听器默认监听1521端口,Windows防火墙第一次启动时会弹窗询问是否允许。如果点了取消,后面远程连接基本必然报错。更稳妥的办法是安装前先手动放行1521端口的入站规则:控制面板 → Windows Defender防火墙 → 高级设置 → 入站规则 → 新建规则 → 端口 → TCP → 填写1521 → 允许连接。装完数据库后再验证一次,比出问题再排查省力得多。
第三,系统时间要准。这个点看着无关紧要,但Oracle的很多内部校验依赖时间戳,系统时间偏差过大可能会导致安装脚本执行异常。我遇到过一台测试机时间快了3小时,装21C时在线校验一直失败,后来同步了系统时间才恢复正常。
2. 安装过程核心步骤详解
2.1 图形化安装流程的完整走读
启动安装程序后,Oracle 21C的图形化安装界面和19C差别不大,但有几个步骤值得专门说。
第一步是“配置选项”。这里会出现两个分支:一个是“创建并配置单实例数据库”,一个是“仅设置软件”。第一次安装、想快速跑起来,直接选“创建并配置单实例数据库”;如果你只是想在现有机器上装一个Oracle客户端或者纯软件环境,那选后者。这个选择后面不可逆,选错了只能卸载重来。
第二步是“系统类”,要求选择“桌面类”还是“服务器类”。这里很多人就直接默认了,但区别其实很大。
- 桌面类:适合本地开发,默认配置比较省资源,数据量小,适合学习验证。
- 服务器类:提供更完整的配置选项,比如ASM、RAC相关组件的预配置,内存参数可以自定义调整。
我的建议是:如果机器配置足够(16GB内存以上),直接选服务器类。桌面类虽然省事,但后续要调整SGA、PGA、字符集这些核心参数时,自由度低不少。我自己第一次装选了桌面类,后来想自定义PDB的创建方式,发现很多选项是灰的,只能重启DBCA重新配置,反而更折腾。
第三步是“Oracle主目录位置”。默认会指向C:\app\用户名\product\21c\dbhome_1。建议改到数据盘,比如D:\app\oracle\product\21c\dbhome_1。原因很简单:C盘分区空间通常紧张,Oracle日志、告警文件越积越多,放到数据盘可避免系统盘被拖垮。
第四步是“数据库标识符”。默认的全局数据库名是orcl,可改成自定义的名字,但要注意:全局数据库名和SID在21C里默认是一样的,改的时候保持小写、不超过8个字符。21C默认启用多租户架构(CDB/PDB),所以这里还会要求填PDB名字,默认是orclpdb。这里强烈建议把PDB名称记住,后面连接数据库、配置tnsnames.ora、填SERVICE_NAME,全都会用到。很多人ORA-12514的根源,就是连接时把PDB名字写错了或者压根不知道有这回事。
第五步是“管理口令”。这个口令用于SYS、SYSTEM等超级管理员账户,Oracle要求至少8位、包含大写字母、小写字母和数字。设置时注意不要包含特殊字符如&、$、#,虽然在安装界面能通过,但后续在命令行、脚本、CI/CD配置里这些特殊字符会被解析器拦截,引发各种玄学问题。
全部配置完成后,安装程序会进入“先决条件检查”。这一步会列出所有不满足的项,常见的有内存不足、磁盘空间不足、Windows版本不兼容等。遇到红叉不要直接点“忽略”,绝大多数情况下解决掉再继续才是正解。我当时遇到的是“物理内存不足”警告,虽然能强制继续,但装完后数据库起停都慢,查日志才发现是SGA把内存拖垮了。
2.2 安装中的关键点击与等待信号
当安装进度走到大约80%时,会出现“数据库配置助手(DBCA)”的阶段。这个阶段是创建数据库实例的关键步骤,通常会卡住一会儿。很多人这时候以为死机了,自乱阵脚去强制结束进程,结果整个安装就废了。
DBCA阶段正常表现是:进度条在某个百分比停留几分钟,日志文件持续增长,数据库在后台创建数据文件、创建数据字典、编译系统包,这是最耗时的一环。如果半小时以上毫无动静,那才需要考虑是不是异常了。可以打开DBCA日志目录(默认在%TEMP%下)查看具体进度,尤其关注是否有ORA-错误。
安装完成后,安装程序会提示“完成”,并显示数据库企业管理器(EM Express)的访问地址,默认是https://localhost:5500/em。这个地址先记下来,后面验证数据库是否正常很常用。
2.3 安装完成后的第一轮验证
装完不是万事大吉,第一时间做三件事验证环境是否健康:
第一,检查Windows服务。按Win + R输入services.msc回车,找到OracleServiceORCL(服务名随你的SID变化)和OracleOraDB21Home1TNSListener,确认两个服务状态都是“正在运行”。如果服务没有自动启动,右键手动启动,然后检查Windows事件查看器里的错误记录。
第二,在命令行手工连接一次数据库:
sqlplus sys/你的密码@localhost:1521/orcl as sysdba如果这里能连上,说明实例和监听的基本链路是通的。如果报ORA-01034或ORA-27101,多半是实例没起来,需要手动启动:
startup;如果报ORA-12541,说明监听没起来:
lsnrctl start第三,验证PDB状态。21C默认创建的PDB可能是MOUNT状态而非OPEN,这是很多新手没留意的地方。以sysdba身份登录CDB后执行:
SELECT name, open_mode FROM v$pdbs;如果显示MOUNTED,需要执行:
ALTER PLUGGABLE DATABASE ORCLPDB OPEN;这是很重要的一步,因为很多开发工具、PL/SQL Developer连接的其实是PDB,而不是CDB。PDB不打开,连接就会报各种稀奇古怪的错误,最常见的就是ORA-12514。
3. 环境变量配置实操
3.1 为什么Windows上必须配环境变量
装完Oracle,你会发现命令行里直接敲sqlplus大概率会提示“不是内部或外部命令”。原因很简单:Oracle的可执行文件(sqlplus.exe、expdp.exe、impdp.exe、rman.exe等)都在ORACLE_HOME的bin目录下,Windows不会自动去那个目录找命令,你得把路径告诉系统。
环境变量就是干这个用的。配置好ORACLE_HOME和PATH后,任何目录下敲sqlplus都能识别,开发工具(比如PL/SQL Developer、Navicat、DBeaver)也能自动读取到Oracle客户端的信息。
每次安装完Oracle后手配环境变量这个习惯,能直接避免掉一大半的“找不到命令”类问题。
3.2 ORACLE_HOME与PATH的配置步骤
配置环境变量的流程,以Windows 10/11为例:
- 右键“此电脑”→“属性”→“高级系统设置”→“环境变量”。
- 在“系统变量”区域点击“新建”,变量名填
ORACLE_HOME,变量值填你的Oracle主目录路径,例如:
注意,这个路径里面不能有反斜杠结尾,也不能加引号。填错路径会导致后面所有基于ORACLE_HOME的工具全部失效。ORACLE_HOME = D:\app\oracle\product\21c\dbhome_1 - 在系统变量里找到
Path,双击打开,点击“新建”,添加一行:
一定要加在Path列表里,而不是覆盖原来的Path。见过有人图省事把原有Path删了只留Oracle,结果Windows很多系统命令都失效了,非常不建议。%ORACLE_HOME%\bin - 点击确定保存,然后打开一个新的命令行窗口(旧的窗口不会刷新新环境变量,必须重开会话)。
验证是否配置成功:
echo %ORACLE_HOME%能正确输出ORACLE_HOME路径,再执行:
where sqlplus如果能定位到D:\app\oracle\product\21c\dbhome_1\bin\sqlplus.exe,就说明配置成功。
3.3 其他容易被忽略的环境变量
除了ORACLE_HOME和Path,还有几个变量在特定场景下非常有用:
TNS_ADMIN:这个变量指向tnsnames.ora和listener.ora所在目录。默认情况下,Oracle会在ORACLE_HOME的network/admin目录下找这两个文件。但如果你有多个Oracle客户端版本共存,或者想把网络配置文件抽离出来统一管理,就设置TNS_ADMIN指向自定义目录,例如D:\app\oracle\network\admin。例如安装Oracle 21C的同时装了旧版Oracle客户端,两个版本的tnsnames.ora互相干扰,用TNS_ADMIN就能明确指定用哪一份。
ORACLE_SID:这个变量表示默认连接的数据库实例名。在Windows上,如果你只有一个实例,且日常都用sqlplus / as sysdba连接本地数据库,可以设置成你的SID,比如ORCL。但如果你同时操作多个实例,建议不要设置这个变量,避免连接时搞混,我倾向于保持为空,需要时在sqlplus里用@实例名显式指定,或者用连接串。
NLS_LANG:这个变量决定Oracle客户端使用的字符集。Windows中文环境下如果不设置,很常见会显示乱码,尤其是在SQL*Plus里查询中文数据时。建议设置为:
NLS_LANG = SIMPLIFIED CHINESE_CHINA.AL32UTF8注意,这里的AL32UTF8要和数据库实际字符集匹配。如果数据库是ZHS16GBK,而客户端用AL32UTF8,依然会乱码。查询数据库字符集的方法:
SELECT value FROM nls_database_parameters WHERE parameter='NLS_CHARACTERSET';3.4 环境变量配置失败的典型表现
配置完环境变量后,如果还是找不到sqlplus,先看是不是用了旧命令行窗口。Windows的环境变量在会话启动时被写入,已经打开的命令行窗口不会自动更新,必须关掉重开。还有一个隐藏坑:修改系统变量后需要重启一次文件资源管理器,否则某些IDE(比如VS Code的集成终端)可能读取不到最新的环境变量。
如果echo %ORACLE_HOME%能输出了,但where sqlplus却找不到,检查一下Path变量里是不是只有ORACLE_HOME而没有展开%ORACLE_HOME%\bin。变量嵌套引用时,如果顺序有问题,系统解析会失效。最简单的测试方法是在命令行里执行:
echo %ORACLE_HOME%\bin如果输出正确路径,再执行:
%ORACLE_HOME%\bin\sqlplus /nolog手动用完整路径启动,确认bin目录下的sqlplus能运行。如果这一步也报“无法启动此程序,因为计算机中丢失VCRUNTIME140.dll”,说明缺少Visual C++运行库,去微软官网装VC++ 2015-2022运行库即可。
4. ORA-12514错误深度排查
4.1 错误含义与常见场景
ORA-12514在Windows上装完Oracle 21C后可能是出现频率最高的错误,完整信息是:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor翻译成人话:客户端问监听器“我要连某个服务”,监听器说“我没听过这个服务”。
注意这个错误和ORA-12541(监听器没有启动)、ORA-12560(协议适配器错误)不一样,方向完全不同。ORA-12514说明监听器是活的,但它的“通讯录”里没有你要找的服务名。类比一下:你打电话到前台,前台接通了(监听器活着),但你说“找张三”,前台说“我们公司没这个人”——这就是ORA-12514。
最常见的报错场景有三种:
- 在另一台机器上通过PL/SQL Developer远程连接时,填写的服务名不对。
- 本地sqlplus连接时,连接串里写的SERVICE_NAME和实际注册到监听器的服务名不一致。
- 连接的是PDB,但服务名填写却被写成了CDB的名字或写成SID。
这三种场景对应三种不同的排查路径。
4.2 第一步:确认监听器到底知道了哪些服务
遇到ORA-12514,首先不要改配置,先看监听器当前知道哪些服务。在命令行执行:
lsnrctl status输出结果中会有一段类似于:
Services Summary... Service "orcl" has 2 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Service "orclpdb" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service...这里的关键信息是Service "xxx"。你的连接串里填写的服务名必须和这里列出的完全一致(区分大小写)。如果你要连PDB,就必须在列表里看到对应的PDB服务名;如果你看到服务列表中压根没有你要连的名字,要么是数据库未注册到监听,要么是监听配置有问题。
如果lsnrctl status里只有orcl,没有orclpdb,优先执行数据库动态注册:
sqlplus / as sysdba ALTER SYSTEM REGISTER;然后再执行lsnrctl status重新查看。动态注册通常几秒内生效,如果还是没有,检查数据库的service_names参数:
SHOW PARAMETER service_names;如果这个参数的值不对,会直接导致注册失败。可以用以下语句修正:
ALTER SYSTEM SET service_names='orcl,orclpdb' SCOPE=BOTH;4.3 第二步:检查tnsnames.ora里的连接描述符
如果你的连接方式是通过TNS别名(比如PL/SQL Developer里填一个名字),那问题很可能出在tnsnames.ora里。这个文件默认位置在:
%ORACLE_HOME%\network\admin\tnsnames.ora用记事本打开后,典型的条目长这样:
ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )这里的SERVICE_NAME就必须和监听器里注册的服务名一模一样。连接PDB时,要改成:
ORCLPDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orclpdb) ) )很多人直接复制网上的模板,没留意HOST一项,如果从别的机器拷贝的tnsnames.ora,HOST可能还写着别人的主机名,本机解析不了,就又会绕回ORA-12514的坑。
如果你是用PL/SQL Developer连接,不需要修改tnsnames.ora,直接在登录界面填连接串也可以,在“Database”一栏填入localhost:1521/orclpdb,这是直连服务名的方式,也能绕开tnsnames.ora配置错误的问题。
4.4 第三步:确认listener.ora没有被改坏
Windows下Oracle安装完成后,默认的listener.ora往往很简单,甚至可以不写任何监听条目,靠默认监听配置(LISTENER)自动监听1521端口。但有些教程会让人手改listener.ora,比如加上:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = D:\app\oracle\product\21c\dbhome_1) (SID_NAME = orcl) ) )这种静态注册方式本身没问题,但如果ORACLE_HOME路径写错,或者GLOBAL_DBNAME和实际的service_names不一致,监听器就会陷入混乱,导致动态注册和静态注册相互覆盖,反而更容易出现ORA-12514。
我的建议是:在Windows单机开发环境,不要手动改listener.ora,让它保持默认,靠动态注册就够了。如果你改过,恢复出厂设置的方法很简单,直接删掉listener.ora文件内容里的自定义SID_LIST部分,然后重启监听:
lsnrctl stop lsnrctl start如果还不行,可以考虑备份后删除listener.ora,重新用netca配置向导创建一份新的监听配置。
4.5 第四步:防火墙与Host解析的干扰
Windows防火墙拦掉1521端口,远程连接会报ORA-12541或ORA-12514。很多人会困惑:“防火墙和ORA-12514有啥关系?” 实际场景下,防火墙丢包有时表现为连接超时(ORA-12535),但某些中间网络设备会返回一个RESET包,导致Oracle客户端解析成“监听器不知道服务”,表达为ORA-12514。这种伪性报错最坑人。
排查方法很简单:先在本机用sqlplus通过localhost连接一次,如果能通,再用本机IP连接,最后从远程客户端连接。哪一步失败,问题就定位在哪一层:
localhost能连,127.0.0.1能连,但本机IP连不上 → 防火墙问题或监听地址绑定问题。- 本机能连,远程不能 → 防火墙问题为主。
- 都连不上 → 监听器的HOST配置问题,检查listener.ora里的HOST是不是写成了不存在的IP。
另外,Windows的hosts文件也可能影响。如果在tnsnames.ora里HOST写的是主机名(比如DESKTOP-ABC123),而hosts文件里没有映射到127.0.0.1或局域网IP,解析失败也可能表现成连接异常。修改hosts文件前先备份:
127.0.0.1 DESKTOP-ABC1234.6 常见错误速查表
| 错误代码 | 含义 | 排查方向 |
|---|---|---|
| ORA-12514 | 监听器未知服务 | 服务名是否匹配、动态注册是否成功 |
| ORA-12541 | 监听器未启动 | 启动监听、检查1521端口占用 |
| ORA-12560 | 协议适配器错误 | Oracle服务是否启动、环境变量是否正确 |
| ORA-01034 | ORACLE不可用 | 实例是否启动、监听是否启动 |
| ORA-01017 | 用户名/密码无效 | 账号口令错误,重置密码 |
| ORA-28040 | 无匹配认证协议 | 客户端版本太老,升级客户端或修改sqlnet.ora |
这张表建议截图或存到备忘录里,排查问题先对着看,能省不少时间。
5. 安装部署后的调优与避坑经验
5.1 内存参数调整与Windows兼容性
Oracle 21C在Windows上默认的SGA和PGA大小是自动管理的,但自动不等于最优。开发机上如果同时跑着Docker、IDEA、浏览器,Oracle自动占用的内存可能偏大,导致机器卡顿。
实际工作中,我习惯手动限制内存:
sqlplus / as sysdba ALTER SYSTEM SET sga_max_size=1024M SCOPE=SPFILE; ALTER SYSTEM SET sga_target=1024M SCOPE=SPFILE; ALTER SYSTEM SET pga_aggregate_target=512M SCOPE=SPFILE;然后重启数据库:
sqlplus / as sysdba shutdown immediate; startup;这里要注意一个点:sga_max_size必须大于或等于sga_target,否则会报ORA-02097或ORA-00843。改动内存参数后,如果不重启数据库,参数不会完全生效,尤其在Windows平台上,修改SPFILE后必须重启实例。
另外,Windows上的Oracle进程和Linux不太一样,它是模拟进程的模式,每个后台进程都是一个本地线程。所以如果在任务管理器里看到一堆oracle.exe进程,不要奇怪,这不是出问题了,这是Oracle在Windows下的正常形态。
5.2 彻底解决PL/SQL Developer连接时的常见问题
PL/SQL Developer是Oracle开发者的常用工具,但很多人在连接21C时也碰到过ORA-12514。大部分情况是因为PL/SQL Developer读的不是Oracle 21C的tnsnames.ora,而是读到了旧版本客户端的配置文件。
解决办法有两种:
第一种,在PL/SQL Developer安装目录下的Preferences→Oracle → 连接里,指定“Oracle主目录”为21C的主目录,然后确认tnsnames.ora路径正确。
第二种,干脆绕过TNS别名,在PL/SQL Developer的登录界面上,Database一栏直接输入:
localhost:1521/orclpdb这种方式不经过tnsnames.ora解析,直接向监听器请求服务名,排查配置问题更快。
如果你同时装了多个Oracle客户端版本(这是很常见的场景),建议统一使用TNS_ADMIN环境变量指向同一个tnsnames.ora目录,避免每个工具各读各的配置,互相打架。这个变量配置好之后,PL/SQL Developer、SQL Developer、DBeaver都能读取到同一份连接配置。
5.3 系统服务自启动与异常恢复
Oracle在Windows上安装时,默认会把OracleService和OracleListener服务设置为“自动”启动。但实际使用中你会发现,开机后有时候数据库服务起来了,监听器却没起来,或者反过来,导致明明服务都显示“正在运行”,连接却报错。
排查这类问题,我习惯用一个固定套路:
net start OracleServiceORCL lsnrctl start sqlplus / as sysdba startup;如果OracleService服务已经启动,但实例没启动,需要以sysdba身份手工startup。这里注意,在Windows上,Oracle实例不会自动从SPFILE读取参数启动,因为实例还没创建,它需要先读取初始化参数文件。如果你改了SPFILE后重启失败,可以用:
startup pfile='D:\app\oracle\product\21c\dbhome_1\database\initORCL.ora'然后再想办法恢复SPFILE。
5.4 卸载与重装时的清理要点
遇到装一半失败、配置改坏、字符集选错等需要重装的情况,Windows上的Oracle卸载极其痛苦。直接在“控制面板→程序和功能”里卸载,往往卸载不干净,留给你的是一堆残留在注册表和服务列表里的内容。
如果你确定要卸载重装,按这个顺序操作:
- 停止所有Oracle相关服务:
net stop OracleServiceORCL、lsnrctl stop。 - 在“程序和功能”里卸载Oracle主产品。
- 删除磁盘上的Oracle目录和ORACLE_HOME目录。
- 清理注册表:
regedit,删除HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE(如果还残留)。 - 清理Windows服务注册:需要用命令行工具删除残留服务条目,否则服务列表里一堆灰掉的Oracle服务看着很碍眼。
注册表操作前建议先备份或导出注册表文件,改错了系统层面容易出大问题。我一般习惯在虚拟机里先试装一遍,确认配置方案没问题,再动真实环境,这样能大幅降低风险。
5.5 安装过程中常见的其他非ORA报错
除了ORA-12514,Windows上装21C还可能遇到下面这些幺蛾子:
无法启动此程序,因为计算机中丢失MSVCR120.dll:这是缺少Visual C++ 2013运行库,去微软官网下载安装即可。Oracle 21C的依赖项比较多,建议一次性把VC++ 2015-2022运行库全装齐,省得一个接一个地补。
安装程序卡在2%或者40%:多半是杀毒软件在后台扫描Oracle的文件。装数据库前建议临时退出360、Windows Defender实时保护这类软件,装完再恢复,别让杀毒软件干扰安装流程。
磁盘空间明明够,却提示空间不足:检查一下环境变量TEMP和TMP指向的盘符是否有空间。Oracle安装过程中的临时文件默认放在这个目录,如果TEMP在C盘而C盘快满了,就会报空间不足,即使D盘有大量空闲。
写在后面
这套流程走下来,Oracle 21C在Windows上从下载到配置环境变量、到定位ORA-12514,链路基本就完整了。我个人在实际操作中的体会是:Oracle在Windows上的安装难度本身不高,绝大多数问题都集中在“服务名不匹配”和“环境变量不对”这两个点上。把它们吃透,就解决了一大半的坑。
最后再分享一个小技巧:安装成功后,第一时间用lsnrctl status把当前的服务列表和监听状态截个图保存下来,这在后续排查问题时特别有用。另外,把连接PDB的完整命令记录在本地笔记里:
sqlplus scott/密码@localhost:1521/orclpdb以后无论换机器还是重建环境,照着这条命令验证,几分钟就能确认数据库是否可用。Oracle 21C的新特性确实不少,但没有一个能帮你绕开这些基础环节的坑,先把这些基础功做扎实,后面玩得才顺手。