1. 为什么还要写一份 Oracle 19c 的安装教程
Oracle 19c 是很多企业生产环境里跑得最稳的一版数据库,版本号 19.3.0.0,长期支持到 2027 年往上。虽然现在云数据库满天飞,但本地部署的需求一点没少——开发自测、内网隔离环境、老系统迁移、教学实验,都绕不开自己装一套。我前后在 Windows Server 和 CentOS 7.9 上装过不下二十次,踩过的坑从“先决条件检查失败”到“监听起不来”再到“EM Express 打不开”,基本能凑一本错题集。
这篇东西就是把这些年攒下来的实操经验一次性倒出来。Windows 和 Linux 两条线都覆盖,重点放在安装前的环境准备和安装后的验证上,因为这两块才是真正卡人的地方。中间那些“下一步下一步”的截图式步骤,网上到处都是,我就不重复了,只挑关键决策点和容易翻车的地方讲。
适合谁看?如果你是第一次装 Oracle 的开发者、运维,或者之前装过但总在某个环节卡住,这篇能帮你省下至少一个通宵。如果你已经是老手,也可以看看我在参数计算和排查思路上的整理,说不定有能直接抄的。
提示:Oracle 19c 的安装介质分 Windows 和 Linux 两个平台,下载时注意选对版本。Linux 下还要区分是单实例还是 RAC,这篇只讲单实例,RAC 的复杂度完全是另一个量级。
2. 安装前的整体思路与环境规划
2.1 先想清楚装在哪、给谁用
装 Oracle 之前,第一件事不是下载安装包,而是想清楚这套库的用途。用途决定了你选 Windows 还是 Linux,也决定了资源怎么分。
- 纯开发自测:Windows 最省事,图形化安装一路点下去,装完就能用 SQL Developer 连。缺点是 Windows 上 Oracle 的服务会吃掉不少内存,笔记本上跑建议至少 8GB 内存,最好 16GB。
- 模拟生产环境:必须上 Linux,CentOS 7.9 是主流选择,和大多数企业内网环境一致。好处是资源占用可控,坏处是安装过程全是命令行,对新手不太友好。
- 教学或实验:建议用虚拟机,VMware 或 VirtualBox 都行,装完可以随时快照回滚。虚拟机配置建议 4 核 CPU、8GB 内存、100GB 磁盘起步,磁盘类型选厚置备,别用精简置备,否则后期扩容麻烦。
我个人的习惯是:Windows 上装一套用于日常开发,Linux 虚拟机里装一套用于测试和演练。两套环境的安装介质是分开的,Windows 是.zip压缩包,Linux 是.zip也是压缩包,但里面的安装程序完全不同。
2.2 版本号里的门道
Oracle 19c 的版本号格式是19.x.x.x,比如19.3.0.0是基础版,后面还有19.25.0.0.241015这样的补丁版本。基础版安装介质在官网可以下载,补丁版本需要支持账号才能获取。
这里有个坑:基础版装完之后,很多新特性是没有的,比如某些安全补丁和性能优化。如果只是学习,基础版够用;如果是生产环境,一定要打补丁到最新。补丁的安装方式有两种:OPatch 和 datapatch,后面会细说。
注意:Oracle 官网下载需要登录账号,注册是免费的。下载页面里选“Database 19c”然后根据平台选对应的 zip 包。Linux 下还要额外下载“Oracle Database 19c Grid Infrastructure”吗?单实例不需要,只有 RAC 才需要 Grid。
2.3 资源规划的核心参数
不管哪个平台,下面这几个参数必须提前算好,否则装到一半报错再回头改,非常折腾。
| 参数 | Windows 建议值 | Linux 建议值 | 说明 |
|---|---|---|---|
| 内存 | 8GB 以上 | 4GB 以上 | Linux 下 SGA 和 PGA 加起来别超过物理内存的 80% |
| 交换分区 | 物理内存 1.5 倍 | 物理内存 1.5 倍 | Linux 下 swap 不够会导致先决条件检查失败 |
| 磁盘 | 60GB 以上 | 60GB 以上 | 实际安装完约 10GB,但归档日志和临时文件会涨 |
| /tmp 空间 | 不适用 | 至少 1GB | Linux 下 /tmp 太小会直接报错 |
| 内核参数 | 不适用 | shmmax 等 | 后面会给出具体计算方式 |
Linux 下的内核参数计算有个简单公式:shmmax至少设为物理内存的一半,shmall设为shmmax / 4096。比如 8GB 内存,shmmax = 4294967296,shmall = 1048576。这些参数写在/etc/sysctl.conf里,用sysctl -p生效。
3. Windows 环境下的完整安装流程
3.1 安装前的系统准备
Windows 上装 Oracle 19c,第一步是确认系统版本。官方支持 Windows 10、Windows Server 2016/2019,Windows 11 也能装但没在官方列表里,实测没问题。家庭版可以装,但有些企业级功能用不了,建议用专业版或服务器版。
接下来是几个必须做的准备工作:
- 关闭杀毒软件和防火墙:安装过程中会写注册表、创建服务,杀毒软件很容易误拦。装完再开。
- 设置虚拟内存:如果物理内存小于 16GB,建议把虚拟内存设到 16GB 以上,否则安装时可能报内存不足。
- 创建安装目录:不要装在
C:\Program Files下,路径里不要有空格和中文。我一般用C:\app\oracle。 - 以管理员身份运行安装程序:右键
setup.exe,选“以管理员身份运行”,否则创建服务会失败。
还有一个容易被忽略的点:Windows 的计算机名不要带下划线或特殊字符,纯字母数字最好。Oracle 的监听器配置对主机名很敏感,带特殊字符会导致监听起不来。
3.2 图形化安装的关键步骤
Windows 下的安装是图形界面,大部分步骤直接下一步就行,但有几个地方必须停下来想清楚。
第一步:配置选项。选“创建并配置单实例数据库”,不要选“仅安装数据库软件”。后者只装软件不建库,适合后续用 DBCA 单独建库的场景,但新手容易搞混。
第二步:系统类。选“桌面类”还是“服务器类”?桌面类会自动分配较小的内存参数,适合开发机;服务器类让你手动指定内存和字符集,适合生产。我一般选服务器类,因为可以自己控制 SGA 大小。
第三步:字符集。这是最容易埋雷的地方。默认是AL32UTF8,如果你要存中文,必须选这个。如果选了WE8ISO8859P1之类的,后面存中文会乱码,改起来非常麻烦。记住:字符集在创建数据库时确定,后期修改几乎等于重建。
第四步:口令。Oracle 12c 之后有个“口令复杂度”要求,如果设得太简单会报错。建议用大小写字母加数字加特殊符号的组合,比如Oracle_19c。如果不想被复杂度限制,可以在安装前设置环境变量oracle_install_ignore_prereqs,但不推荐。
第五步:先决条件检查。这一步会检查内存、磁盘、系统版本等。如果报错,不要急着点“忽略”,先看错误信息。常见的错误有:
- 内存不足:关掉一些程序,或者调大虚拟内存。
- 磁盘空间不足:清理磁盘,或者换安装路径。
- 操作系统版本不支持:Windows 11 会报这个,点“忽略”即可。
安装过程大约 20 到 40 分钟,取决于机器性能。装完后会自动创建数据库实例,默认实例名是orcl。
3.3 安装后的验证与配置
装完不代表能用,必须做几项验证。
验证监听器:打开命令提示符,输入lsnrctl status。如果看到LISTENER的状态是READY,说明监听正常。如果报TNS-12541,说明监听没起来,用lsnrctl start启动。
验证数据库实例:输入sqlplus / as sysdba,如果能进入 SQL 提示符,说明实例正常。再输入select status from v$instance;,返回OPEN就对了。
验证网络连接:用sqlplus system/Oracle_19c@localhost:1521/orcl连接,如果能连上,说明监听和实例都正常。
配置 EM Express:Oracle 19c 的网页版管理工具叫 EM Express,默认端口是 5500。用exec dbms_xdb_config.sethttpport(5500);设置端口,然后浏览器访问https://localhost:5500/em。注意是 HTTPS,不是 HTTP。
实操心得:Windows 下 Oracle 的服务默认是自动启动的,开机后要等一两分钟才能连。如果不想让它开机自启,可以把
OracleServiceORCL和OracleOraDB19Home1TNSListener改成手动启动,用的时候再开。
4. Linux 环境下的完整安装流程
4.1 CentOS 7.9 的系统准备
Linux 下装 Oracle 19c,我一般用 CentOS 7.9,因为它的内核版本和 Oracle 的兼容性最好。Ubuntu 也能装,但有些依赖包名字不一样,新手容易卡住。
第一步:安装依赖包。用 yum 装下面这些:
yum install -y binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel这些包缺一不可,尤其是compat-libstdc++-33,CentOS 7 默认没有,必须手动装。
第二步:创建用户和组。
groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracleoinstall是安装组,dba是数据库管理组。oracle用户必须属于这两个组,否则安装时会报权限错误。
第三步:创建目录并授权。
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1 mkdir -p /u01/app/oraInventory chown -R oracle:oinstall /u01 chmod -R 775 /u01目录结构建议按 OFA 标准来,/u01放软件,/u02放数据文件。如果只有一块盘,都放/u01也行。
第四步:修改内核参数。编辑/etc/sysctl.conf,加入:
fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 1048576 kernel.shmmax = 4294967296 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576然后sysctl -p生效。注意shmmax和shmall要根据实际内存调整,上面是 8GB 内存的配置。
第五步:修改用户限制。编辑/etc/security/limits.conf,加入:
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768这些限制不设的话,安装时可能报“无法创建进程”或“文件句柄不足”。
4.2 静默安装还是图形化安装
Linux 下有两种安装方式:图形化和静默。图形化需要 X11 转发,如果你在 Windows 上用 Xshell 或 MobaXterm 连 Linux,可以开 X11 转发,然后运行./runInstaller。静默安装则是用响应文件,全程命令行,适合脚本化部署。
我一般推荐先图形化装一遍,熟悉流程后再用静默。图形化安装的步骤和 Windows 类似,但有几个 Linux 特有的点:
- 先决条件检查:Linux 下检查更严格,
/tmp空间、swap 大小、内核参数都会查。如果报错,按提示改,改完点“再次检查”。 - 安装类型:选“仅安装数据库软件”,因为 Linux 下建库用 DBCA 更灵活。装完软件后再用
dbca建库。 - 操作系统组:
oinstall和dba要选对,否则后面权限有问题。
静默安装的响应文件在安装介质的response目录下,db_install.rsp是装软件的,dbca.rsp是建库的。改几个关键参数就行:
oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/app/oraInventory ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1 ORACLE_BASE=/u01/app/oracle oracle.install.db.InstallEdition=EE oracle.install.db.OSDBA_GROUP=dba oracle.install.db.OSOPER_GROUP=dba然后运行:
./runInstaller -silent -responseFile /path/to/db_install.rsp -ignorePrereq-ignorePrereq是忽略先决条件检查,不建议一开始就用,先让检查跑一遍,把该改的改掉。
4.3 用 DBCA 建库的关键参数
软件装完后,用dbca建库。图形化dbca和 Windows 下类似,静默模式用响应文件。
建库时几个关键参数:
- 数据库名:全局数据库名,比如
orcl。SID 和它保持一致。 - 字符集:必须选
AL32UTF8,和 Windows 下一样。 - 内存分配:选“典型”还是“自定义”?典型会自动分配,自定义可以手动设 SGA 和 PGA。我一般选自定义,SGA 设 2GB,PGA 设 1GB,8GB 内存的机器够用。
- 归档模式:生产环境必须开归档,开发环境可以不开。开归档后要设
db_recovery_file_dest_size,默认 4GB 可能不够。
建库过程大约 15 到 30 分钟。建完后,用sqlplus / as sysdba验证。
4.4 安装后的环境变量与开机自启
Linux 下装完 Oracle,必须配置环境变量,否则每次都要手动 source。
编辑oracle用户的.bash_profile,加入:
export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1 export ORACLE_SID=orcl export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export NLS_LANG=AMERICAN_AMERICA.AL32UTF8NLS_LANG很重要,设错了会导致中文乱码。AL32UTF8和数据库字符集保持一致。
开机自启用systemd或rc.local。CentOS 7 推荐用systemd,创建/etc/systemd/system/oracle.service,内容参考官方模板。简单点的话,在/etc/rc.d/rc.local里加:
su - oracle -c "lsnrctl start" su - oracle -c "dbstart"别忘了给rc.local加执行权限。
注意:
dbstart需要先修改oratab文件,把orcl:/u01/app/oracle/product/19.3.0/dbhome_1:N最后的N改成Y,否则dbstart不会启动实例。
5. 常见问题与排查技巧实录
5.1 先决条件检查失败的几种典型情况
先决条件检查是安装过程中最容易卡住的地方,Windows 和 Linux 都会遇到。下面整理了几种最常见的报错和解决方法。
| 报错信息 | 原因 | 解决方法 |
|---|---|---|
| 内存不足 | 物理内存或虚拟内存不够 | 关掉其他程序,调大虚拟内存或 swap |
| /tmp 空间不足 | Linux 下 /tmp 小于 1GB | 清理 /tmp 或重新挂载更大的空间 |
| 内核参数不满足 | shmmax 等参数太小 | 按公式重新计算并修改 sysctl.conf |
| 操作系统版本不支持 | Windows 11 或 CentOS 8 | 点“忽略”继续,或换支持的版本 |
| 缺少依赖包 | Linux 下缺 compat-libstdc++ | 用 yum 安装缺失的包 |
| 主机名解析失败 | /etc/hosts 没配 | 在 /etc/hosts 里加上主机名和 IP |
Linux 下还有一个隐蔽的坑:SELinux 没关。SELinux 会阻止 Oracle 写某些目录,导致安装失败。安装前先setenforce 0临时关闭,或者改/etc/selinux/config永久关闭。
5.2 监听器起不来的排查思路
监听器是 Oracle 网络连接的核心,起不来的原因很多,但排查思路是固定的。
第一步:看日志。监听器的日志在$ORACLE_HOME/network/log/listener.log,里面会写具体错误。
第二步:检查 listener.ora。文件在$ORACLE_HOME/network/admin下,确认HOST写的是主机名还是 IP。如果写主机名,/etc/hosts里必须有对应的解析。
第三步:检查端口占用。用netstat -tlnp | grep 1521看 1521 端口是不是被别的程序占了。如果被占,改listener.ora里的端口。
第四步:检查权限。监听器是以oracle用户运行的,如果$ORACLE_HOME的权限不对,会起不来。用chown -R oracle:oinstall $ORACLE_HOME修复。
Windows 下监听器起不来,常见原因是服务没启动。打开“服务”管理器,找到OracleOraDB19Home1TNSListener,手动启动。如果启动报错,看 Windows 事件查看器里的应用程序日志。
5.3 中文乱码的根因与解决
中文乱码是 Oracle 使用中最常见的问题之一,根因是客户端和服务器端的字符集不一致。
服务器端字符集在建库时确定,用select value from nls_database_parameters where parameter='NLS_CHARACTERSET';查看。如果是AL32UTF8,说明服务器端没问题。
客户端字符集由NLS_LANG环境变量控制。Windows 下在注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB19Home1里,Linux 下在.bash_profile里。必须设成AMERICAN_AMERICA.AL32UTF8,和服务器端一致。
如果已经出现乱码,先确认是存储乱码还是显示乱码。存储乱码是数据写进去的时候就错了,很难恢复;显示乱码是客户端字符集不对,改NLS_LANG就能解决。
实操心得:用 SQL Developer 或 Navicat 连接时,也要注意客户端的字符集设置。SQL Developer 在“工具-首选项-环境-编码”里设成 UTF-8,Navicat 在连接属性里设成 UTF-8。
5.4 补丁安装的注意事项
Oracle 19c 的基础版是 19.3.0.0,生产环境建议打补丁到最新。补丁安装分两步:OPatch 打软件补丁,datapatch 打数据库补丁。
OPatch 打补丁:
$ORACLE_HOME/OPatch/opatch apply /path/to/patch打之前先opatch lspatches看当前补丁列表,打完再opatch lspatches确认。
datapatch 打数据库补丁:
cd $ORACLE_HOME/OPatch ./datapatch -verbose这一步必须在数据库启动状态下运行,而且要先关掉所有应用连接。
补丁安装最容易出的问题是OPatch 版本太旧。Oracle 19c 基础版自带的 OPatch 可能不支持新补丁,需要先下载最新 OPatch 替换。替换前备份原来的 OPatch 目录。
6. 双环境对比与选型建议
6.1 Windows 和 Linux 的差异对比
装过两套环境后,我把主要差异整理成表,方便你根据场景选。
| 对比项 | Windows | Linux |
|---|---|---|
| 安装方式 | 图形化,简单 | 图形化或静默,稍复杂 |
| 资源占用 | 较高,服务多 | 较低,可控 |
| 稳定性 | 一般,适合开发 | 高,适合生产 |
| 字符集设置 | 注册表 | 环境变量 |
| 开机自启 | 服务自动 | 需配置 systemd 或 rc.local |
| 补丁安装 | 图形化或命令行 | 命令行 |
| 远程连接 | 需配置监听和防火墙 | 需配置监听和防火墙 |
| 学习成本 | 低 | 中 |
如果只是学习 SQL 和 PL/SQL,Windows 足够。如果要模拟生产、做性能测试、学 RAC,必须上 Linux。
6.2 虚拟机安装的额外注意事项
很多人用 VMware 装 Linux 虚拟机来跑 Oracle,这里有几个坑要避开。
磁盘类型:选厚置备,不要选精简置备。精简置备的磁盘会随着使用逐渐膨胀,但 Oracle 的数据文件是预分配的,精简置备会导致性能下降。
内存分配:虚拟机内存不要超过物理内存的 70%,否则宿主机和虚拟机都会卡。8GB 物理内存的机器,虚拟机最多给 4GB。
网络模式:选 NAT 或桥接。NAT 模式下虚拟机可以上网,但宿主机访问虚拟机需要端口转发。桥接模式下虚拟机和宿主机在同一网段,访问方便。
快照:装 Oracle 之前先打一个快照,装完再打一个。这样装坏了可以快速回滚,不用重装系统。
共享文件夹:如果要在宿主机和虚拟机之间传安装包,用共享文件夹比 SCP 方便。但注意共享文件夹的权限,oracle用户可能读不了。
6.3 安装介质下载与校验
Oracle 19c 的安装介质在官网下载,Linux 下是LINUX.X64_193000_db_home.zip,Windows 下是WINDOWS.X64_193000_db_home.zip。下载后一定要校验 MD5 或 SHA256,否则安装到一半报“介质损坏”很麻烦。
Linux 下用sha256sum校验,Windows 下用certutil -hashfile校验。官网会提供校验值,对比一下就行。
提示:下载页面里有个“See All”按钮,点开才能看到所有平台的下载链接。别只下第一个,那个可能是 Exadata 版本。
7. 装完之后还能做点什么
装完 Oracle 19c 只是开始,后面还有一堆可以折腾的。比如配置 RMAN 备份、开归档模式、调优 SGA、建表空间和用户、配 Data Guard。这些内容每一个都能单独写一篇,这里就不展开了。
我个人在实际操作中的体会是:安装本身不难,难的是环境准备和问题排查。把先决条件检查当回事,把日志看仔细,大部分问题都能自己解决。另外,装之前一定要打快照或备份,装坏了重来的成本太高。
最后再分享一个小技巧:如果你在 Linux 下用静默安装,可以把响应文件里的密码用oracle_install_ignore_prereqs跳过复杂度检查,但生产环境千万别这么干。开发环境图省事可以,生产环境必须用强密码。