机房里的服务器大多数时候是没有桌面环境的,尤其是那种放在机柜深处、只留一个管理网口的机器,你能拿到的就是一个黑底白字的终端窗口。很多刚接手环境的同行第一反应是找图形界面,装个 VNC 或者 X Server 转发,然后调出 Oracle 的图形化安装向导点下一步。这条路在测试机上走得通,但在生产环境里往往行不通,要么是网络策略不允许开这些端口,要么是远程转发卡到让人想把键盘摔了。所以命令行静默安装 Oracle 实例,是绕不过去的一项基本功。
这篇内容讲的就是在 Linux 服务器上,全程用命令行把 Oracle 数据库软件装上、把实例建起来、把监听拉起来的完整过程。核心关键词是Linux、Oracle、实例、命令行、安装。我会把内核参数怎么算、response 文件每一项为什么这么填、dbca 静默建库的参数怎么写、装完之后怎么验证、以及监听起不来这类高频故障怎么排查,一条一条说清楚。适合有一定 Linux 基础、需要独立交付一套 Oracle 环境的运维和 DBA,也适合刚入行想把这套流程吃透的朋友。下面所有操作我都尽量给出可直接复制的命令和参数,你照着做,能少走不少弯路。
1. 安装前想清楚的三件事:为什么走命令行,选什么版本,怎么规划目录
1.1 图形化安装 vs 静默安装,到底差在哪
图形化安装的优势是直观,向导会一步步提示你下一步该干什么,适合第一次接触、对参数不熟悉的人。但它有几个硬伤:需要有可用的图形环境,依赖 X11 转发或者本地桌面,网络抖动一下向导就可能卡死;批量部署时无法脚本化,装第二台机器还得重新点一遍;响应文件里的参数在向导里藏得深,装完你也不清楚系统到底做了哪些改动。
静默安装的核心是把所有交互项提前写进一个响应文件(response file),然后用-silent参数执行安装程序。它的好处很实在:可以重复执行,参数可版本化管理,出了问题能对照日志逐项排查。代价是你必须清楚每个参数的含义,填错了程序不会像向导那样弹个提示框提醒你,而是直接报一个编码,让你自己去查。
我的做法是:第一台机器用图形化装一遍,把生成的响应文件拷贝出来作为模板,之后所有机器都走静默。这样既降低了首次理解成本,又保留了批量部署的效率。
1.2 版本怎么选,别一上来就追新
版本选择要看你的业务系统兼容性清单,而不是看哪个新。Oracle 11g 虽然年代久远,但大量存量系统仍然跑在上面,它的安装包体积小、对系统资源要求低,是练习整套流程的好选择。19c 是长期支持版本,容器化、多租户特性成熟,新项目基本会选它。两者的静默安装流程大同小异,差异主要在 dbca 的部分参数和部分目录结构上。
这里给一个实际的选型参考表:
| 版本 | 适用场景 | 安装包大小 | 内存起步建议 | 需要注意 |
|---|---|---|---|---|
| 11g R2 | 存量老系统、学习环境 | 约 2GB | 2GB | 官方支持周期已结束,生产需谨慎 |
| 12c R2 | 过渡期项目 | 约 3GB | 4GB | 多租户默认开启 |
| 19c | 新项目主力 | 约 3.5GB | 4GB | 安装前检查项更严格 |
注意:无论选哪个版本,都要确认服务器 CPU 架构和安装包架构一致。x86_64 的包装到 ARM 机器上会直接报错退出,这个坑我在项目交接时见过不止一次。
1.3 目录规划:别让 /u01 塞满根分区
Oracle 对目录结构有约定俗成的规范,推荐按 OFA(Optimal Flexible Architecture)来规划。简单说就是把软件和数据分开放在不同挂载点,避免日志暴涨把数据文件所在分区撑满。
典型规划如下:
/u01/app/oracle/product/19.3.0/dbhome_1放数据库软件,也就是 ORACLE_HOME/u01/app/oracle/oradata放数据文件/u01/app/oracle/fast_recovery_area放归档日志和备份/u01/app/oraInventory放安装清单,这个目录很重要,后续打补丁依赖它/u01/app/oracle/admin/orcl放参数文件、审计日志、告警日志
如果条件允许,把 oradata 单独挂一块盘,再不济也要保证 /u01 至少预留 50GB 以上。软件本身占十几个 G,数据文件初始也要几个 G,加上归档和临时文件,空间留窄了后期扩容很麻烦。
2. 系统环境准备:内核参数怎么算,依赖包一个都不能少
2.1 硬件与操作系统基础检查
开工前先确认几个硬指标。内存方面,19c 最小 2GB,实际跑起来加上 PDB 建议 4GB 以上;swap 空间在内存小于 8GB 时建议给到内存的 1.5 到 2 倍,内存大于 8GB 时给到 8GB 或内存的一半就够用。磁盘方面除了安装目录,/tmp目录至少要留 1GB,因为安装程序会往里面解压临时文件,/tmp满了会在安装中途报错。
操作系统层面,先用命令确认版本和架构:
cat /etc/os-release uname -r uname -muname -m输出x86_64才说明架构匹配。同时确认主机名解析正常,/etc/hosts里要有本机 IP 和主机名的对应关系,这一条直接关系到后面监听能不能起来。
hostname cat /etc/hosts如果hostname返回的名字在/etc/hosts里找不到对应项,监听器启动时会报 TNS-12545,非常隐蔽。这个问题的排查我们放到后面章节细说。
2.2 内核参数调整:shmmax 和 shmall 的计算逻辑
Oracle 依赖共享内存,内核参数没调好,实例连启动都启动不了。核心的几个参数是kernel.shmmax、kernel.shmall、kernel.shmmni、kernel.sem。
shmmax表示单个共享内存段的最大字节数。经验值取物理内存的一半,但不能超过操作系统能识别的上限。假设你的服务器是 16GB 内存,那么:
- 物理内存 16GB = 16 × 1024 × 1024 × 1024 = 17179869184 字节
- 一半就是 8589934592 字节
- 写入配置时略微放大一点,取 8589934592 即可
shmall表示系统范围内可用的共享内存总页数,单位是页而不是字节。Linux 默认页大小 4KB,所以:
- shmall = shmmax / 页大小 = 8589934592 / 4096 = 2097152
很多教程直接让你填 2097152 或 4194304,那是按 16GB 或 32GB 内存的常见值给的。如果你不确定自己的内存规模,用getconf PAGE_SIZE查页大小,用free -b查内存字节数,自己算一遍最稳妥。
把这些参数写进/etc/sysctl.conf:
kernel.shmmax = 8589934592 kernel.shmall = 2097152 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 6815744 fs.aio-max-nr = 1048576 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让配置生效,然后用sysctl kernel.shmmax之类的命令回读确认。
kernel.sem四个数字依次是:每个信号集的最大信号数、系统范围内最大信号集数、每次 semop 调用的最大操作数、系统范围内最大信号数。这组值是 Oracle 官方文档给的标准值,直接照抄就行,不用自己推。
2.3 用户组、资源限制与依赖包
Oracle 不允许用 root 直接安装和运行,必须单独建用户和用户组。标准做法是三个组:oinstall负责软件安装,dba负责数据库管理,oper是可选的操作员组。
groupadd -g 54321 oinstall groupadd -g 54322 dba groupadd -g 54323 oper useradd -u 54321 -g oinstall -G dba,oper oracle passwd oracle建完用户后修改/etc/security/limits.conf,放开 oracle 用户的进程数和文件句柄限制:
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768nofile 这一项尤其关键。数据库运行时打开的文件描述符数量远超普通进程,限制给低了会在高并发时出现ORA-27300系列错误,而且这种问题往往在压测阶段才暴露,排查起来很费时间。
依赖包方面,以 Oracle Linux 或 CentOS 为例,装以下这些:
yum install -y binutils gcc gcc-c++ glibc glibc-devel ksh \ libaio libaio-devel libgcc libstdc++ libstdc++-devel \ make sysstat unixODBC unixODBC-devel libXi libXtstlibaio是异步 IO 库,Oracle 的数据文件读写依赖它,缺了会在安装时直接卡在检查项。compat-libcap1和compat-libstdc++-33在 11g 上是必装的,19c 上可以酌情。
最后别忘了关掉防火墙和 SELinux,或者放行相关端口。测试环境直接关:
systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config注意:生产环境不建议直接关防火墙,正确的做法是放行 1521 监听端口和 EM Express 端口。但 SELinux 如果策略配置不到位,确实会干扰 Oracle 安装,建议在生产上先设为 permissive 模式观察,确认无影响后再决定。
3. 静默安装 Oracle 软件:响应文件逐项拆解与执行
3.1 准备安装介质与解压
把下载好的安装包传到服务器上,一般是个 zip 压缩包。这里提一个常见问题:Linux 解压 Oracle 安装包时如果出现文件名乱码,多半是 zip 编码问题。用unzip -O GBK或者直接换用7z x解压可以缓解,最简单的方式是确保安装包本身没有中文文件名。
mkdir -p /u01/software chown -R oracle:oinstall /u01 su - oracle cd /u01/software unzip LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.3.0/dbhome_119c 之后软件包可以直接解压到 ORACLE_HOME 目录,然后在该目录里运行 runInstaller。11g 则是解压到任意临时目录,运行后再选择安装路径。这一点差异要留意。
解压完确认 ORACLE_HOME 目录权限是 oracle 用户可读写,否则安装程序会报 INS-32025 之类的权限错误。
3.2 响应文件关键参数逐条说明
静默安装靠的就是响应文件。19c 的示例文件在$ORACLE_HOME/install/response/db_install.rsp,拷贝一份出来改。以下是我实际在用的核心配置,逐条解释:
oracle.install.option=INSTALL_DB_SWONLY这个选项表示只装数据库软件,不建库。装软件和建库分两步走,好处是软件装完可以先做检查,建库参数改起来也灵活。如果你想一步到位,用INSTALL_DB_AND_CONFIG,但我更推荐分开。
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_HOME 一定要和你实际解压的路径完全一致,差一个字符都会报错。
SELECTED_LANGUAGES=en,zh_CN选择安装的语言,加上 zh_CN 可以支持中文错误提示,排查问题时有帮助。
oracle.install.db.InstallEdition=EEEE 是企业版,SE 是标准版,SE2 是标准版 2。按你的授权来选,选错了软件功能会有差异。
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这些是各个管理角色的对应操作系统组。单实例环境下后面几个都填 dba 即可。
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false DECLINE_SECURITY_UPDATES=true这两个必须配对使用,否则安装程序会卡在安全更新确认这一步,静默模式下没法交互就会一直挂起。
3.3 执行安装并盯住日志
改完响应文件,切换到 oracle 用户执行:
cd $ORACLE_HOME ./runInstaller -silent -responseFile /home/oracle/db_install.rsp \ -ignorePrereq -waitforcompletion-ignorePrereq是跳过前置条件检查,有些环境的检查项误报,加上这个参数能避免安装被误拦。但如果你不确定检查项是不是误报,先不加这个参数跑一次,看它到底抱怨什么,确认无关紧要再忽略。
-waitforcompletion让命令在前台等待,而不是丢到后台,这样你能实时看到进度,脚本化时也方便判断退出码。
安装过程中最该盯的日志是$ORACLE_HOME/cfgtoollogs/下的日志,以及/u01/app/oraInventory/logs/下的 installActions 日志。安装报错时,错误编码只是表象,日志里往前翻几行往往能看到真正的原因。
安装到 90% 左右会提示你用 root 执行两个脚本:
/u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/19.3.0/dbhome_1/root.sh这两个脚本必须以 root 身份在另一个终端执行,执行完回到安装窗口按回车继续。忘记执行或者执行顺序颠倒,都会导致安装失败。
实操心得:
root.sh执行时会尝试配置一些系统级设置,如果中途报错,别慌,先看它改到哪一步了。常见的是/usr/bin/oraenv文件写入失败,多半是权限或者磁盘满的问题。
4. 创建数据库实例:dbca 静默建库全流程
4.1 环境变量配置与实例命名
软件装完,切换到 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 export NLS_LANG=AMERICAN_AMERICA.AL32UTF8ORACLE_SID就是实例名,这里用 orcl,你可以按项目规范改。注意 SID 长度不要超过 8 个字符,虽然新版本放宽了限制,但老工具链上短 SID 兼容性更好。
配置完执行source ~/.bash_profile,然后echo $ORACLE_HOME确认变量生效。这一步看似简单,但环境变量没生效就执行 dbca,会报找不到命令或者找不到 ORACLE_HOME,白白浪费时间。
4.2 dbca 静默建库参数详解
建库用 dbca 的静默模式,核心命令如下:
dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbName orcl \ -sid orcl \ -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -sysPassword YourSysPwd \ -systemPassword YourSystemPwd \ -createAsContainerDatabase true \ -numberOfPDBs 1 \ -pdbName pdb1 \ -pdbAdminPassword YourPdbPwd \ -databaseType OLTP \ -memoryMgmtType auto_sga \ -totalMemory 2048 \ -storageType FS \ -datafileDestination /u01/app/oracle/oradata \ -redoLogFileSize 200 \ -emConfiguration NONE \ -sampleSchema false逐项说明重点:
-characterSet AL32UTF8是字符集,现在新库基本都选 UTF8 系列。一旦建库完成,字符集改起来非常麻烦,选之前务必和业务方确认。老系统如果数据是 ZHS16GBK 的,迁移时字符集不匹配会出大问题。
-createAsContainerDatabase true表示建多租户容器库,这是 12c 之后的新特性。19c 上建库默认就是 CDB 加一个 PDB。如果你的应用是老的、不支持多租户,把它设为 false 建传统库会更省事。
-memoryMgmtType auto_sga表示自动管理 SGA,配-totalMemory一起用。-totalMemory 2048单位是 MB,会给实例分配 2GB 内存。这个值要根据服务器实际内存来定,一般给物理内存的 40% 到 60%。给多了会和操作系统抢内存,给少了数据库性能上不去。
-storageType FS表示用文件系统存储,不用 ASM。ASM 虽然性能和管理上有优势,但配置复杂,单实例测试和中小项目用文件系统足够。
-emConfiguration NONE是不配置 EM Express,省掉一个端口和一堆配置。需要的话可以改成DBEXPRESS,指定端口。
注意:dbca 执行时如果报
ORACLE_SID相关的错误,先确认环境变量里的 SID 和命令里的-sid一致。这两个不一致是新手最常见的错误之一。
4.3 监听配置与网络服务名
实例建好后,得配监听才能让外部连进来。用 netca 静默配置:
netca -silent -responseFile /home/oracle/netca.rsp更简单的办法是直接启动监听器,让它用默认配置:
lsnrctl start lsnrctl statuslsnrctl status会列出监听器正在服务的实例,如果里面能看到你的实例名和状态 READY,说明监听和实例已经打通了。
如果需要手工管理监听配置,listener.ora一般在$ORACLE_HOME/network/admin/下。一个基本的配置:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname)(PORT = 1521)) ) )把实例动态注册到监听上,最简单的方式是在数据库参数里设置local_listener,或者直接依赖 PMON 进程的自动注册。自动注册需要监听端口是 1521 默认端口,改了端口就得配local_listener。
配完监听,客户端连接还需要一份tnsnames.ora,主要是服务名解析:
ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )注意这里用的是SERVICE_NAME而不是SID。用 SID 连接的方式在新版本里兼容性越来越差,推荐统一用服务名。
5. 装完之后的验证与实例调优
5.1 连通性验证清单
安装完成后不要急着交付,按下面的清单逐项验证:
# 1. 监听状态 lsnrctl status # 2. 环境变量 echo $ORACLE_HOME $ORACLE_SID # 3. 本地登录 sqlplus / as sysdba # 4. 实例状态 SQL> select instance_name, status from v$instance; # 5. 数据库打开状态 SQL> select name, open_mode from v$database; # 6. 表空间 SQL> select tablespace_name, status from dba_tablespaces; # 7. 监听服务注册 SQL> show parameter service_names; # 8. 远程连接测试 sqlplus sys/password@orcl as sysdbav$instance的 STATUS 应该是 OPEN,v$database的 OPEN_MODE 应该是 READ WRITE。如果是 MOUNTED 状态,说明数据库没完全打开,用alter database open;处理。
远程连接测试这一步很关键。很多情况下本地用sqlplus / as sysdba能进,但远程连不上,问题就出在监听或者网络服务名配置上。这一条验证通过,才算真正交付。
5.2 内存参数和表空间的后期调整
实例刚建好,内存参数是初始值,实际运行一段时间后可能需要调。SGA 和 PGA 的分配是个动态平衡。
SQL> show parameter sga_target; SQL> show parameter pga_aggregate_target; SQL> show parameter memory_target;19c 默认用sga_target和pga_aggregate_target分开管理,或者用memory_target自动管理。自动管理省心,但监控粒度粗;手动管理可控,但需要根据 workload 调整。
调整示例:
SQL> alter system set sga_target=2G scope=both; SQL> alter system set pga_aggregate_target=1G scope=both;scope=both表示内存和 spfile 同时改,重启后依然生效。如果只改内存用scope=memory,只改 spfile 用scope=spfile。
表空间方面,刚建库时 SYSTEM、SYSAUX、UNDOTBS1、TEMP、USERS 是默认的几个。业务表空间需要另外建,记得设成自动扩展,但要设上限,否则磁盘撑满是很常见的事故。
SQL> create tablespace app_data datafile '/u01/app/oracle/oradata/orcl/app_data01.dbf' size 1G autoextend on next 100M maxsize 10G;maxsize一定要设,我见过把数据文件设成无限扩展,最后把整个分区撑爆、数据库挂掉的案例。教训就是给磁盘留有余量,自动扩展要有天花板。
6. 常见问题速查与踩坑记录
6.1 安装阶段的典型报错
安装阶段报错,核心思路是先看错误编码,再去翻日志找根因,别对着编码硬猜。
| 报错编码 | 含义 | 常见原因 | 处理办法 |
|---|---|---|---|
| INS-32025 | 安装目录权限问题 | ORACLE_HOME 属主不是 oracle | chown -R oracle:oinstall |
| INS-13001 | 环境不满足最低要求 | 依赖包缺失、内存不足 | 对照检查项逐条补 |
| INS-08101 | 不支持的平台 | 架构不匹配 | 换匹配的安装包 |
| ORA-27102 | 内存不足 | shmmax/shmall 配小了 | 重新计算并调整 |
| ORA-00845 | MEMORY_TARGET 不支持 | /dev/shm 空间不足 | remount 扩大 /dev/shm |
ORA-00845这个错误值得单独说。它出现的原因是/dev/shm挂载点空间小于 memory_target 设定值。处理方式:
mount -o remount,size=4G /dev/shm要永久生效就改/etc/fstab里对应的行。这个问题在容器和虚拟机上尤其常见,因为默认的 /dev/shm 往往只有内存的一半甚至更小。
6.2 监听服务起不来的排查思路
“oracle 监听服务无法启动”是个高频问题,原因五花八门。我按照排查优先级整理一下:
第一,确认环境变量。echo $ORACLE_HOME和echo $ORACLE_SID输出是否正常。监听器启动时要读 ORACLE_HOME 下的配置,变量不对就找不到。
第二,检查主机名解析。hostname返回的名字,在/etc/hosts里有没有对应到本机 IP。没有的话监听器起不来,报 TNS-12545。
第三,看 1521 端口有没有被占用:
netstat -tlnp | grep 1521 lsof -i:1521如果被别的进程占了,改监听端口或者干掉占用进程。
第四,检查 listener.ora 文件有没有语法错误。括号不配对是最常见的,数一下左右括号数量。
第五,看监听日志:
tail -100 $ORACLE_HOME/network/log/listener.log日志里通常会写明真正的原因,比如地址已被使用、无法绑定端口之类。
如果监听能启动但状态里看不到实例,那就是实例没有注册上来。检查local_listener参数,或者等几分钟让 PMON 自动注册,再不行就alter system register;手动触发。
实操心得:我遇到过监听起来又莫名自己挂掉的情况,最后查到是服务器上有个定时任务在清理 /tmp 下的过期文件,误删了监听器的临时 socket。这类问题日志里看不出来,得结合系统层面的操作一起查。装完系统层面有过变更的,都要多留个心眼。
6.3 建库和连接阶段的问题
dbca 建库失败时,日志在$ORACLE_BASE/cfgtoollogs/dbca/下,按实例名找了看。常见问题有这么几个:
建库超时。dbca 建库是资源密集型操作,内存给得太少会跑很久甚至卡死。-totalMemory至少给 2GB,内存紧张就先关掉 EM 配置。
实例建好但连不上。先本地sqlplus / as sysdba试,能进说明实例没问题,问题在网络层。检查监听是否注册了服务、防火墙是否放行、客户端 tnsnames.ora 是否配错。
忘记 sys 密码。用sqlplus / as sysdba进去改:
SQL> alter user sys identified by newpassword;字符集转换报错。老数据导入新库时字符集不匹配,要么在导出时就转换,要么新建一个匹配字符集的库。这个没有省事的办法,字符集的事必须一开始就想清楚。
关于中文乱码,如果客户端显示乱码,检查客户端的 NLS_LANG 设置。一般设成AMERICAN_AMERICA.AL32UTF8,和服务端字符集一致就不会乱。设成 ZHS16GBK 和服务端 UTF8 不一致时,做字符串比较和排序都会出问题。
6.4 一份装完后的自查清单
交付前把下面这张表过一遍,能省掉后面很多返工:
| 检查项 | 命令 | 期望结果 |
|---|---|---|
| 实例状态 | select status from v$instance | OPEN |
| 数据库模式 | select open_mode from v$database | READ WRITE |
| 监听状态 | lsnrctl status | 服务里含实例名且 READY |
| 归档模式 | archive log list | 按需开启 |
| 字符集 | select value from nls_database_parameters where parameter='NLS_CHARACTERSET' | AL32UTF8 |
| 表空间自动扩展 | select autoextensible from dba_data_files | 按需,且有上限 |
| 备份策略 | 检查 rman 配置 | 已配置 |
| 开机自启 | 检查 oratab 文件 | 实例项为 Y |
oratab文件在/etc/oratab,里面实例行的最后一个字段改成 Y,配合 dbstart/dbshut 脚本才能实现开机自启。默认是 N,很多人装完忘了改,结果服务器重启后数据库没起来,业务侧直接报警。
6.5 一些让我少加班的经验
第一,装环境前把该备份的配置先备份。/etc/sysctl.conf、/etc/security/limits.conf、/etc/hosts这几个文件改动前都留个副本,出问题能快速回退。
第二,所有操作记录下来。我习惯在服务器上开个install_notes.md,每执行一条关键命令就记一句。第二次装机或者别人接手时,这份记录比任何文档都管用。
第三,时间同步别忽略。Oracle 对时间敏感,集群环境下时间不同步直接导致节点被踢,单实例虽然没那么严格,但审计日志时间错乱也很麻烦。装完顺手把 NTP 或者 chrony 配上。
第四,静默安装的响应文件版本化管理。把改好的 rsp 文件放到版本控制里,下次装机直接拉取,比在服务器上临时改可靠得多。
第五,测试环境先跑通全流程再上生产。尤其字符集、实例名、端口这几个一旦定下来就很难改的参数,测试环境验证到位,生产上就少一次回炉重装。
这套流程我在不同规模的项目上反复用过,命令和参数基本稳定。真正吃时间的地方往往不是安装本身,而是前面环境检查和后面故障排查。把内核参数算清楚、响应文件填仔细、监听配好、自查清单过一遍,整个流程顺利的话两个小时能完成。至于后续的备份、监控、性能调优,那是另一套话题,先把实例稳稳当当跑起来,其他都好说。