1. Oracle 11g单机安装环境准备
作为一名从业十多年的DBA,我深知Oracle数据库安装前的准备工作有多重要。在Linux 7系统上安装Oracle 11g(11.2.0.4版本)时,环境配置的完整性直接决定了后续安装的成败。下面我将分享在实际工作中总结的环境准备要点。
1.1 系统基础配置
首先需要确保系统环境符合Oracle 11g的安装要求。我通常会从以下几个方面入手:
-
操作系统选择:Oracle 11g官方支持RHEL/CentOS 6.x,但在7.x版本上也能稳定运行。建议使用最小化安装模式,减少不必要的软件包冲突。
-
防火墙和SELinux设置:
bash复制# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭SELinux(两种方式任选其一)
# 方式一:直接修改配置文件
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# 方式二:创建新的配置文件
cat > /etc/sysconfig/selinux <<EOF
SELINUX=disabled
SELINUXTYPE=targeted
EOF
注意:修改SELinux配置后需要重启系统才能生效。在生产环境中,如果必须开启SELinux,则需要额外配置策略规则,这对新手来说比较复杂,建议测试环境先关闭。
1.2 配置本地YUM源
由于Oracle安装需要大量依赖包,配置本地YUM源可以显著提高安装效率:
bash复制# 挂载ISO镜像
mkdir -p /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
# 备份原有repo文件
mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
# 创建本地repo文件
cat > /etc/yum.repos.d/dvd.repo <<EOF
[RHEL]
name=RHEL7
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1
EOF
# 更新YUM缓存
yum clean all
yum makecache
1.3 安装必备工具包
安装一些常用工具可以方便后续操作:
bash复制yum install -y tree net-tools lrzsz wget unzip vim
这些工具在排错和文件传输时非常有用。比如lrzsz可以方便地在本地和服务器之间传输文件,net-tools提供了ifconfig等网络诊断工具。
2. Oracle安装依赖处理
2.1 安装基础依赖包
Oracle 11g需要一系列基础库文件支持,以下是必须安装的依赖包:
bash复制yum install -y binutils-devel compat-libstdc++-33 elfutils-libelf \
glibc glibc-common libaio libaio-devel libgcc libstdc++ libstdc++-devel \
make unixODBC unixODBC-devel gcc gcc-c++ glibc-devel kernel-headers
特别需要注意的是,在RHEL/CentOS 7上需要单独安装compat-libstdc++-33包。这个包在默认仓库中没有,需要手动下载:
bash复制wget http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
2.2 图形界面依赖(可选)
如果使用图形界面安装,还需要安装X Window相关包:
bash复制yum install -y xorg-x11-apps xorg-x11-utils
实际经验:在生产环境中,我更推荐使用静默安装模式,通过响应文件实现无人值守安装。图形界面安装容易受到网络波动影响,且需要配置X11转发,增加了复杂度。
3. 系统参数优化配置
3.1 内核参数调整
Oracle数据库对系统内核参数有特定要求,需要修改/etc/sysctl.conf文件:
bash复制cat >> /etc/sysctl.conf <<EOF
kernel.shmall = 4294967296
kernel.shmmax = 68719476736
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
EOF
# 使配置生效
sysctl -p
参数说明:
shmmax:定义单个共享内存段的最大尺寸,建议设置为物理内存的50-75%shmall:系统范围内共享内存页总数,计算公式:shmall = 总内存(GB)*1024*1024/4file-max:系统最大文件句柄数,对于高并发数据库很重要
3.2 用户资源限制
为oracle用户设置合理的资源限制,修改/etc/security/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
oracle soft stack 10240
EOF
同时需要在/etc/pam.d/login中添加:
bash复制echo "session required pam_limits.so" >> /etc/pam.d/login
4. Oracle用户与环境配置
4.1 创建Oracle用户和组
bash复制groupadd -g 2000 oinstall
groupadd -g 2001 dba
useradd -g oinstall -G dba -u 2001 oracle
echo "oracle" | passwd --stdin oracle
经验分享:在生产环境中,我习惯使用非标准用户名(如
oradb)来增加安全性。同时建议所有节点的用户UID/GID保持一致,这在RAC环境中尤为重要。
4.2 目录结构规划
bash复制mkdir -p /u01/app/oracle
mkdir -p /u01/soft
mkdir -p /u01/psu
mkdir -p /oradata
chown -R oracle:oinstall /u01
chown -R oracle:oinstall /oradata
目录用途说明:
/u01/app/oracle:Oracle软件安装目录/u01/soft:存放安装介质/u01/psu:存放补丁文件/oradata:数据库文件存储位置
4.3 环境变量配置
切换到oracle用户,编辑~/.bash_profile:
bash复制su - oracle
cat >> ~/.bash_profile <<EOF
export TMP=/tmp
export TMPDIR=\$TMP
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
EOF
source ~/.bash_profile
环境变量说明:
ORACLE_HOME必须指向正确的安装路径ORACLE_SID是实例名,后续创建数据库时会用到NLS_LANG设置字符集,中文环境推荐使用ZHS16GBK
5. Oracle软件安装
5.1 准备安装介质
将Oracle安装包上传到/u01/soft目录,并验证完整性:
bash复制cd /u01/soft
md5sum p13390677_112040_Linux-x86-64_1of7.zip
md5sum p13390677_112040_Linux-x86-64_2of7.zip
正确校验值:
- 1of7.zip: 1616f61789891a56eafd40de79f58f28
- 2of7.zip: 67ba1e68a4f581b305885114768443d3
解压安装包:
bash复制unzip -q p13390677_112040_Linux-x86-64_1of7.zip
unzip -q p13390677_112040_Linux-x86-64_2of7.zip
5.2 图形界面安装
配置DISPLAY环境变量(假设客户端IP为192.168.1.100):
bash复制export DISPLAY=192.168.1.100:0.0
启动安装程序:
bash复制cd /u01/soft/database
./runInstaller
安装过程中需要注意的几个关键点:
- 选择"Install database software only"
- 选择"Single instance database installation"
- 语言选择英文(可以后续添加其他语言)
- 企业版选择"Enterprise Edition"
- 安装目录保持默认(应该指向之前设置的ORACLE_HOME)
5.3 解决常见安装问题
在RHEL/CentOS 7上安装Oracle 11g时,最常见的错误是ins_emagent.mk报错。解决方法:
bash复制# 备份原文件
cp $ORACLE_HOME/sysman/lib/ins_emagent.mk $ORACLE_HOME/sysman/lib/ins_emagent.mk.bak
# 修改文件内容
sed -i 's/^\(\s*\$(MK_EMAGENT_NMECTL)\)\s*$/\1 -lnnz11/g' $ORACLE_HOME/sysman/lib/ins_emagent.mk
这个问题的本质是Oracle 11g的监控代理需要链接libnnz11.so库,但在RHEL7上路径发生了变化。
6. 数据库创建与配置
6.1 创建监听
bash复制netca
在图形界面中选择"Listener configuration",保持默认配置即可。监听程序是客户端连接数据库的桥梁,默认监听端口1521。
6.2 创建数据库
bash复制dbca
数据库创建关键步骤:
- 选择"Create a Database"
- 选择"General Purpose or Transaction Processing"
- 全局数据库名设置为
orcl(与ORACLE_SID一致) - 取消"Configure Enterprise Manager"(11g的EM比较耗资源)
- 选择"Use the Same Administrative Password for All Accounts"
- 存储类型选择"File System"
- 数据库文件位置选择"Use Common Location...",设置为
/oradata - 开启归档模式(ARCHIVELOG)
- 内存设置:建议SGA 40%物理内存,PGA 20%物理内存
- 字符集选择"ZHS16GBK"(中文环境)
6.3 安装后检查
检查数据库状态:
sql复制sqlplus / as sysdba
SELECT status FROM v$instance;
检查监听状态:
bash复制lsnrctl status
7. 常见问题解决方案
7.1 ORA-00845错误
如果遇到ORA-00845: MEMORY_TARGET not supported on this system错误,说明/dev/shm空间不足。解决方法:
bash复制# 查看当前大小
df -h /dev/shm
# 临时调整大小
mount -o remount,size=8G /dev/shm
# 永久生效(修改/etc/fstab)
tmpfs /dev/shm tmpfs defaults,size=8G 0 0
7.2 图形界面无法启动
如果图形界面无法显示,可以尝试以下方法:
- 确保客户端安装了X Server(如Xming)
- 在客户端执行
xhost +允许服务器连接 - 在服务器上正确设置DISPLAY变量
- 或者使用VNC远程桌面
7.3 数据库无法启动
如果数据库无法启动,检查alert日志:
bash复制cd $ORACLE_BASE/diag/rdbms/$ORACLE_SID/trace
tail -100 alert_$ORACLE_SID.log
常见问题包括:
- 控制文件损坏
- 表空间不足
- 参数文件配置错误
8. 性能优化建议
8.1 内存配置
修改$ORACLE_HOME/dbs/init$ORACLE_SID.ora:
sql复制memory_target=4G
sga_target=3G
pga_aggregate_target=1G
8.2 表空间规划
建议创建独立的表空间存放不同对象:
sql复制CREATE TABLESPACE users DATAFILE '/oradata/users01.dbf' SIZE 1G;
CREATE TABLESPACE idx DATAFILE '/oradata/idx01.dbf' SIZE 1G;
8.3 定期维护任务
设置自动统计信息收集:
sql复制BEGIN
DBMS_AUTO_TASK_ADMIN.ENABLE(
client_name => 'auto optimizer stats collection',
operation => NULL,
window_name => NULL);
END;
/
9. 安全加固措施
9.1 修改默认密码
sql复制ALTER USER sys IDENTIFIED BY new_password;
ALTER USER system IDENTIFIED BY new_password;
9.2 启用审计
sql复制AUDIT CREATE SESSION;
AUDIT SELECT TABLE, UPDATE TABLE, INSERT TABLE, DELETE TABLE;
9.3 限制IP访问
在$ORACLE_HOME/network/admin/sqlnet.ora中添加:
code复制tcp.validnode_checking=yes
tcp.invited_nodes=(192.168.1.100,192.168.1.101)
10. 备份与恢复策略
10.1 RMAN基础备份
bash复制rman target /
RUN {
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;
BACKUP DATABASE PLUS ARCHIVELOG;
RELEASE CHANNEL ch1;
}
10.2 定时备份脚本
创建/home/oracle/backup.sh:
bash复制#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export PATH=$ORACLE_HOME/bin:$PATH
rman target / <<EOF
RUN {
ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;
BACKUP DATABASE PLUS ARCHIVELOG;
DELETE NOPROMPT OBSOLETE;
RELEASE CHANNEL ch1;
}
EOF
添加到crontab:
bash复制0 2 * * * /home/oracle/backup.sh > /home/oracle/backup.log 2>&1
经过以上步骤,一个完整的Oracle 11g数据库就已经在RHEL/CentOS 7系统上安装配置完成。在实际生产环境中,还需要根据具体业务需求进行更细致的参数调优和安全配置。