1. 为什么还要写 Oracle 19c 的安装教程
Oracle 19c 是 Oracle 数据库 12c 之后的一个长期支持版本,官方版本号写作 19.3.0.0,后续通过 RU 补丁可以打到 19.25 这样的版本。很多企业的核心业务系统、ERP、报表平台至今仍跑在 19c 上,原因很直接:它是 19c 系列里被官方标注为 Long Term Support 的版本,稳定、生态成熟、踩坑资料多。你如果正在做数据迁移、搭建测试环境、准备 OCP 考试,或者单纯想在自己机器上跑一套完整的 Oracle 环境,19c 基本是绕不开的一站。
这篇内容我打算把 Windows 和 Linux 两个环境的完整安装流程都讲一遍。Windows 适合本地开发、单机测试、教学演示,图形化安装向导对新手友好;Linux(我以 CentOS 7.9 为例)适合模拟生产环境,因为绝大多数企业的 Oracle 都部署在 Linux 服务器上。两套流程我都会给出可复现的步骤、参数计算过程,以及我自己踩过的坑。
适合谁看:有基本计算机操作能力、想入门 Oracle 的开发者;需要快速搭一套测试库的运维;准备数据库相关认证的考生。不需要你事先精通 Linux,但至少要会用 cd、ls 这类基础命令。全文会涉及 CentOS 7.9 下载、VMware 虚拟机安装、Linux 常用命令、内核参数配置、监听配置等内容,我会尽量把每一步的“为什么”讲清楚,而不是让你照着敲完还不知道在干嘛。
2. 安装前的整体规划与方案选型
2.1 两个环境到底该怎么选
很多人一上来就问“我该装 Windows 还是 Linux”,其实这取决于你的目的。如果你只是想学 SQL、练 PL/SQL、跑个小 demo,Windows 版装完就能用,省去大量系统配置。如果你要模拟生产、学 RMAN 备份、学 Data Guard、学 ASM,那必须上 Linux,因为 Windows 上很多高级特性要么不支持,要么和生产的差异太大。
我的建议是:新手先用 Windows 把数据库跑起来,熟悉 SQL*Plus、监听、实例这些概念;等有感觉了,再在 VMware 里装一台 CentOS 7.9,走一遍 Linux 安装。这样学习曲线是平滑的,不会一上来就被内核参数、依赖包、权限问题劝退。
2.2 硬件与系统的最低要求
Oracle 19c 对资源的要求不算低,尤其是 Linux 环境。下面这张表是我实测下来比较稳妥的配置,低于这个值安装过程会各种报错。
| 项目 | Windows 环境 | Linux 环境(CentOS 7.9) |
|---|---|---|
| CPU | 双核 2.0GHz 以上 | 双核 2.0GHz 以上 |
| 内存 | 最低 4GB,建议 8GB | 最低 4GB,建议 8GB |
| 磁盘 | 40GB 以上空闲 | 40GB 以上空闲,建议单独挂载 /u01 |
| 交换分区 | 系统自动管理 | 内存 8GB 时建议 8GB swap |
| 系统版本 | Windows 10/11 64 位 | CentOS 7.9 64 位 |
这里有个细节:Linux 下 Oracle 官方推荐 swap 大小和内存挂钩。内存 1-2GB 时 swap 取内存的 1.5 倍;2-16GB 时 swap 等于内存大小;超过 16GB 时 swap 取 16GB 即可。我一般直接给 8GB swap,省心。
2.3 安装介质与依赖准备
你需要提前下载好这些东西,别装到一半才发现缺文件:
- Oracle Database 19c 安装包。Windows 是
WINDOWS.X64_193000_db_home.zip,Linux 是LINUX.X64_193000_db_home.zip。注意 19c 的 Linux 版是 zip 格式,不是早年那种两个 zip 解压合并的套路了。 - CentOS 7.9 镜像,用于 VMware 虚拟机安装。
- VMware Workstation(或同类虚拟化软件),用于跑 Linux 虚拟机。
- Xshell 或同类终端工具,方便远程连 Linux。
- 一个趁手的文本编辑器,改配置文件用。
提示:Oracle 官网下载需要登录账号,安装包体积在 2.5GB 到 3GB 之间,提前下好,别等到装的时候现下。
3. Windows 环境完整安装实操
3.1 解压与启动安装向导
Windows 版的安装相对直白。把WINDOWS.X64_193000_db_home.zip解压到一个路径不含中文和空格的目录,比如D:\oracle19c\db_home。这一点非常重要,Oracle 的安装程序对中文路径和空格极其敏感,路径里带个空格都可能导致后面建库失败。
解压完成后进入目录,双击setup.exe。如果系统弹 UAC 提示,选“是”。安装向导启动后,第一步会让你选配置类型,通常选“创建并配置单实例数据库”,这样装完直接有一个可用的库,省事。
3.2 系统类与安装用户的选择
向导里会让你选“桌面类”还是“服务器类”。桌面类会自动帮你把内存、字符集这些参数配好,适合本地学习;服务器类给你完全的控制权,适合模拟生产。我一般选服务器类,因为能自己指定 SID、字符集、内存分配,学到的更多。
接下来是安装用户。Windows 下有两种:用当前 Windows 用户,或者新建一个专用的 Oracle 用户。生产环境肯定用专用用户,但本地测试用当前用户也没问题,省去权限配置的麻烦。如果你选专用用户,记得这个用户要有“作为服务登录”的权限,否则后面实例起不来。
3.3 全局数据库名与 SID 的设定
这一步是核心。全局数据库名(Global Database Name)和 SID 的关系要搞清楚:SID 是实例名,全局数据库名通常是SID.域名的形式。比如 SID 叫orcl,域名用默认的,全局库名就是orcl。如果你要建多个库,SID 不能重复。
字符集我强烈建议选AL32UTF8。虽然有些老系统还在用ZHS16GBK,但新项目一律 UTF8,避免以后中文乱码、迁移麻烦。选字符集的时候向导里有个“使用 Unicode”的选项,勾上就是 AL32UTF8。
内存分配这块,向导会根据你的物理内存给个推荐值。8GB 内存的机器,SGA 给 2GB 左右、PGA 给 1GB 左右比较合适。别把内存全给数据库,操作系统自己也要用。
3.4 监听与口令设置
监听配置保持默认即可,端口 1521,监听名 LISTENER。口令这里有个坑:Oracle 12c 之后,口令里如果包含特殊字符,在某些客户端连接时会出问题。我一般用大小写字母加数字的组合,长度 8 位以上,既满足复杂度要求又不容易出幺蛾子。
安装向导最后会给你一个摘要页,把前面所有配置列出来。一定要仔细核对,尤其是路径、SID、字符集这三项,一旦点“安装”就没法回头改了。确认无误后点安装,剩下的就是等,Windows 下大概 20 到 40 分钟,取决于机器性能。
3.5 安装后验证与常见收尾
装完之后,用 SQL*Plus 验证一下。打开命令提示符,执行:
sqlplus / as sysdba如果能进到SQL>提示符,说明实例正常。再执行:
select instance_name, status from v$instance;看到OPEN状态就成功了。如果报ORA-12560: TNS:protocol adapter error,多半是监听没起来,去服务里看OracleOraDB19Home1TNSListener这个服务是不是在运行。
Windows 下还有个常见问题:装完之后系统变慢。这是因为 Oracle 的服务默认是自动启动的,占了不少内存。如果你只是偶尔用,可以把服务改成手动启动,用的时候再开。
4. Linux 环境(CentOS 7.9)完整安装实操
4.1 虚拟机创建与系统安装
先在 VMware 里新建虚拟机,选 CentOS 7.9 的 ISO 镜像。内存给 8GB,磁盘给 60GB,网络模式选 NAT 或桥接都行。安装 CentOS 的时候,软件选择里勾“GNOME 桌面”或者“最小安装”都可以,我习惯最小安装,然后按需装包,系统更干净。
分区这块,我建议手动分:/boot给 1GB,swap给 8GB,/给 20GB,剩下的全部给/u01。为什么单独给/u01?因为 Oracle 的软件和数据库文件默认都放这儿,单独挂载方便以后扩容,也符合生产规范。
系统装完后,先做几件基础事:改主机名、配静态 IP、关防火墙和 SELinux。这几步不做,后面监听和远程连接会各种不通。
hostnamectl set-hostname oracle19c systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config注意:生产环境不要直接关防火墙,要按需放行 1521 端口。这里关掉只是为了实验环境省事。
4.2 依赖包安装与内核参数配置
Oracle 在 Linux 上跑,需要一堆依赖包。用 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装完依赖,改内核参数。编辑/etc/sysctl.conf,加上这些:
fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 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这里重点说kernel.shmmax。它决定单个共享内存段的最大值,一般设成物理内存的一半或更大。8GB 内存的机器,设成 4294967296(4GB)是安全的。kernel.shmall是共享内存总页数,用 shmmax 除以页大小(通常 4096 字节)得到,4GB/4096=1048576,但官方推荐值给的是 2097152,留了余量。
改完执行sysctl -p生效。然后改/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 327684.3 创建用户组与 Oracle 用户
Oracle 安装需要几个用户组:oinstall(安装组)、dba(数据库管理组)、oper(操作组)。创建命令:
groupadd oinstall groupadd dba groupadd oper useradd -g oinstall -G dba,oper oracle passwd oracle给 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目录结构这块,dbhome_1是 Oracle 主目录(ORACLE_HOME),oraInventory是清单目录。这两个路径后面配置环境变量要用到,别搞混。
4.4 配置 oracle 用户环境变量
切换到 oracle 用户,编辑~/.bash_profile,加上:
export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/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这个变量很关键,它决定客户端显示的语言和字符集。设成AMERICAN_AMERICA.AL32UTF8能避免很多中文乱码问题。改完执行source ~/.bash_profile生效。
4.5 解压安装包并静默安装
把LINUX.X64_193000_db_home.zip上传到/u01/app/oracle/product/19.3.0/dbhome_1目录下,用 oracle 用户解压:
cd $ORACLE_HOME unzip LINUX.X64_193000_db_home.zip解压完,目录里会多出一个runInstaller。Linux 下可以用图形界面装,也可以用静默模式。图形界面需要配 X11 转发,比较麻烦,我一般用静默安装,写一个响应文件。
先准备响应文件db_install.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=oper oracle.install.db.OSBACKUPDBA_GROUP=dba oracle.install.db.OSDGDBA_GROUP=dba oracle.install.db.OSKMDBA_GROUP=dba oracle.install.db.OSRACDBA_GROUP=dba然后执行:
./runInstaller -silent -responseFile /home/oracle/db_install.rsp -ignorePrereq-ignorePrereq是忽略预检查,实验环境可以用,生产环境不建议。安装过程大概 15 到 30 分钟。装到 80% 左右会提示你用 root 执行两个脚本:
/u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/19.3.0/dbhome_1/root.sh开另一个终端,用 root 执行完,回到安装终端按回车继续。
4.6 建库与监听配置
软件装完后,用dbca建库。静默建库命令:
dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbName orcl -sid orcl \ -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -sysPassword YourPassword \ -systemPassword YourPassword \ -createAsContainerDatabase false \ -totalMemory 2048 \ -emConfiguration NONE这里-createAsContainerDatabase false表示建的是传统非 CDB 库,适合大多数传统应用。如果你要玩多租户,改成 true。-totalMemory 2048是给实例分配 2GB 内存。
建库完成后配监听。用netca静默配置:
netca -silent -responseFile /home/oracle/netca.rsp然后启动监听:
lsnrctl start验证一下:
lsnrctl status sqlplus / as sysdba能进 SQL*Plus 并看到实例 OPEN,Linux 环境就算装好了。
5. 常见问题与排查技巧实录
5.1 安装阶段高频报错速查
下面这张表是我这些年装 Oracle 遇到最多的报错,整理出来方便你对照排查。
| 报错信息 | 常见原因 | 解决方法 |
|---|---|---|
| ORA-12560 | 监听未启动或实例未起 | 检查 lsnrctl status,启动监听和实例 |
| ORA-01034 | 实例未启动 | sqlplus / as sysdba 后 startup |
| ORA-27102 | 共享内存不足 | 调大 kernel.shmmax 和 shmall |
| ORA-00845 | /dev/shm 太小 | 挂载时加大 tmpfs 或调小 memory_target |
| INS-08109 | 响应文件参数错误 | 检查 rsp 文件路径和参数拼写 |
| 依赖包缺失 | 未装 compat-libstdc++ 等 | 用 yum 补齐依赖 |
5.2 几个容易被忽略的坑
第一个坑是/dev/shm。CentOS 7 默认/dev/shm是内存的一半,如果你给数据库分配的内存超过这个值,启动实例时会报 ORA-00845。解决办法是在/etc/fstab里加一行tmpfs /dev/shm tmpfs defaults,size=4G 0 0,然后重新挂载。
第二个坑是主机名解析。Oracle 安装时会解析主机名,如果/etc/hosts里没配好,安装会卡住或者监听起不来。确保/etc/hosts里有127.0.0.1 主机名这一行。
第三个坑是文件句柄数。oracle 用户的 nofile 如果没设够,建库到一半会报“too many open files”。前面 limits.conf 里设的 65536 就是干这个用的,改完要重新登录 oracle 用户才生效。
5.3 安装后的性能与维护建议
装完只是开始。我一般会做几件事:把归档模式打开(生产必须),配一个定时备份脚本,把memory_target或sga_target根据实际负载调优。测试环境可以偷懒,但生产环境这些一步都不能少。
还有个小技巧:Oracle 19c 的 RU 补丁建议打上。19.3.0.0 是基础版,打到 19.25 这样的版本能修掉不少已知问题。打补丁用opatch,流程是先解压补丁包,停实例和监听,执行opatch apply,再起监听和实例,最后跑datapatch。这个过程比装库还容易出错,建议先在测试环境练手。
6. 双环境安装的经验总结与延伸
Windows 和 Linux 两套装下来,我的体会是:Windows 胜在快和省事,适合快速验证想法;Linux 胜在贴近生产,学到的技能直接能用在工作里。如果你时间有限,我建议先花两小时把 Windows 版跑通,建立信心,再花半天啃 Linux 版。
Linux 安装里最耗时的不是敲命令,而是排查环境问题。依赖包、内核参数、权限、主机名解析,任何一项没配好都会卡住。我的做法是写一个初始化脚本,把系统配置部分全部自动化,下次装新机器直接跑脚本,省去重复劳动。
最后分享一个实用技巧:装完之后用sqlplus连一下,执行select * from v$version;确认版本号。如果显示的是 19.3.0.0.0,说明基础版装对了;如果后面还有补丁号,说明 RU 也打上了。这个命令比看安装日志快得多,是我每次装完必做的第一件事。