Oracle静默安装脚本(单实例)

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的值      |                                                                               |
=================================================================================================================================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楚枫默寒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值