1. 环境准备与系统配置
在CentOS 7上安装Oracle 11g数据库前,必须确保系统环境满足Oracle的安装要求。我通常会先检查系统版本和硬件配置,因为Oracle对这两者有明确的最低要求。
1.1 系统要求验证
首先确认系统版本是否符合要求:
bash复制cat /etc/redhat-release
对于Oracle 11g R2 (11.2.0.4),官方推荐的最小内存为1GB(实际生产环境建议至少4GB),交换空间大小通常设置为物理内存的1.5倍(当内存小于2GB时)或与物理内存相同(当内存大于2GB时)。可以使用以下命令检查:
bash复制free -h
磁盘空间方面,企业版安装需要至少4.5GB的空间,考虑到数据文件和日志文件,建议准备至少20GB的可用空间:
bash复制df -h
1.2 关闭SELinux和防火墙
Oracle安装过程中,SELinux可能会干扰某些操作,建议临时关闭或永久禁用。我通常选择永久禁用,因为生产环境中Oracle服务器通常会部署在受保护的内部网络。
永久禁用SELinux:
bash复制sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo setenforce 0
关闭防火墙也是必要的,因为初始安装阶段防火墙规则可能会阻止Oracle的网络通信:
bash复制sudo systemctl stop firewalld
sudo systemctl disable firewalld
注意:在生产环境中,安装完成后应根据需要重新配置防火墙规则,而不是保持防火墙关闭状态。
2. 安装依赖包与系统优化
2.1 安装必要依赖包
Oracle 11g需要一系列系统库和工具支持。以下是完整的依赖包安装命令:
bash复制sudo yum install -y gcc make binutils gcc-c++ compat-libstdc++-33 \
elfutils-libelf-devel elfutils-libelf-devel-static ksh libaio \
libaio-devel numactl-devel sysstat unixODBC unixODBC-devel \
pcre-devel glibc-devel libstdc++-devel
如果服务器无法连接外网,可以搭建本地yum源或下载这些包的RPM文件进行离线安装。我曾经遇到过没有外网的环境,提前下载了所有依赖包的解决方案:
- 在有网络的机器上使用
yumdownloader下载所有依赖包 - 将下载的rpm包拷贝到目标服务器
- 使用
rpm -ivh *.rpm命令安装
2.2 内核参数优化
Oracle数据库对Linux内核参数有特定要求。以下是经过多年实践验证的优化配置,编辑/etc/sysctl.conf文件:
bash复制# Oracle 11g recommended kernel parameters
kernel.shmall = 4294967296
kernel.shmmax = 17179869184
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
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
fs.file-max = 6815744
fs.aio-max-nr = 1048576
vm.swappiness = 10
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
应用修改:
bash复制sudo sysctl -p
这些参数中,有几个关键点需要注意:
kernel.shmmax:定义了单个共享内存段的最大尺寸,建议设置为物理内存的50%-80%kernel.sem:信号量设置,对Oracle实例的进程间通信很重要fs.file-max:系统最大文件句柄数,对于数据库服务器应该设置较大值
3. 用户与目录配置
3.1 创建Oracle用户和组
Oracle不建议使用root用户直接安装,而是应该创建专门的oracle用户和组:
bash复制sudo groupadd -g 200 oinstall
sudo groupadd -g 201 dba
sudo useradd -u 440 -g oinstall -G dba oracle
echo "oracle:yourpassword" | sudo chpasswd
这里有几个经验点:
- UID和GID使用较大的数字(如440、200等)避免与系统用户冲突
- 将oracle用户同时加入oinstall和dba组
- 密码复杂度应符合企业安全策略
3.2 创建Oracle目录结构
Oracle需要特定的目录结构来存放软件、数据文件和日志等。我通常采用以下结构:
bash复制sudo mkdir -p /data/oracle/product/11.2.0
sudo mkdir -p /data/oracle/oradata
sudo mkdir -p /data/oracle/inventory
sudo mkdir -p /data/oracle/fast_recovery_area
sudo chown -R oracle:oinstall /data/oracle
sudo chmod -R 775 /data/oracle
目录结构说明:
/data/oracle/product/11.2.0:Oracle软件安装目录/data/oracle/oradata:数据库数据文件存放位置/data/oracle/fast_recovery_area:快速恢复区,用于备份和归档日志/data/oracle/inventory:Oracle安装清单目录
提示:在生产环境中,建议将oradata和fast_recovery_area放在不同的物理磁盘上,以提高性能和可靠性。
4. 环境变量配置
切换到oracle用户配置环境变量:
bash复制su - oracle
vi ~/.bash_profile
添加以下内容:
bash复制# Oracle Settings
export ORACLE_BASE=/data/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
umask 022
使配置生效:
bash复制source ~/.bash_profile
环境变量说明:
ORACLE_BASE:Oracle基础目录ORACLE_HOME:Oracle软件安装目录ORACLE_SID:默认实例名,可根据需要修改NLS_LANG:设置字符集,确保与数据库字符集一致
5. 静默安装Oracle软件
5.1 准备安装文件和解压
将Oracle安装文件上传到服务器并解压:
bash复制mkdir -p /data/database
unzip p13390677_112040_Linux-x86-64_1of7.zip -d /data/database
unzip p13390677_112040_Linux-x86-64_2of7.zip -d /data/database
5.2 配置响应文件
复制响应文件模板并修改:
bash复制cp /data/database/response/* /home/oracle/response/
vi /home/oracle/response/db_install.rsp
关键参数配置示例:
bash复制oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=oracleserver
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/data/oracle/inventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/data/oracle/product/11.2.0
ORACLE_BASE=/data/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
DECLINE_SECURITY_UPDATES=true
5.3 执行静默安装
bash复制cd /data/database
./runInstaller -silent -responseFile /home/oracle/response/db_install.rsp -ignorePrereq
安装过程中可以查看日志文件了解进度:
bash复制tail -f /data/oracle/inventory/logs/installActions*.log
安装完成后,按照提示以root用户执行两个脚本:
bash复制sudo /data/oracle/inventory/orainstRoot.sh
sudo /data/oracle/product/11.2.0/root.sh
6. 配置监听和创建数据库
6.1 配置监听服务
使用netca工具静默配置监听:
bash复制netca /silent /responseFile /home/oracle/response/netca.rsp
检查监听状态:
bash复制lsnrctl status
6.2 创建数据库实例
准备数据库创建响应文件:
bash复制vi /home/oracle/response/dbca.rsp
示例内容:
bash复制[GENERAL]
RESPONSEFILE_VERSION = "11.2.0"
OPERATION_TYPE = "createDatabase"
[CREATEDATABASE]
GDBNAME = "orcl"
SID = "orcl"
TEMPLATENAME = "General_Purpose.dbc"
SYSPASSWORD = "Oracle123"
SYSTEMPASSWORD = "Oracle123"
SYSMANPASSWORD = "Oracle123"
DBSNMPPASSWORD = "Oracle123"
DATAFILEDESTINATION = /data/oracle/oradata
RECOVERYAREADESTINATION = /data/oracle/fast_recovery_area
CHARACTERSET = "AL32UTF8"
NATIONALCHARACTERSET= "AL16UTF16"
TOTALMEMORY = "2048"
执行数据库创建:
bash复制dbca -silent -responseFile /home/oracle/response/dbca.rsp
7. 安装后配置与验证
7.1 验证数据库状态
bash复制sqlplus / as sysdba
SQL> SELECT status FROM v$instance;
SQL> SELECT name, open_mode FROM v$database;
SQL> exit
7.2 配置自动启动
创建Oracle服务脚本:
bash复制sudo vi /etc/init.d/oracle
添加以下内容:
bash复制#!/bin/bash
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
ORA_HOME=/data/oracle/product/11.2.0
ORA_OWNER=oracle
case "$1" in
'start')
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME"
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
;;
'stop')
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
设置权限并配置开机启动:
bash复制sudo chmod 755 /etc/init.d/oracle
sudo chkconfig --add oracle
sudo chkconfig oracle on
8. 常见问题与解决方案
8.1 安装过程中的常见错误
-
依赖包缺失错误
- 现象:安装过程中提示缺少某些库文件
- 解决方案:使用yum安装缺失的依赖包,或下载对应的rpm包手动安装
-
内存不足错误
- 现象:安装时提示内存不足
- 解决方案:增加swap空间或物理内存
bash复制sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 sudo mkswap /swapfile sudo swapon /swapfile
-
权限问题
- 现象:安装过程中提示权限不足
- 解决方案:确保所有Oracle目录的所有者和组正确
bash复制sudo chown -R oracle:oinstall /data/oracle
8.2 数据库创建失败处理
如果数据库创建失败,可以检查以下日志文件:
/data/oracle/cfgtoollogs/dbca/orcl/trace.log/data/oracle/cfgtoollogs/dbca/orcl/alert.log
常见问题包括:
- 磁盘空间不足
- 内存参数设置不合理
- 响应文件配置错误
8.3 监听服务问题
如果无法连接到数据库,检查监听服务:
bash复制lsnrctl status
如果监听未启动:
bash复制lsnrctl start
检查监听配置文件:
bash复制vi $ORACLE_HOME/network/admin/listener.ora
9. 性能优化建议
9.1 内存配置优化
修改SGA和PGA大小:
sql复制ALTER SYSTEM SET sga_max_size=2G SCOPE=spfile;
ALTER SYSTEM SET sga_target=2G SCOPE=spfile;
ALTER SYSTEM SET pga_aggregate_target=1G SCOPE=spfile;
9.2 表空间管理
创建额外的表空间:
sql复制CREATE TABLESPACE users02
DATAFILE '/data/oracle/oradata/orcl/users02.dbf'
SIZE 500M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;
9.3 定期维护任务
设置自动统计信息收集:
sql复制BEGIN
DBMS_AUTO_TASK_ADMIN.ENABLE(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => NULL);
END;
/
10. 安全加固措施
10.1 密码策略
设置密码复杂度:
sql复制ALTER PROFILE DEFAULT LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LIFE_TIME 90
PASSWORD_REUSE_TIME 365
PASSWORD_REUSE_MAX 10
PASSWORD_LOCK_TIME 1
PASSWORD_GRACE_TIME 7;
10.2 审计配置
启用标准审计:
sql复制AUDIT CREATE SESSION;
AUDIT SELECT TABLE, UPDATE TABLE, INSERT TABLE, DELETE TABLE BY ACCESS;
10.3 网络加密
配置网络数据加密:
bash复制# 在sqlnet.ora中添加
SQLNET.ENCRYPTION_SERVER = required
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
SQLNET.CRYPTO_CHECKSUM_SERVER = required
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA1)
在实际操作中,我发现很多安装问题都源于环境准备不充分。特别是在内核参数和依赖包方面,一定要严格按照Oracle的要求进行配置。另外,静默安装虽然方便,但第一次使用时建议在有图形界面的测试环境中先走一遍图形安装流程,这样可以更直观地了解各个配置选项的含义。