內核參數決定了系統對Oracle進程的資源分配能力,需調整以下關鍵參數(根據服務器內存大小調整數值):
sudo vim /etc/sysctl.conf
添加或修改以下內容:
# 共享內存設置(shmmax為單個共享內存段最大值,shmall為共享內存總頁數)
kernel.shmmax = 物理內存大?。ㄗ止潱? # 如8GB內存設為8589934592(8*1024*1024*1024)
kernel.shmall = 物理內存大?。摚? # 如8GB內存設為2097152(8589934592/4096)
# 信號量設置(控制并發進程數)
kernel.sem = 250 32000 100 128 # semmsl(每個信號量集的最大信號量數)、semmns(系統最大信號量數)、semopm(每個semop調用最多操作數)、semmni(系統最大信號量集數)
# 文件描述符設置(系統級最大文件描述符數)
fs.file-max = 6815744
# 端口范圍(允許Oracle使用的臨時端口范圍)
net.ipv4.ip_local_port_range = 9000 65500
# 內存管理(減少swap使用,提高內存利用率)
vm.swappiness = 0
保存后應用配置:
sudo sysctl -p
通過limits.conf
限制Oracle用戶的進程、文件描述符等資源使用,避免單個用戶占用過多系統資源:
sudo vim /etc/security/limits.conf
在文件末尾添加以下內容(針對Oracle用戶):
oracle soft nproc 2047 # 每個Oracle用戶的最大進程數(軟限制,可臨時調整至硬限制)
oracle hard nproc 16384 # 每個Oracle用戶的最大進程數(硬限制,系統最大值)
oracle soft nofile 1024 # 每個Oracle用戶的最大文件描述符數(軟限制)
oracle hard nofile 65536 # 每個Oracle用戶的最大文件描述符數(硬限制)
保存后退出。
確保系統登錄時加載limits.conf
中的限制,需修改PAM配置:
sudo vim /etc/pam.d/login
添加以下行(若已存在則無需重復添加):
session required pam_limits.so
為用戶設置Oracle環境變量,包括安裝目錄、SID及資源限制:
sudo su - oracle
vim ~/.bash_profile
添加以下內容(根據實際安裝路徑調整):
# Oracle環境變量
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
# 資源限制(可選,補充limits.conf的設置)
ulimit -n 65536 # 文件描述符數(硬限制)
ulimit -u 16384 # 進程數(硬限制)
保存后使配置生效:
source ~/.bash_profile
Oracle需要專用目錄存儲數據文件、日志等,需創建目錄并賦予權限:
sudo mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
sudo mkdir -p /u01/app/oracle/oradata
sudo chown -R oracle:oinstall /u01/app/oracle
sudo chmod -R 775 /u01/app/oracle
若需更細粒度的數據庫資源控制(如會話并發數、CPU時間),可通過PROFILE
對象實現:
-- 登錄Oracle數據庫(以sysdba身份)
sqlplus / as sysdba
-- 查看默認profile的資源限制
SELECT * FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_type = 'KERNEL';
-- 修改默認profile的資源限制(示例:限制每個用戶的并發會話數為10)
ALTER PROFILE DEFAULT LIMIT SESSIONS_PER_USER 10;
-- 限制單個會話的CPU時間為1000百分之一秒(10秒)
ALTER PROFILE DEFAULT LIMIT CPU_PER_SESSION 1000;
-- 限制會話空閑時間為30分鐘
ALTER PROFILE DEFAULT LIMIT IDLE_TIME 30;
-- 啟用資源限制(若未啟用)
ALTER SYSTEM SET RESOURCE_LIMIT = TRUE SCOPE=SPFILE;
修改后需重啟數據庫使配置生效:
sudo systemctl restart oracle
以上步驟覆蓋了Ubuntu系統中Oracle資源限制的主要配置項,包括系統內核、用戶級限制及數據庫級控制,可根據實際需求調整參數值。