Ubuntu环境下Oracle数据库配置资源推荐
/tmp目录需至少1GB空间(用于临时文件);数据文件、日志文件(redo log、archive log)需根据数据库大小预留(如100GB数据文件需预留150GB以上空间)。alien(用于转换RPM包为DEB格式)、libaio1(异步I/O库)、unixodbc(ODBC驱动)、build-essential(编译工具)等。sudo groupadd -g 503 oinstall # 安装组
sudo groupadd -g 504 dba # 数据库管理员组
sudo useradd -u 501 -g oinstall -G dba,oper -s /bin/bash -m oracle # 创建oracle用户
sudo passwd oracle # 设置密码
sudo mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1 # Oracle安装目录
sudo chown -R oracle:oinstall /u01 # 所有权归属
sudo chmod -R 755 /u01 # 权限设置
/etc/sysctl.conf,添加以下参数(提升系统并发能力和内存管理):kernel.shmmax = 3147483648 # 最大共享内存段(不超过物理内存)
kernel.shmmni = 4096 # 共享内存段最大数量
kernel.shmall = 2097152 # 共享内存总页数
kernel.sem = 250 32000 100 128 # 信号量参数(提升并发)
fs.file-max = 65536 # 最大文件描述符数
net.ipv4.ip_local_port_range = 1024 65000 # TCP端口范围
执行sudo sysctl -p使参数生效。/etc/security/limits.conf,添加以下内容(提升oracle用户的资源上限):oracle soft nofile = 65536 # 最大打开文件数(软限制)
oracle hard nofile = 65536 # 最大打开文件数(硬限制)
oracle soft nproc = 16384 # 最大进程数(软限制)
oracle hard nproc = 16384 # 最大进程数(硬限制)
linux_19c_database_1of2.zip、linux_19c_database_2of2.zip)解压到/u01目录。./runInstaller,按照向导完成安装(选择“单实例数据库安装”“创建数据库”选项)。dbca(数据库配置助手)创建数据库,设置全局数据库名称(如orcl)、实例名(如orcl)、管理员密码(如Oracle123)。~/.bashrc文件,添加以下内容(设置Oracle环境变量):export ORACLE_BASE=/u01/app/oracle # Oracle基目录
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1 # Oracle安装目录
export ORACLE_SID=orcl # 实例名
export PATH=$ORACLE_HOME/bin:$PATH # 添加Oracle命令到PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH # 添加Oracle库路径
执行source ~/.bashrc使变量生效。SGA_TARGET(如2GB)和SGA_MAX_SIZE(如4GB),Oracle会自动调整共享池、缓冲区缓存等组件大小;监控V$LIBRARYCACHE的GETHITRATIO(目标>95%),避免硬解析(使用绑定变量减少硬解析)。PGA_AGGREGATE_TARGET(如1GB),Oracle会自动分配工作区内存;通过V$PGA_TARGET_ADVICE视图预测最佳值(选择命中率>90%的最小值)。MEMORY_TARGET(如3GB)和MEMORY_MAX_TARGET(如4GB),Oracle自动管理SGA与PGA的比例,但高并发场景下建议使用ASMM。WHERE、JOIN、ORDER BY子句中的列)创建索引(如CREATE INDEX idx_emp_dept ON employees(department_id));定期重建索引(如ALTER INDEX idx_emp_dept REBUILD),解决碎片过多问题;删除无效索引(如未使用的索引),避免影响DML操作。SELECT *(明确列出所需列,如SELECT employee_id, last_name FROM employees);使用绑定变量(如:dept_id)替代硬编码,减少硬解析;优化ORDER BY、GROUP BY操作(为排序字段创建索引,如CREATE INDEX idx_emp_salary ON employees(salary));减少子查询(用JOIN替代嵌套子查询,如SELECT e.last_name, d.department_name FROM employees e JOIN departments d ON e.department_id = d.department_id)。PARTITION BY RANGE(sale_date)),将数据分散到多个磁盘,提升查询效率(如查询某时间段数据只需扫描对应分区)。COMPRESS FOR ROW)或列压缩(COMPRESS FOR COLUMN),减少I/O量(如ALTER TABLE sales COMPRESS FOR ROW);对高频访问的“热”表(如用户表)使用KEEP BUFFER CACHE(如ALTER TABLE employees STORAGE (BUFFER_POOL KEEP)),将数据常驻内存。noatime选项(如mount -o noatime /dev/sda1 /u01),减少文件访问时间的更新;将Oracle数据文件、日志文件(redo log、archive log)放在不同磁盘上,分散I/O压力。fs.file-max(增加系统最大文件描述符数)、kernel.sem(提升并发处理能力)、net.core.somaxconn(增加TCP连接队列长度,避免连接拒绝)。noatime选项(减少文件访问时间更新);将Oracle数据文件、日志文件放在不同磁盘上(分散I/O压力)。systemctl stop命令关闭不需要的服务(如apache2、mysql),减少系统资源竞争。@?/rdbms/admin/awrrpt.sql生成AWR报告(分析工作负载变化),通过@?/rdbms/admin/addmrpt.sql生成ADDM报告(识别性能瓶颈),针对性优化。DBMS_STATS.GATHER_TABLE_STATS收集表、索引的统计信息(如行数、块数、分布),帮助优化器生成更好的执行计划(如EXEC DBMS_STATS.GATHER_TABLE_STATS('HR', 'EMPLOYEES'))。