内核参数决定了系统对内存、进程、网络等资源的管理策略,需根据Oracle数据库的需求调整。使用sudo vim /etc/sysctl.conf编辑文件,添加或修改以下关键参数:
kernel.shmmax(单个共享内存段的最大大小,建议设为物理内存的80%,如4GB内存设为3147483648)、kernel.shmmni(系统共享内存段的最大数量,设为4096)、kernel.shmall(系统共享内存总页数,设为2097152,即kernel.shmmax/4096)。kernel.sem(信号量参数,格式为SEMMSL SEMMNS SEMOPM SEMMNI,建议设为250 32000 100 128,分别表示每个信号量集合的最大信号量数、系统最大信号量总数、每次semop调用最多操作的信号量数、系统最大信号量集合数)。fs.file-max(系统最大文件描述符数,设为65536,满足Oracle大量文件操作需求)。net.ipv4.ip_local_port_range(本地端口范围,设为9000 65500,避免与系统或其他应用冲突)。net.ipv4.tcp_tw_reuse(允许快速回收TIME-WAIT状态的TCP连接,设为1)、net.core.somaxconn(系统允许的最大连接队列长度,设为4096)。修改完成后,执行sudo sysctl -p使参数立即生效。
该文件用于限制Oracle用户的进程、文件描述符等资源使用,避免单个用户过度消耗系统资源。使用sudo vim /etc/security/limits.conf编辑文件,添加以下针对oracle用户的限制:
oracle soft nproc 2048(软限制,用户可临时突破的最大进程数)、oracle hard nproc 16384(硬限制,系统允许的最大进程数,需root权限修改)。oracle soft nofile 1024(软限制,用户可打开的最大文件数)、oracle hard nofile 65536(硬限制,系统允许的最大文件数)。这些限制需与/etc/sysctl.conf中的fs.file-max参数配合,确保系统整体资源充足。
通过用户环境变量进一步规范Oracle运行时的资源分配,使用sudo vim /etc/profile.d/oracle.sh创建或编辑脚本,添加以下内容:
export ORACLE_BASE=/u01/app/oracle # Oracle基目录(需根据实际安装路径调整)
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1 # Oracle Home目录(根据版本调整)
export ORACLE_SID=orcl # 数据库实例名(默认orcl,可根据需求修改)
export DB_MEMORY=2G # 数据库SGA/PGA总内存(根据服务器内存调整,如4GB内存设为3G)
export DB_CPU_TARGET=2 # 数据库CPU目标(单位:CPU核心数,根据服务器核心数调整)
保存后,执行source /etc/profile.d/oracle.sh使环境变量立即生效,或让用户重新登录自动加载。
sysctl -a | grep shmmax(检查共享内存大小)、sysctl -a | grep file-max(检查最大文件描述符数),确认参数已修改为预期值。oracle用户(su - oracle),执行ulimit -u(查看进程数软限制)、ulimit -n(查看文件描述符软限制),确认数值与/etc/security/limits.conf中设置一致。ps -ef | grep ora_pmon(查看Oracle进程状态),确认数据库实例正常运行,无资源耗尽导致的进程崩溃。若通过Docker安装Oracle(如zerda/oracle-database镜像),可通过--shm-size参数设置共享内存大小(如--shm-size 1g),避免容器内共享内存不足导致数据库启动失败。示例命令:
docker run -d --name exeed-db -p 1521:1521 -p 8080:8080 --shm-size 1g --restart always -e ORACLE_PWD=yourpassword -v exeed-db:/u01/app/oracle/oradata zerda/oracle-database:11.2.0.2-xe
该参数需根据容器内Oracle实例的内存需求调整,确保共享内存足够支持数据库运行。
以上步骤覆盖了Oracle在Ubuntu上的主要资源限制设置,需根据实际服务器配置(内存、CPU核心数)和Oracle版本(如10g、11g、19c)调整参数值,确保数据库稳定运行。