在开始安装Oracle数据库之前,我们需要对服务器环境进行全面检查,确保满足安装要求。作为一名DBA,我建议在每次安装前都执行这些检查,避免后续出现兼容性问题。
首先检查物理内存和交换空间:
bash复制free -m
这个命令会显示内存使用情况。Oracle 23c建议至少4GB内存,生产环境推荐16GB以上。我曾经在一个内存不足的服务器上安装Oracle,结果安装过程异常缓慢,还经常报错。
接下来检查操作系统版本:
bash复制cat /etc/redhat-release
Oracle 23c支持RHEL 7.x和8.x系列。我在RHEL 9上尝试安装时遇到了兼容性问题,不得不降级系统。
共享内存检查也很重要:
bash复制df -h /dev/shm/
Oracle会使用共享内存进行进程间通信,建议至少配置1GB以上。
检查各分区空间:
bash复制df -TH
df -h /tmp/
df -h /u01
Oracle安装需要约15GB空间,其中:
我曾经在一个/tmp空间不足的服务器上安装,导致安装程序无法解压临时文件而失败。
bash复制uname -m
cat /proc/version
确保是x86_64架构,Oracle 23c不再支持32位系统。
bash复制hostname
echo "192.168.1.1 aiserver" >> /etc/hosts
主机名解析必须正确,否则安装后会出现连接问题。我遇到过因为/etc/hosts配置错误导致监听器无法启动的情况。
bash复制systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
生产环境中不建议直接关闭防火墙,而是应该配置适当的规则。但在安装阶段可以先临时关闭以避免干扰。
注意:这些安全设置修改后需要重启服务器才能完全生效。我曾经因为忘记重启导致SELinux仍然阻止了Oracle的某些操作。
首先检查是否已有Oracle相关配置:
bash复制grep oinstall /etc/group
grep dba /etc/group
grep oper /etc/group
创建必要的用户组和Oracle用户:
bash复制groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
useradd -u 54321 -g oinstall -G dba,oper oracle
passwd oracle
用户ID和组ID最好按照规范设置(如50000-60000范围),避免与系统用户冲突。我曾经遇到过因为UID设置过小导致权限问题。
bash复制mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01/
chmod -R 775 /u01/app/oracle
/u01是Oracle推荐的安装路径,但你可以根据实际情况调整。关键是要确保oracle用户有完整的读写权限。
备份并修改sysctl.conf:
bash复制cp /etc/sysctl.conf /etc/sysctl.conf.bak
cat >> /etc/sysctl.conf << EOF
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 751619276
kernel.shmmax = 3006477107
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
EOF
sysctl -p
这些参数对Oracle性能至关重要:
我曾经因为shmmax设置过小导致Oracle无法启动。
编辑limits.conf:
bash复制cat >> /etc/security/limits.conf << EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
EOF
同时修改/etc/pam.d/login:
bash复制echo "session required pam_limits.so" >> /etc/pam.d/login
这些限制确保Oracle进程有足够的系统资源。nofile限制尤其重要,因为每个Oracle连接都会消耗文件描述符。
切换到oracle用户,编辑.bash_profile:
bash复制export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/23.26.1/dbhome_1
export ORACLE_SID=prod
export PATH=$ORACLE_HOME/bin:$PATH:$HOME/bin
然后执行:
bash复制source ~/.bash_profile
环境变量必须正确设置,否则很多Oracle工具无法正常工作。ORACLE_SID尤其重要,它决定了你连接哪个实例。
bash复制mount /dev/cdrom /mnt
cat > /etc/yum.repos.d/my.repo << EOF
[localREPO]
name=localhost8
baseurl=file:///mnt/BaseOS
gpgcheck=0
enabled=1
[localREPO_APP]
name=localhost8_app
baseurl=file:///mnt/AppStream
gpgcheck=0
enabled=1
EOF
bash复制yum install bc binutils compat-openssl10 elfutils-libelf \
fontconfig glibc glibc-devel ksh libaio libXrender \
libX11 libXau libXi libXtst libgcc libstdc++ \
libxcb libibverbs libasan liblsan librdmacm \
make policycoreutils policycoreutils-python-utils \
smartmontools sysstat -y
依赖包缺失是安装失败的常见原因。建议在安装前先检查这些包是否都已安装。我曾经因为缺少libaio导致数据库无法启动。
bash复制mkdir -p $ORACLE_HOME
unzip LINUX.X64_2326100_db_home.zip -d $ORACLE_HOME
确保解压路径正确,且oracle用户有足够的权限。解压失败通常是权限或空间不足导致的。
编辑响应文件:
bash复制cp $ORACLE_HOME/install/response/db_install.rsp /tmp
vi /tmp/db_install.rsp
关键参数设置:
code复制oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
ORACLE_HOME=/u01/app/oracle/product/23.26.1/dbhome_1
InstallEdition=EE
OSDBA_GROUP=dba
OSOPER_GROUP=oper
bash复制cd $ORACLE_HOME
./runInstaller -silent -responseFile /tmp/db_install.rsp -ignorePrereq
安装完成后,以root身份执行:
bash复制/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/23.26.1/dbhome_1/root.sh
静默安装不会显示图形界面,可以通过查看日志文件跟踪进度:
bash复制tail -f /u01/app/oraInventory/logs/installActions*.log
我曾经因为没加-ignorePrereq参数导致安装失败,其实系统已经满足要求,只是检查脚本有问题。
bash复制netca -silent -responseFile $ORACLE_HOME/assistants/netca/netca.rsp
监听器配置完成后检查状态:
bash复制lsnrctl status
编辑dbca响应文件:
bash复制cp $ORACLE_HOME/assistants/dbca/dbca.rsp /tmp
vi /tmp/dbca.rsp
关键参数:
code复制gdbName=prod
sid=prod
createAsContainerDatabase=true
numberOfPDBs=2
templateName=General_Purpose.dbc
totalMemory=1500
datafileDestination=/u01/app/oracle/oradata
characterSet=AL32UTF8
执行数据库创建:
bash复制dbca -silent -createDatabase -responseFile /tmp/dbca.rsp
这个过程可能需要30分钟到几小时,取决于系统性能。可以通过查看alert日志监控进度:
bash复制tail -f $ORACLE_BASE/diag/rdbms/prod/trace/alert_prod.log
重要提示:templateName必须指定正确的模板文件,我曾经因为模板路径错误导致建库失败。createAsContainerDatabase=true表示创建CDB容器数据库,这是Oracle 12c后的新特性。
sql复制sqlplus / as sysdba
SELECT name, open_mode FROM v$database;
SELECT name, open_mode FROM v$pdbs;
监听器无法启动:
数据库无法mount:
ORA-01078: 处理系统参数失败:
调整SGA和PGA大小:
sql复制ALTER SYSTEM SET sga_target=4G SCOPE=spfile;
ALTER SYSTEM SET pga_aggregate_target=1G SCOPE=spfile;
开启自动内存管理:
sql复制ALTER SYSTEM SET memory_target=6G SCOPE=spfile;
配置归档模式(生产环境建议):
sql复制SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
定期备份策略:
监控空间使用:
sql复制SELECT tablespace_name, round(SUM(bytes)/1024/1024) "Size MB"
FROM dba_data_files
GROUP BY tablespace_name;
性能监控:
sql复制SELECT * FROM v$sysmetric WHERE metric_name IN ('CPU Usage Per Sec', 'Database CPU Time Ratio');
定期收集统计信息:
sql复制EXEC DBMS_STATS.GATHER_DATABASE_STATS(estimate_percent=>30);
通过这套完整的安装流程,你应该已经成功部署了Oracle 23c数据库。实际生产环境中,还需要考虑高可用性、灾备等更多因素。如果在安装过程中遇到任何问题,建议首先检查各种日志文件,它们通常能提供详细的错误信息。