1. 项目概述
在Linux 7系统上安装Oracle 11.2.0.4数据库是一个需要谨慎操作的过程。作为一款经典的企业级数据库系统,Oracle 11.2.0.4虽然已经发布多年,但仍在很多传统业务系统中广泛使用。这个版本特别适合需要长期稳定运行的关键业务场景,比如金融、电信等行业的核心系统。
我曾在多个生产环境中部署过这个版本的Oracle数据库,深知其中的技术要点和常见陷阱。本文将分享我在CentOS/RHEL 7系统上安装Oracle 11.2.0.4的完整经验,包括环境准备、参数配置、安装过程以及后期优化建议。
2. 环境准备
2.1 系统要求检查
在开始安装前,必须确保系统满足Oracle 11.2.0.4的最低要求:
- 操作系统:RHEL/CentOS 7.x 64位
- 内存:至少2GB(建议4GB以上)
- 交换空间:内存1.5-2倍(8GB内存以下按此规则,超过8GB可适当减少)
- 磁盘空间:/tmp目录至少1GB,Oracle安装目录建议50GB以上
- 软件包:需要安装特定的依赖包
检查内存和交换空间:
free -h检查磁盘空间:
df -h2.2 安装必要依赖包
Oracle数据库运行需要一系列系统库和工具,执行以下命令安装:
yum install -y binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel对于图形化安装界面,还需要安装:
yum install -y xorg-x11-utils xorg-x11-xauth xorg-x11-server-utils2.3 创建Oracle用户和组
Oracle不建议使用root用户直接安装,需要创建专门的用户和组:
groupadd oinstall groupadd dba groupadd oper useradd -g oinstall -G dba,oper oracle echo "oracle" | passwd --stdin oracle2.4 配置内核参数
Oracle数据库对系统内核参数有特定要求,编辑/etc/sysctl.conf文件:
cat >> /etc/sysctl.conf <<EOF fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 536870912 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 -p2.5 配置用户限制
编辑/etc/security/limits.conf文件:
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 EOF3. Oracle软件安装
3.1 准备安装文件
从Oracle官网下载以下文件:
- linux.x64_11gR2_database_1of2.zip
- linux.x64_11gR2_database_2of2.zip
解压文件:
unzip linux.x64_11gR2_database_1of2.zip unzip linux.x64_11gR2_database_2of2.zip3.2 配置响应文件
创建响应文件可以简化安装过程,以下是示例响应文件内容:
cat > /home/oracle/db_install.rsp <<EOF oracle.install.option=INSTALL_DB_SWONLY ORACLE_HOSTNAME=localhost UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/app/oraInventory SELECTED_LANGUAGES=en,zh_CN ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 ORACLE_BASE=/u01/app/oracle oracle.install.db.InstallEdition=EE oracle.install.db.DBA_GROUP=dba oracle.install.db.OPER_GROUP=oper oracle.install.db.config.starterdb.type=GENERAL_PURPOSE oracle.install.db.config.starterdb.globalDBName=orcl oracle.install.db.config.starterdb.SID=orcl oracle.install.db.config.starterdb.memoryLimit=800 oracle.install.db.config.starterdb.password.ALL=Oracle123 oracle.install.db.config.starterdb.automatedBackup.enable=false oracle.install.db.config.starterdb.storageType=FILE_SYSTEM_STORAGE oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=/u01/app/oracle/oradata oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=/u01/app/oracle/fast_recovery_area EOF3.3 运行安装程序
切换到oracle用户执行安装:
su - oracle cd database ./runInstaller -silent -responseFile /home/oracle/db_install.rsp -ignorePrereq安装过程中会提示执行两个root脚本:
/u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/11.2.0/dbhome_1/root.sh4. 数据库配置
4.1 创建数据库
安装完成后,可以使用DBCA工具创建数据库:
dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname orcl -sid orcl -responseFile NO_VALUE \ -characterSet AL32UTF8 \ -memoryPercentage 40 \ -emConfiguration LOCAL \ -sysPassword Oracle123 \ -systemPassword Oracle123 \ -dbsnmpPassword Oracle123 \ -datafileDestination /u01/app/oracle/oradata \ -recoveryAreaDestination /u01/app/oracle/fast_recovery_area \ -storageType FS \ -sampleSchema true4.2 配置环境变量
编辑oracle用户的.bash_profile文件:
cat >> /home/oracle/.bash_profile <<EOF export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/dbhome_1 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 EOF source /home/oracle/.bash_profile4.3 配置监听器
编辑listener.ora文件:
cat > $ORACLE_HOME/network/admin/listener.ora <<EOF LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) ) EOF启动监听器:
lsnrctl start5. 常见问题与解决方案
5.1 OUI-25031错误
如果在安装过程中出现OUI-25031错误,提示无法创建目录,通常是因为权限问题。解决方法:
chown -R oracle:oinstall /u01 chmod -R 775 /u015.2 图形界面无法显示
如果使用X11转发时图形界面无法显示,可以尝试:
export DISPLAY=your_client_ip:0.0 xhost +5.3 数据库创建失败
如果数据库创建失败,可以检查日志文件:
cat $ORACLE_BASE/cfgtoollogs/dbca/orcl/trace.log常见原因是内存不足或磁盘空间不足,可以调整参数后重试。
5.4 监听器无法启动
如果监听器无法启动,检查端口是否被占用:
netstat -tulnp | grep 1521如果端口被占用,可以修改listener.ora文件中的端口号。
6. 安装后优化
6.1 配置自动启动
创建/etc/init.d/oracle脚本:
cat > /etc/init.d/oracle <<EOF #!/bin/bash # chkconfig: 345 99 10 # description: Oracle auto start-stop script. case "\$1" in 'start') su - oracle -c "\$ORACLE_HOME/bin/dbstart \$ORACLE_HOME" su - oracle -c "\$ORACLE_HOME/bin/lsnrctl start" ;; 'stop') su - oracle -c "\$ORACLE_HOME/bin/dbshut \$ORACLE_HOME" su - oracle -c "\$ORACLE_HOME/bin/lsnrctl stop" ;; *) echo "Usage: \$0 start|stop" exit 1 ;; esac exit 0 EOF chmod 750 /etc/init.d/oracle chkconfig --add oracle6.2 性能调优
编辑$ORACLE_HOME/dbs/init$ORACLE_SID.ora文件,添加以下参数:
cat >> $ORACLE_HOME/dbs/initorcl.ora <<EOF processes=300 sessions=335 transactions=400 db_block_size=8192 sga_target=1G pga_aggregate_target=300M EOF6.3 定期维护
设置定期归档日志清理:
sqlplus / as sysdba <<EOF ALTER SYSTEM SET log_archive_dest_1='location=/u01/app/oracle/archivelog' SCOPE=BOTH; ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=SPFILE; CREATE OR REPLACE DIRECTORY archivelog_dir AS '/u01/app/oracle/archivelog'; GRANT READ, WRITE ON DIRECTORY archivelog_dir TO sys; EOF7. 安全加固建议
7.1 修改默认密码
安装完成后立即修改所有默认密码:
sqlplus / as sysdba <<EOF ALTER USER sys IDENTIFIED BY new_password; ALTER USER system IDENTIFIED BY new_password; ALTER USER dbsnmp IDENTIFIED BY new_password; EOF7.2 启用审计
配置基本审计策略:
sqlplus / as sysdba <<EOF AUDIT CREATE SESSION; AUDIT ALTER USER; AUDIT CREATE USER; AUDIT DROP USER; AUDIT GRANT ANY PRIVILEGE; EOF7.3 限制网络访问
编辑sqlnet.ora文件限制访问:
cat >> $ORACLE_HOME/network/admin/sqlnet.ora <<EOF tcp.validnode_checking=yes tcp.invited_nodes=(localhost, your_trusted_ip) tcp.excluded_nodes=(10.0.0.0/8, 192.168.0.0/16) EOF8. 备份与恢复
8.1 配置RMAN备份
设置基本的RMAN备份策略:
rman target / <<EOF CONFIGURE RETENTION POLICY TO REDUNDANCY 2; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/backup/%F'; CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/app/oracle/backup/%U'; EOF8.2 创建备份脚本
创建每日备份脚本:
cat > /home/oracle/backup.sh <<EOF #!/bin/bash export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 export PATH=\$PATH:\$ORACLE_HOME/bin export ORACLE_SID=orcl rman target / << RMAN_EOF RUN { ALLOCATE CHANNEL ch1 DEVICE TYPE DISK; BACKUP DATABASE PLUS ARCHIVELOG; BACKUP CURRENT CONTROLFILE; RELEASE CHANNEL ch1; } RMAN_EOF EOF chmod +x /home/oracle/backup.sh8.3 测试恢复流程
定期测试数据库恢复流程:
rman target / <<EOF STARTUP MOUNT; RESTORE DATABASE; RECOVER DATABASE; ALTER DATABASE OPEN RESETLOGS; EOF9. 监控与维护
9.1 配置OEM
配置Oracle Enterprise Manager Database Control:
emctl start dbconsole访问地址:https://localhost:1158/em
9.2 设置AWR快照
调整AWR快照设置:
sqlplus / as sysdba <<EOF EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(INTERVAL => 60, RETENTION => 43200); EOF9.3 日常检查脚本
创建日常检查脚本:
cat > /home/oracle/daily_check.sql <<EOF SET LINESIZE 200 SET PAGESIZE 100 COLUMN name FORMAT A50 COLUMN value FORMAT A50 PROMPT ========== Database Status ========== SELECT name, open_mode, log_mode FROM v\$database; PROMPT ========== Tablespace Usage ========== SELECT tablespace_name, ROUND(used_space/1024/1024,2) used_mb, ROUND(tablespace_size/1024/1024,2) total_mb, ROUND(used_percent,2) pct_used FROM dba_tablespace_usage_metrics; PROMPT ========== Session Count ========== SELECT status, COUNT(*) FROM v\$session GROUP BY status; PROMPT ========== Top SQL by CPU ========== SELECT sql_id, executions, cpu_time/1000000 cpu_sec FROM v\$sqlarea ORDER BY cpu_time DESC FETCH FIRST 10 ROWS ONLY; EOF10. 升级与补丁
10.1 应用PSU补丁
下载最新的PSU补丁并应用:
unzip psu_patch.zip cd patch_dir opatch apply10.2 检查补丁状态
验证已安装的补丁:
opatch lsinventory10.3 升级到新版本
准备升级到新版本时,先执行预升级检查:
cd $ORACLE_HOME/rdbms/admin sqlplus / as sysdba @utlu112i.sql根据检查结果解决所有问题后再进行升级。