1、共享内存检查
clear
stty -echo
MEMTOTAL=$(free -b | sed -n '2p' | awk '{print $2}')
MEMLOCK=`cat /etc/security/limits.conf|grep 'soft memlock'|tr -cd "[0-9]"`
SHMMAX=`cat /etc/sysctl.conf|egrep 'shmmax|SHMMAX'|grep -v "#"|tr -cd "[0-9]"`
SHMALL=`cat /etc/sysctl.conf|egrep 'shmall|SHMALL'|grep -v "#"|tr -cd "[0-9]"`
PAGESIZE=$(getconf PAGE_SIZE)
shmmni=`cat /etc/sysctl.conf|egrep 'shmmni|SHMMNI'|grep -v "#"|tr -cd "[0-9]"`
HugePages=`cat /proc/meminfo|grep HugePages_Total|tr -cd "[0-9]"`
let "MEMTOTAL_GB=$MEMTOTAL/1024/1024/1024"
###############################################
if [[ -z $MEMLOCK ]];then MEMLOCK=0; fi
let "MEMLOCK_GB=$MEMLOCK/1024/1024"
let "set_memlock_Kb=$MEMTOTAL/10*9/1024"
let "set_memlock_GB=$set_memlock_Kb/1024/1024"
###############################################
let "SHMMAX_GB=$SHMMAX/1024/1024/1024"
let "set_shmmax_B=$MEMTOTAL/10*9"
let "set_shmmax_GB=$set_shmmax_B/1024/1024/1024"
###############################################
let "SHMALL_GB=$SHMALL*$PAGESIZE/1024/1024/1024"
let "set_shmall_page=$set_shmmax_B / $PAGESIZE "
let "set_shmall_GB=$set_shmall_page*$PAGESIZE/1024/1024/1024"
###############################################
let "HugePagesGB=$HugePages*2048/1024/1024"
clear
echo "
内存 > memlock > SHMMAX > SHMALL > Hugepages > SGA总和
shmmax:为共享内存大小可以为主机内存的80%
shmall:是共享内存页数
内存限制:soft memlock hard memlock "
echo "
---------------------------------------------------
MEMTOTAL : $MEMTOTAL_GB GB $MEMTOTAL Bytes
---------------------------------------------------
MEMLOCK : $MEMLOCK_GB GB $MEMLOCK Kb
set_memlock : $set_memlock_GB GB $set_memlock_Kb Kb
---------------------------------------------------
SHMMAX : $SHMMAX_GB GB $SHMMAX Bytes
set_shmmax : $set_shmmax_GB GB $set_shmmax_B Bytes
---------------------------------------------------
SHMALL : $SHMALL_GB GB $SHMALL 页
set_shmall : $set_shmall_GB GB $set_shmall_page 页
---------------------------------------------------
HugePages : $HugePagesGB GB $HugePages 块
SHMMNI : $shmmni Bytes
--------------------------------------------------- "|awk '{printf "%-12s%-2s%-6s%-6s%-20s%-6s\n", $1,$2,$3,$4,$5,$6}' && cat /proc/meminfo|grep -E 'AnonHugePages|HugePages_Total|HugePages_Free|HugePages_Rsvd|HugePages_Surp|Hugepagesize'|awk '{printf "%-20s%-10s%-6s\n", $1,$2,$3}' && echo -e "\nswappiness: "$A1 "\ndirty_ratio: "$A2 "\ndirty_background_ratio: "$A3 "\ndirty_expire_centisecs: "$A4 "\nvfs_cache_pressure: "$A5|awk '{printf "%-25s%-10s\n",$1,$2}'
stty echo
2、系统参数配置(sysctl.conf、limits.conf)
clear
cp /etc/security/limits.conf /etc/security/limits.conf_`date +"%Y%m%d-%H%M%S"`
sed -i /^#/d /etc/security/limits.conf
sed -i /^$/d /etc/security/limits.conf
sed -i "s@oracle@#oracle@g" /etc/security/limits.conf
sed -i "s@grid@#grid@g" /etc/security/limits.conf
sed -i '/oracle soft nproc /d' /etc/security/limits.conf
sed -i '/oracle hard nproc /d' /etc/security/limits.conf
sed -i '/oracle soft nofile/d' /etc/security/limits.conf
sed -i '/oracle hard nofile/d' /etc/security/limits.conf
sed -i '/grid soft nproc /d' /etc/security/limits.conf
sed -i '/grid hard nproc /d' /etc/security/limits.conf
sed -i '/grid soft nofile/d' /etc/security/limits.conf
sed -i '/grid hard nofile/d' /etc/security/limits.conf
sed -i '/soft memlock/d' /etc/security/limits.conf
sed -i '/hard memlock/d' /etc/security/limits.conf
MEMTOTAL=$(free -b | sed -n '2p' | awk '{print $2}')
let "memlock2=$MEMTOTAL/100*90/1024"
echo -e "
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 65536
oracle hard nofile 65536
grid soft nproc 16384
grid hard nproc 16384
grid soft nofile 65536
grid hard nofile 65536
oracle soft memlock $memlock2
oracle hard memlock $memlock2 ">>/etc/security/limits.conf
cp /etc/pam.d/login /etc/pam.d/login.`date +"%Y%m%d-%H%M%S"` && sed -i "s@session required@#session required@g" /etc/pam.d/login
echo -e "\nsession required /lib64/security/pam_limits.so \nsession required pam_limits.so" >>/etc/pam.d/login
cp /etc/profile /etc/profile.`date +"%Y%m%d-%H%M%S"`
echo -e '\nif [ $USER = "oracle" ]||[ $USER = "grid" ]; then \nif [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi' >> /etc/profile
cp /etc/sysctl.conf /etc/sysctl.conf_`date +"%Y%m%d-%H%M%S"`
sed -i /^#/d /etc/sysctl.conf
sed -i /^$/d /etc/sysctl.conf
sed -i '/kernel.shmmni/d' /etc/sysctl.conf
sed -i '/kernel.shmall/d' /etc/sysctl.conf
sed -i '/kernel.shmmax/d' /etc/sysctl.conf
sed -i '/fs.aio-max-nr/d' /etc/sysctl.conf
sed -i '/fs.file-max/d' /etc/sysctl.conf
sed -i '/kernel.sem/d' /etc/sysctl.conf
sed -i '/ip_local_port_range/d' /etc/sysctl.conf
sed -i '/net.core.rmem_default/d' /etc/sysctl.conf
sed -i '/net.core.rmem_max/d' /etc/sysctl.conf
sed -i '/net.core.wmem_default/d' /etc/sysctl.conf
sed -i '/net.core.wmem_max/d' /etc/sysctl.conf
sed -i '/vm.swappiness/d' /etc/sysctl.conf
sed -i '/vm.dirty_ratio/d' /etc/sysctl.conf
sed -i '/vm.dirty_background_ratio/d' /etc/sysctl.conf
sed -i '/vm.dirty_expire_centisecs/d' /etc/sysctl.conf
sed -i '/vm.vfs_cache_pressure/d' /etc/sysctl.conf
sed -i '/vm.zone_reclaim_mode/d' /etc/sysctl.conf
sed -i '/vm.min_free_kbytes/d' /etc/sysctl.conf
MEMTOTAL=$(free -b | sed -n '2p' | awk '{print $2}')
SHMMAX=$(expr $MEMTOTAL / 10 \\* 9 )
SHMMNI=`cat /etc/sysctl.conf|egrep 'shmmni|SHMMNI'|grep -v "#"|tr -cd "[0-9]"`
PAGESIZE=$(getconf PAGE_SIZE)
let "SHMALL=$SHMMAX / $PAGESIZE "
echo -e "\nfs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni=4096
kernel.shmmax=$SHMMAX
kernel.shmall=$SHMALL
kernel.sem=800 640000 400 800
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
#vm-config
vm.swappiness=10
vm.dirty_ratio=10
vm.dirty_background_ratio=5
vm.dirty_expire_centisecs=3000
vm.vfs_cache_pressure=500
vm.zone_reclaim_mode = 0
vm.min_free_kbytes = 1048576 ">> /etc/sysctl.conf && sysctl -p
3、Oracle软件安装(单实例)
#!/bin/bash
if [ ! -d /home/oracle/response ];then
mkdir -p /home/oracle/response
fi
echo "oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME="$(hostname)"
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/app/oracle/oraInventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/app/oracle/product/11.2.0/dbhome_1
ORACLE_BASE=/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.EEOptionsSelection=false
oracle.install.db.optionalComponents=
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oper
oracle.install.db.CLUSTER_NODES=
oracle.install.db.isRACOneInstall=false
oracle.install.db.racOneServiceName=
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=
oracle.install.db.config.starterdb.SID=
oracle.install.db.config.starterdb.characterSet=
oracle.install.db.config.starterdb.memoryOption=false
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.enableSecuritySettings=true
oracle.install.db.config.starterdb.password.ALL=
oracle.install.db.config.starterdb.password.SYS=
oracle.install.db.config.starterdb.password.SYSTEM=
oracle.install.db.config.starterdb.password.SYSMAN=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.control=DB_CONTROL
oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.automatedBackup.osuid=
oracle.install.db.config.starterdb.automatedBackup.ospwd=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
MYORACLESUPPORT_USERNAME=
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=
PROXY_REALM=
COLLECTOR_SUPPORTHUB_URL=
oracle.installer.autoupdates.option=SKIP_UPDATES
oracle.installer.autoupdates.downloadUpdatesLoc=
AUTOUPDATES_MYORACLESUPPORT_USERNAME=">/home/oracle/response/db_install.rsp
cd /software/oracle11G/database || exit
./runInstaller -silent -responseFile /home/oracle/response/db_install.rsp -ignorePrereq
4、Database安装
SYS与SYSTEM同密码,随机生成,剔除 OoIiLl 字符,可在/home/oracle/response/dbca.rsp中查看。
#!/bin/bash
cd /home/oracle/response/ ||exit
echo -n "清输入数据库实例名:"
read DBNAME
echo -n "清输入数据文件目录:"
read DBFILEPATH
MEMTOTAL=$(free -m | sed -n '2p' | awk '{print $2}')
RANDOMPASSWORD=$(head /dev/urandom | tr -dc A-Za-z0-9 |tr -d 'OoIiLl'| head -c 15)
echo "[GENERAL]
RESPONSEFILE_VERSION = \"11.2.0\"
OPERATION_TYPE = \"createDatabase\"
[CREATEDATABASE]
GDBNAME = \"$DBNAME\"
SID = \"$DBNAME\"
TEMPLATENAME = \"General_Purpose.dbc\"
SYSPASSWORD = \"$RANDOMPASSWORD\"
SYSTEMPASSWORD = \"$RANDOMPASSWORD\"
DATAFILEDESTINATION =$DBFILEPATH
CHARACTERSET = \"AL32UTF8\"
NATIONALCHARACTERSET=\"AL16UTF16\"
TOTALMEMORY = \"$MEMTOTAL\"">/home/oracle/response/dbca.rsp
$ORACLE_HOME/bin/dbca -silent -responseFile /home/oracle/response/dbca.rsp
clear && echo " 数据库 "$DBNAME" 已安装完成!"
5、内存、memlock、SHMMAX、SHMALL、Hugepages、SGA说明
=================================================================================
|Oracle官方文档推荐: |
|MEMORY_TARGET=物理内存 x 80% |
|MEMORY_MAX_SIZE=物理内存 x 80% |
|==============================================================================|
|对于OLTP(联机事务处理)系统: |对于DSS(数据集)\OLAP系统: |
|--------------------------------------|--------------------------------------|
|SGA_TARGET=(物理内存x80%)x80% |SGA_TARGET=(物理内存x80%)x50% |
|SGA_MAX_SIZE=(物理内存x80%)x80% |SGA_MAX_SIZE=(物理内存x80%)x50% |
|PGA_AGGREGATE_TARGET=(物理内存x80%)x20%|PGA_AGGREGATE_TARGET=(物理内存x80%)x50%|
|================================================================================
AMM 自动内存管理(Automatic Memory Management)时:
memory_max_target 的设置不能超过 /dev/shm 的大小,不指定 memory_max_size,sga_max_size,则 memory_max_size = sga_max_size = memory_target
========================================================== ============================================= =============================================
| 情况一 | 参数值 | 内存分配值 | | 情况二 | 参数值 | 内存分配值 | | 情况三 | 参数值 | 内存分配值 |
|--------------------+--------+--------------------------| |---------------------+--------+------------| |---------------------+--------+------------|
|memory_target |1024M |1024M | |memory_target |1024M |1024M | |memory_target |1024M |1024M |
|sga_max_size |not set |1024M | |sga_max_size |not set |1024M | |sga_max_size |500M |500M |
|sga_target |not set |612M(60% of memory_target)| |sga_target |300M |300M | |sga_target |300M |300M |
|pga_aggergate_target|not set |412M(40% of memory_target)| |pga_aggergate_target |100M |724M | |pga_aggergate_target |100M |724M |
========================================================== ============================================= =============================================
=================================================================================================================================================
| 配置AMM(Automatic Memory Management,自动内存管理) | 配置ASMM(Automatic Shared Memory Management,自动共享内存管理)(支持HugePage) |
|---------------------------------------------------------------+-------------------------------------------------------------------------------|
|1.设置参数 lock_sga 为 false(默认为 false). |1.确保参数 statistics_level 为 typical(默认值)或 all. |
| | (注意:该参数一般情况下设置为 typical) |
|2.设置参数 memory_target、memory_max_target 的值为非0. |2.设置参数 memory_target、memory_max_target 的值为0. |
| 不指定 memory_max_target 时(默认值为 memory_target) | 不指定 memory_max_target 时(默认值为 memory_target) |
|3.设置参数 sga_target、pga_aggregate_target 的值为0. |3.设置参数 sga_max_size、sga_target 为非0值. |
|---------------------------------------------------------------+-------------------------------------------------------------------------------|
|--alter system set memory_max_target=1024m scope=spfile; |--alter system set memory_max_target=0 scope=spfile; |
|----重启数据库 |----重启数据库 |
|--alter system set memory_target=392m scope=spfile; |--alter system set memory_target=0 scope=spfile; |
|--alter system set sga_target=0 scope=spfile; |--alter system set sga_target=992m scope=spfile; |
|--alter system set pga_aggregate_target=0 scope=spfile; | |
| | |
|提示ORA-00845: MEMORY_TARGET not supported on this system |注意:内存 > memlock > SHMMAX > SHMALL > Hugepages > SGA总和 |
|修改/dev/shm的值,至少需要大于数据库参数MEMORY_MAX_TARGET的值 | |
=================================================================================================================================================