装 Oracle 是每个 DBA 的第一课,但也是劝退率最高的一课。图形界面装看着简单,实际生产环境很多需要用静默安装(Silent Install)。这篇把我踩过的坑全整理出来,照着做一遍过。
一、环境准备(最容易出问题的阶段)
1.1 系统要求
以 CentOS 7 / OEL 7 为例(生产环境主流选择):

1.2 内核参数(直接复制)
cat >> /etc/sysctl.conf <<'EOF'fs.aio-max-nr = 1048576fs.file-max = 6815744kernel.shmall = 2097152kernel.shmmax = 4294967295kernel.shmmni = 4096kernel.sem = 250 32000 100 128net.ipv4.ip_local_port_range = 9000 65500net.core.rmem_default = 262144net.core.rmem_max = 4194304net.core.wmem_default = 262144net.core.wmem_max = 1048576EOFsysctl -p坑 1:kernel.shmmax 必须大于 SGA 大小,否则实例启动报 ORA-27102。建议直接设成物理内存的 80%。
1.3 用户和组
groupadd -g 54321 oinstallgroupadd -g 54322 dbagroupadd -g 54323 operuseradd -u 54321 -g oinstall -G dba,oper oracleecho"oracle:YourPassword" | chpasswd1.4 目录规划
mkdir -p /u01/app/oracle/product/19c/dbhome_1mkdir -p /u01/app/oraInventorychown -R oracle:oinstall /u01chmod -R 775 /u01坑 2:目录路径不要有空格或中文。听起来是废话,但真有人在路径里加空格。
1.5 依赖包(一把装完)
yum install -y oracle-database-preinstall-19c如果不是 OEL 系统,手动装:
yum install -y bc binutils compat-libcap1 compat-libstdc++-33 \ elfutils-libelf elfutils-libelf-devel fontconfig-devel \ glibc glibc-devel ksh libaio libaio-devel libX11 libXau \ libXi libXtst libXrender libXrender-devel libgcc libstdc++ \ libstdc++-devel libxcb make net-tools nfs-utils python \ python-configshell python-rtslib python-six smartmontools \ sysstat targetcli unixODBC坑 3:缺 libaio-devel 会导致安装时报 ins-35954 错误,提示 prerequisite check 失败。很多教程漏了这个包。

二、静默安装
2.1 解压安装包
# 以 oracle 用户操作su - oraclecd /u01/app/oracle/product/19c/dbhome_1unzip -oq /path/to/LINUX.X64_193000_db_home.zip坑 4:19c 开始,安装包直接解压到 ORACLE_HOME 目录,不再像 11g/12c 那样解压后再 runInstaller 到别的目录。
2.2 准备响应文件
cat > /home/oracle/db_install.rsp <<'EOF'oracle.install.option=INSTALL_DB_SWONLYUNIX_GROUP_NAME=oinstallINVENTORY_LOCATION=/u01/app/oraInventoryORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1ORACLE_BASE=/u01/app/oracleoracle.install.db.InstallEdition=EEoracle.install.db.OSDBA_GROUP=dbaoracle.install.db.OSOPER_GROUP=operoracle.install.db.OSBACKUPDBA_GROUP=dbaoracle.install.db.OSDGDBA_GROUP=dbaoracle.install.db.OSKMDBA_GROUP=dbaoracle.install.db.OSRACDBA_GROUP=dbaoracle.install.db.rootconfig.executeRootScript=falseEOF2.3 执行安装
cd /u01/app/oracle/product/19c/dbhome_1./runInstaller -silent -responseFile /home/oracle/db_install.rsp \ -waitforcompletion -ignorePrereqFailure安装完成后用 root 执行:
/u01/app/oraInventory/orainstRoot.sh/u01/app/oracle/product/19c/dbhome_1/root.sh坑 5:-ignorePrereqFailure 不是万能药。如果是内存不足或 swap 不够,即使跳过检查,后面建库一样会出问题。这个参数只用来跳过非致命的警告。

三、静默建库(DBCA)
3.1 建库命令
dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbName orcl \ -sid orcl \ -characterSet AL32UTF8 \ -nationalCharacterSet AL16UTF16 \ -createAsContainerDatabase true \ -numberOfPDBs 1 \ -pdbName pdb1 \ -pdbAdminPassword YourPdbPwd123 \ -sysPassword YourSysPwd123 \ -systemPassword YourSystemPwd123 \ -memoryPercentage 40 \ -databaseType MULTIPURPOSE \ -automaticMemoryManagement false \ -totalMemory 4096 \ -storageType FS \ -datafileDestination /u01/app/oracle/oradata \ -redoLogFileSize 200 \ -emConfiguration NONE \ -ignorePreReqs坑 6:字符集选错是灾难级的。生产环境统一用 AL32UTF8,不要用 ZHS16GBK。后期改字符集需要重建库,成本极高。
坑 7:-automaticMemoryManagement false 是故意的。AMM 在大内存环境下和 HugePages 冲突。生产环境建议用 ASMM(SGA_TARGET + PGA_AGGREGATE_TARGET),不用 AMM。

3.2 验证安装
sqlplus / as sysdbaSQL> SELECT instance_name, statusFROM v$instance;SQL> SELECTname, open_mode FROM v$pdbs;SQL> SELECT banner_full FROM v$version;四、环境变量配置
cat >> /home/oracle/.bash_profile <<'EOF'# Oracle Environmentexport ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=$ORACLE_BASE/product/19c/dbhome_1export ORACLE_SID=orclexport PATH=$ORACLE_HOME/bin:$PATHexport LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATHexport NLS_LANG=AMERICAN_AMERICA.AL32UTF8export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"EOFsource /home/oracle/.bash_profile坑 8:NLS_LANG 的字符集部分要和数据库字符集一致。不一致会导致中文乱码,而且你可能很久才发现。
五、监听配置
netca -silent -responseFile $ORACLE_HOME/assistants/netca/netca.rsp或者手动配置:
cat > $ORACLE_HOME/network/admin/listener.ora <<'EOF'LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) ) )SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1) (SID_NAME = orcl) ) )EOFlsnrctl startlsnrctl status六、安装后检查清单


写在最后
Oracle 安装不难,难的是不踩坑。这篇文章覆盖了我和同事们这些年遇到的主要问题,新手照着做基本能一次成功。
完整的安装实操过程(包括 RAC 集群安装、ASM 磁盘组配置、Grid Infrastructure 部署等进阶场景),我整理在了 DBA 学习之路 的 Day 01-10 模块中,全程截图 + 踩坑记录。
👉 ora100.com
夜雨聆风