1. Oracle 11.2.0.4安装前准备
1.1 系统环境检查
在开始安装Oracle 11.2.0.4之前,必须确保系统环境满足最低要求。对于Linux系统,建议使用Red Hat Enterprise Linux 5/6或SUSE Linux Enterprise Server 10/11。Windows平台则支持Windows Server 2008 R2及更高版本。
内存方面,物理内存至少需要1GB,建议2GB以上。交换空间的大小通常设置为物理内存的1.5倍到2倍。例如,如果你的服务器有4GB内存,那么交换空间应该配置6-8GB。
磁盘空间需求分为两部分:临时空间至少1GB,安装目录需要4.5GB以上。实际生产环境中,考虑到后续的数据增长,建议分配至少20GB的空间给Oracle安装目录。
重要提示:Oracle 11.2.0.4不支持在32位系统上安装,必须使用64位操作系统。
1.2 依赖包安装
对于Linux系统,需要安装以下关键依赖包:
- binutils
- compat-libstdc++
- elfutils-libelf
- gcc
- glibc
- libaio
- libgcc
- libstdc++
- make
- sysstat
- unixODBC
可以使用以下命令一次性安装所有依赖(以RHEL为例):
bash复制yum install -y binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel
1.3 创建Oracle用户和组
Oracle不建议使用root用户直接安装,因此需要创建专门的用户和组:
bash复制groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle
然后创建Oracle的安装目录并设置权限:
bash复制mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01
chmod -R 775 /u01
2. Oracle 11.2.0.4详细安装步骤
2.1 下载和解压安装包
从Oracle官网下载以下两个安装包:
- linux.x64_11gR2_database_1of2.zip
- linux.x64_11gR2_database_2of2.zip
将下载的安装包上传到服务器后,使用以下命令解压:
bash复制unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip
解压后会生成一个database目录,这就是Oracle的安装源。
2.2 配置环境变量
切换到oracle用户,编辑.bash_profile文件:
bash复制su - oracle
vi ~/.bash_profile
添加以下内容:
bash复制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
保存后执行以下命令使配置生效:
bash复制source ~/.bash_profile
2.3 运行安装程序
进入解压后的database目录,启动安装程序:
bash复制cd database
./runInstaller
这会启动Oracle的图形化安装界面。如果是在无图形界面的服务器上安装,可以添加-silent参数进行静默安装。
3. 图形界面安装过程详解
3.1 安装选项配置
安装向导启动后,按照以下步骤操作:
- 取消勾选"I wish to receive security updates via My Oracle Support"
- 选择"Install database software only"(我们将在安装完成后单独创建数据库)
- 选择"Single instance database installation"
- 选择语言(建议保持默认的English)
- 选择企业版(Enterprise Edition)
3.2 安装位置设置
在安装位置界面:
- Oracle Base: /u01/app/oracle
- Software Location: /u01/app/oracle/product/11.2.0/dbhome_1
3.3 先决条件检查
安装程序会自动检查系统是否满足所有要求。如果出现任何警告,需要根据提示解决后再继续。
常见问题包括:
- 内核参数不足
- 依赖包缺失
- 内存/交换空间不足
对于内核参数问题,可以编辑/etc/sysctl.conf文件,添加以下内容:
bash复制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
修改后执行sysctl -p使配置生效。
3.4 执行安装
确认所有检查都通过后,点击"Install"开始安装。安装过程可能需要30分钟到1小时,具体时间取决于服务器性能。
安装完成后,会提示需要以root身份执行两个脚本:
- /u01/app/oraInventory/orainstRoot.sh
- /u01/app/oracle/product/11.2.0/dbhome_1/root.sh
新开一个终端窗口,切换到root用户执行这两个脚本。
4. 数据库创建与配置
4.1 使用DBCA创建数据库
Oracle软件安装完成后,需要使用Database Configuration Assistant(DBCA)创建数据库:
bash复制dbca
在DBCA向导中:
- 选择"Create a Database"
- 选择"General Purpose or Transaction Processing"
- 输入全局数据库名(如orcl)和SID(通常与全局名相同)
- 取消勾选"Configure Enterprise Manager"
- 设置数据库字符集(建议选择AL32UTF8以支持多语言)
- 选择"Create Database"+"Sample Schemas"
- 设置SYS和SYSTEM密码
- 选择"File System"存储类型
- 指定数据库文件位置(使用默认值即可)
- 启用归档模式(生产环境建议勾选)
- 设置内存参数(根据服务器实际内存调整)
- 设置进程数(通常设置为150-300)
- 最后确认配置并开始创建
数据库创建过程可能需要较长时间,请耐心等待。
4.2 重要初始化参数配置
数据库创建完成后,建议修改以下重要参数:
sql复制ALTER SYSTEM SET processes=300 SCOPE=SPFILE;
ALTER SYSTEM SET sessions=335 SCOPE=SPFILE;
ALTER SYSTEM SET transactions=400 SCOPE=SPFILE;
ALTER SYSTEM SET open_cursors=300 SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=1G SCOPE=SPFILE;
ALTER SYSTEM SET sga_target=3G SCOPE=SPFILE;
修改后需要重启数据库使配置生效:
sql复制SHUTDOWN IMMEDIATE;
STARTUP;
5. Oracle网络服务配置
5.1 监听器配置
Oracle监听器是客户端连接数据库的入口。配置监听器使用Net Configuration Assistant:
bash复制netca
在向导中:
- 选择"Listener configuration"
- 选择"Add"
- 使用默认监听器名称LISTENER
- 选择TCP协议
- 使用默认端口1521
- 不配置其他监听器
- 完成配置
配置完成后,可以使用以下命令管理监听器:
bash复制lsnrctl start # 启动监听器
lsnrctl stop # 停止监听器
lsnrctl status # 查看监听器状态
5.2 本地服务名配置
为了方便客户端连接,可以配置本地服务名(TNSNAME)。编辑$ORACLE_HOME/network/admin/tnsnames.ora文件,添加以下内容:
bash复制ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
6. 数据库连接测试
6.1 SQL*Plus连接测试
使用SQL*Plus连接数据库,验证安装是否成功:
bash复制sqlplus sys/your_password@orcl as sysdba
连接成功后,执行以下命令查看数据库状态:
sql复制SELECT name, open_mode, database_role FROM v$database;
SELECT * FROM v$version;
6.2 客户端工具连接
对于远程客户端连接,需要确保:
- 监听器正在运行
- 防火墙开放了1521端口
- 客户端tnsnames.ora文件配置正确
常用的Oracle客户端工具包括:
- SQL Developer
- Toad for Oracle
- PL/SQL Developer
7. 安装后优化与配置
7.1 自动启动设置
为了确保Oracle服务在系统重启后自动启动,可以创建启动脚本:
- 编辑/etc/oratab文件,将最后的N改为Y:
bash复制orcl:/u01/app/oracle/product/11.2.0/dbhome_1:Y
- 创建/etc/init.d/dbora文件,内容如下:
bash复制#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.
ORA_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
ORA_OWNER=oracle
case "$1" in
'start')
# Start the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME" &
# Start the Listener:
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start" &
;;
'stop')
# Stop the Oracle Listener:
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop" &
# Stop the Oracle databases:
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME" &
;;
esac
- 设置脚本权限并配置开机启动:
bash复制chmod 750 /etc/init.d/dbora
chkconfig --add dbora
7.2 日常维护脚本
创建以下常用维护脚本:
- 备份脚本(/home/oracle/scripts/backup.sh):
bash复制#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
DATE=`date +%Y%m%d`
BACKUP_DIR=/u01/backup
mkdir -p $BACKUP_DIR/$DATE
expdp system/your_password directory=DATA_PUMP_DIR dumpfile=expdp_$DATE.dmp logfile=expdp_$DATE.log full=y
- 监控脚本(/home/oracle/scripts/monitor.sql):
sql复制SELECT tablespace_name, ROUND(used_space/1024/1024,2) "Used (MB)",
ROUND(tablespace_size/1024/1024,2) "Size (MB)",
ROUND(used_percent,2) "Used %"
FROM dba_tablespace_usage_metrics;
SELECT sid, serial#, username, program, status, machine
FROM v$session
WHERE type='USER';
SELECT name, value
FROM v$sysstat
WHERE name IN ('user commits', 'user rollbacks');
8. 常见问题与解决方案
8.1 安装过程中的常见错误
-
OUI-25031错误:无法创建目录
- 原因:权限不足
- 解决:确保oracle用户对安装目录有读写权限
-
INS-20802错误:Oracle Cluster Verification Utility失败
- 原因:通常出现在单实例安装时
- 解决:在安装时忽略这个检查
-
ORA-27125错误:无法创建共享内存段
- 原因:内核参数设置不当
- 解决:调整/etc/sysctl.conf中的shmmax和shmall参数
8.2 连接问题排查
-
TNS-12541错误:监听器无法识别连接描述符中请求的服务
- 检查监听器是否运行:lsnrctl status
- 检查服务是否注册:lsnrctl services
- 检查tnsnames.ora配置是否正确
-
ORA-12170错误:连接超时
- 检查网络连接是否通畅
- 检查防火墙是否阻止了1521端口
- 检查监听器是否配置了正确的IP地址
-
ORA-01017错误:无效的用户名/密码
- 确认用户名和密码正确
- 检查密码是否包含特殊字符需要用引号括起来
- 尝试用SQL*Plus本地连接验证
8.3 性能优化建议
-
内存配置:
- SGA_TARGET和PGA_AGGREGATE_TARGET应根据服务器内存合理分配
- 通常SGA占可用内存的60%,PGA占20%
-
I/O优化:
- 将数据文件、重做日志文件和控制文件分散到不同的物理磁盘
- 考虑使用ASM(自动存储管理)管理数据库文件
-
SQL调优:
- 定期收集统计信息:EXEC DBMS_STATS.GATHER_DATABASE_STATS;
- 使用SQL Tuning Advisor分析问题SQL
- 创建适当的索引
9. 安全配置建议
9.1 基础安全设置
-
修改默认密码:
- 修改SYS、SYSTEM等默认账户的密码
- 锁定不使用的默认账户:ALTER USER scott ACCOUNT LOCK;
-
启用审计:
sql复制ALTER SYSTEM SET audit_trail=DB SCOPE=SPFILE; AUDIT CREATE SESSION; AUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE, UPDATE TABLE BY ACCESS; -
限制网络访问:
- 在sqlnet.ora中添加:tcp.validnode_checking=yes
- 设置允许访问的IP:tcp.invited_nodes=(ip1, ip2)
9.2 定期维护任务
-
备份策略:
- 每日增量备份+每周全备
- 定期测试备份恢复流程
-
补丁更新:
- 定期检查Oracle安全警报
- 应用最新的PSU(Patch Set Update)
-
监控:
- 设置警报监控表空间使用率
- 监控长时间运行的会话和SQL
10. 实用技巧与经验分享
10.1 安装过程中的小技巧
-
静默安装:对于批量部署,可以使用静默安装模式。首先创建一个响应文件:
bash复制
./runInstaller -record -destinationFile /home/oracle/response.rsp然后使用该响应文件进行静默安装:
bash复制
./runInstaller -silent -responseFile /home/oracle/response.rsp -
快速卸载:如果需要重新安装,可以使用以下命令彻底卸载Oracle:
bash复制rm -rf /u01/app/oracle/* rm -rf /etc/ora* rm -f /usr/local/bin/oraenv rm -f /usr/local/bin/coraenv rm -f /usr/local/bin/dbhome -
空间不足处理:如果/tmp空间不足,可以设置临时目录:
bash复制export TEMP=/u01/tmp export TMPDIR=/u01/tmp
10.2 日常使用技巧
-
快速查看表结构:
sql复制DESC table_name; -
查看SQL执行计划:
sql复制EXPLAIN PLAN FOR SELECT * FROM employees; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY); -
批量执行SQL脚本:
bash复制
sqlplus username/password@sid @script.sql -
查看锁信息:
sql复制SELECT l.session_id, o.owner, o.object_name, o.object_type FROM v$locked_object l, dba_objects o WHERE l.object_id = o.object_id; -
终止会话:
sql复制ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
10.3 性能监控脚本
-
查看等待事件:
sql复制SELECT event, total_waits, time_waited FROM v$system_event ORDER BY time_waited DESC; -
查看资源消耗高的SQL:
sql复制SELECT sql_id, executions, buffer_gets, disk_reads, elapsed_time/1000000 FROM v$sqlarea ORDER BY buffer_gets DESC; -
表空间使用情况:
sql复制SELECT df.tablespace_name "表空间名", df.bytes/1024/1024 "大小(MB)", (df.bytes-fs.bytes)/1024/1024 "已用(MB)", fs.bytes/1024/1024 "空闲(MB)", ROUND(100*(df.bytes-fs.bytes)/df.bytes) "使用率(%)" FROM (SELECT tablespace_name, SUM(bytes) bytes FROM dba_free_space GROUP BY tablespace_name) fs, (SELECT tablespace_name, SUM(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) df WHERE fs.tablespace_name = df.tablespace_name;
在实际使用Oracle 11.2.0.4的过程中,我发现定期维护和监控是保证数据库稳定运行的关键。特别是在生产环境中,建议建立完整的监控体系,包括性能监控、空间监控和异常监控。另外,备份策略一定要经过实际恢复测试,确保在真正需要时能够顺利恢复数据。