**装 Oracle 是每个 DBA 的第一课,但也是劝退率最高的一课。**图形界面装看着简单,实际生产环境很多需要用静默安装(Silent Install)。这篇把我踩过的坑全整理出来,照着做一遍过。
一、环境准备(最容易出问题的阶段)
1.1 系统要求
以 CentOS 7 / OEL 7 为例(生产环境主流选择):
| 项目 | 最低要求 | 建议值 |
|---|---|---|
| 内存 | 2 GB | ≥ 8 GB |
| swap | 与内存等大 | 内存的 1~1.5 倍 |
| /tmp | 1 GB | ≥ 2 GB |
| 磁盘 | 12 GB(软件)+ 数据 | SSD,数据盘单独挂载 |
1.2 内核参数(直接复制)
cat >> /etc/sysctl.conf <<'EOF'
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
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
EOF
sysctl -p
坑 1:kernel.shmmax 必须大于 SGA 大小,否则实例启动报 ORA-27102。建议直接设成物理内存的 80%。
1.3 用户和组
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
useradd -u 54321 -g oinstall -G dba,oper oracle
echo "oracle:YourPassword" | chpasswd
1.4 目录规划
mkdir -p /u01/app/oracle/product/19c/dbhome_1
mkdir -p /u01/app/oraInventory
chown -R oracle:oinstall /u01
chmod -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 - oracle
cd /u01/app/oracle/product/19c/dbhome_1
unzip -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_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/19c/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
oracle.install.db.rootconfig.executeRootScript=false
EOF
2.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 sysdba
SQL> SELECT instance_name, status FROM v$instance;
SQL> SELECT name, open_mode FROM v$pdbs;
SQL> SELECT banner_full FROM v$version;
四、环境变量配置
cat >> /home/oracle/.bash_profile <<'EOF'
# Oracle Environment
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19c/dbhome_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
EOF
source /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)
)
)
EOF
lsnrctl start
lsnrctl status
六、安装后检查清单
| 检查项 | 命令 | 预期结果 |
|---|---|---|
| 实例状态 | SELECT status FROM v$instance; |
OPEN |
| PDB 状态 | SELECT open_mode FROM v$pdbs; |
READ WRITE |
| 监听器 | lsnrctl status |
Service “orcl” has 1 instance(s) |
| alert log | tail -50 $ORACLE_BASE/diag/... |
无 ORA- 错误 |
| 自动启动 | 检查 /etc/oratab |
orcl:/u01/...:Y |
写在最后
Oracle 安装不难,难的是不踩坑。这篇文章覆盖了我和同事们这些年遇到的主要问题,新手照着做基本能一次成功。
完整的安装实操过程(包括 RAC 集群安装、ASM 磁盘组配置、Grid Infrastructure 部署等进阶场景),我整理在了 DBA 学习之路 的 Day 01-10 模块中,全程截图 + 踩坑记录。
👉 ora100.com




