跳过正文

Oracle 19c 单机静默安装实战:CentOS 7 环境

Greatfinish
作者
Greatfinish
记录 Oracle、PostgreSQL、达梦、Linux、存储与生产环境故障处理经验。

安装介质
#

操作系统包

compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

oracle安装介质

LINUX.X64_193000_db_home.zip

补丁

p6880880_190000_Linux-x86-64.zip

p37260974_190000_Linux-x86-64.zip

p37102264_190000_Linux-x86-64.zip

操作系统设置
#

关闭防火墙
#

systemctl stop firewalld.service
systemctl disable firewalld.service
firewall-cmd --state

关闭selinux
#

setenforce 0
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
sestatus

配置Yum源
#

有网络的条件配置清华源

sed -e "s|^mirrorlist=|#mirrorlist=|g" \
    -e "s|^#baseurl=http://mirror.centos.org/centos/\$releasever|baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009|g" \
    -e "s|^#baseurl=http://mirror.centos.org/\$contentdir/\$releasever|baseurl=http://mirrors.tuna.tsinghua.edu.cn/centos-vault/7.9.2009|g" \
    -i.bak \
    /etc/yum.repos.d/CentOS-*.repo

没有网络的,配置本地源

mount -o loop /tmp/CentOS-7-x86_64-DVD-2207-02.iso /mnt
cat >> /etc/yum.repos.d/local.repo << "EOF"
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
enabled=1

EOF
yum clean all
yum makecache

安装依赖包
#

yum install -y bc \
binutils \
compat-libcap1 \
compat-libstdc++-33 \
gcc \
gcc-c++ \
elfutils-libelf \
elfutils-libelf-devel \
glibc \
glibc-devel \
ksh \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
libxcb \
libX11 \
libXau \
libXi \
libXtst \
libXrender \
libXrender-devel \
make \
net-tools \
nfs-utils \
smartmontools \
sysstat \
e2fsprogs \
e2fsprogs-libs \
fontconfig-devel \
expect \
unzip \
openssh-clients \
readline* \
psmisc --skip-broken
rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

配置hosts文件
#

hostnamectl set-hostname oracle19c
cat >> /etc/hosts << "EOF"

192.168.17.26    oracle19c

EOF

配置sysctl.conf
#

cat >> /etc/sysctl.conf << "EOF"

##shmmal's Calculation formula: physical memory 8G:(8*1024*1024*1024)/4096=2097152
##shmmax's Calculation formula: physical memory 8G:(8/2)*1024*1024*1024 -1=4294967295

fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500

EOF
/sbin/sysctl -p

配置limits.conf和pam.d
#

cat >> /etc/security/limits.conf << "EOF"

oracle   soft   nofile    1024
oracle   hard   nofile    65536
oracle   soft   nproc    16384
oracle   hard   nproc    16384
oracle   soft   stack    10240
oracle   hard   stack    32768
oracle   hard   memlock    134217728
oracle   soft   memlock    134217728

EOF

cat >> /etc/pam.d/login << "EOF"
session    required     pam_limits.so
session    required     /lib64/security/pam_limits.so
EOF

配置 avahi-deamon
#

systemctl stop avahi-daemon.socket
systemctl stop avahi-daemon.service
systemctl disable avahi-daemon.service
systemctl disable avahi-daemon.socket

##关闭 NOZEROCONF
cat <<EOF >>/etc/sysconfig/network
NOZEROCONF=yes
EOF

关闭透明大页和 numa
#

sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg

cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
vi /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
chmod +x /etc/rc.d/rc.local

创建用户
#

/usr/sbin/groupadd -g 54321 oinstall
/usr/sbin/groupadd -g 54322 dba
/usr/sbin/groupadd -g 54323 oper
/usr/sbin/groupadd -g 54324 backupdba
/usr/sbin/groupadd -g 54325 dgdba
/usr/sbin/groupadd -g 54326 kmdba
/usr/sbin/groupadd -g 54330 racdba
/usr/sbin/useradd -u 54321 -g oinstall -G dba,backupdba,dgdba,kmdba,racdba,oper oracle
echo "oracle"|passwd --stdin oracle
id oracle

创建目录
#

mkdir -p /u01/app/oracle/product/19.3.0/db_1
chown -R oracle:oinstall /u01
chmod -R 775 /u01

安装Oracle软件
#

环境变量设置
#

su - oracle
cat >> /home/oracle/.bash_profile << "EOF"

#Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_HOSTNAME=oracle19c; export ORACLE_HOSTNAME
ORACLE_UNQNAME=orcl; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/19.3.0/db_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH
export PATH=$PATH:$ORACLE_HOME/OPatch
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"


LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

if [ $USER = "oracle" ]; then
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
  else
    ulimit -u 16384 -n 65536
  fi
fi

EOF

安装Oracle软件
#

软件上传解压
#

chown -R oracle.oinstall /soft
su - oracle
cd /soft
unzip -q LINUX.X64_193000_db_home.zip -d $ORACLE_HOME

配置响应文件
#

cat >> /soft/db_install.rsp << "EOF"
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=racdba
oracle.install.db.rootconfig.executeRootScript=false
oracle.install.db.rootconfig.configMethod=
EOF

解压OPatch和(DB Release Updates)RU补丁包
#

cd /soft
unzip -o -q /soft/p6880880_190000_Linux-x86-64.zip -d $ORACLE_HOME
unzip -q p37260974_190000_Linux-x86-64.zip

静默安装 Oracle 软件
#

cd $ORACLE_HOME
./runInstaller -silent -force -responseFile /soft/db_install.rsp -ignorePrereq -waitForCompletion -applyRU /soft/37260974

安装完后需要切换到 root 用户下执行以下 root.sh 脚本

/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/19.3.0/db_1/root.sh

静默创建监听
#

netca -silent -responsefile /u01/app/oracle/product/19.3.0/db_1/assistants/netca/netca.rsp

静默创建数据库实例
#

dbca -silent -ignorePreReqs  -ignorePrereqFailure  -createDatabase \
-templateName General_Purpose.dbc -responseFile NO_VALUE \
-databaseConfigType SINGLE \
-gdbname orcl -sid orcl \
-createAsContainerDatabase FALSE \
-sysPassword oracle -systemPassword oracle -dbsnmpPassword oracle \
-datafileDestination '/u01/app/oracle/oradata' -recoveryAreaDestination '/u01/app/oracle/flash_recovery_area' \
-storageType FS \
-characterset ZHS16GBK -nationalCharacterSet AL16UTF16 \
-sampleSchema true \
-totalMemory 2048 \
-redoLogFileSize 1024 \
-databaseType OLTP \
-emConfiguration NONE

最佳参数实践
#

注意:参数最佳实践适用于 12c 及以上版本,个别参数在 11g 中可能没有;另外每个公司均有自己生产实践过的参数,以下仅供参考
alter system  set db_files=2048 scope=spfile sid='*';
alter system  set event='10949 trace name context forever,level 1','28401 trace name context forever,level 1','10503 trace name context forever, level 4000' scope=spfile sid='*';
alter system  set parallel_degree_policy=manual scope=spfile sid='*';
alter system  set parallel_force_local=TRUE scope=spfile sid='*';
alter system  set parallel_max_servers=128   scope=spfile sid='*';
alter system  set audit_trail=none scope=spfile sid='*';
alter system  set deferred_segment_creation=false   scope=spfile sid='*';
alter system  set archive_lag_target=1800 scope=spfile sid='*';
alter system  set db_block_checking=MEDIUM  scope=spfile sid='*';
alter system  set db_block_checksum=FULL scope=spfile sid='*';
alter system  set db_lost_write_protect=TYPICAL scope=spfile sid='*';
alter system  set db_writer_processes=8  scope=spfile sid='*';
alter system  set enable_ddl_logging=true scope=spfile sid='*';     
alter system  set max_dump_file_size=102400000 scope=spfile sid='*';
alter system  set max_idle_blocker_time=15 scope=spfile sid='*';
alter system  set optimizer_adaptive_plans=false scope=spfile sid='*';
alter system  set optimizer_adaptive_statistics=false scope=spfile sid='*';
alter system  set undo_retention=86400   scope=spfile sid='*';
alter system  set processes=6000 scope=spfile sid='*';
alter system  set control_file_record_keep_time=60  scope=spfile sid='*';

alter system  set "_optim_peek_user_binds"=FALSE scope=spfile sid='*';
alter system  set  "_cursor_obsolete_threshold"=100 scope=spfile sid='*';
alter system  set "_px_use_large_pool" = true scope=spfile sid='*';
alter system  set "_clusterwide_global_transactions" = false scope=spfile sid='*';
alter system  set "_rollback_segment_count"=500 scope=spfile sid='*';
alter system  set "_cleanup_rollback_entries" = 10000 scope=spfile sid='*';
alter system  set "_optimizer_use_feedback" = false  scope=spfile sid='*';
alter system  set "_undo_autotune" = false scope=spfile sid='*';
alter system  set "_ash_size" = 254M scope=spfile sid='*';
alter system  set "_optimizer_extended_cursor_sharing_rel"=none scope=spfile sid='*';
alter system  set "_optimizer_extended_cursor_sharing"=none scope=spfile sid='*';
alter system  set "_optimizer_adaptive_cursor_sharing"=false scope=spfile sid='*';
alter system  set "_gc_policy_time"=0 scope=spfile;
alter system  set "_gc_undo_affinity"=FALSE scope=spfile;
--close inmemory
alter system set inmemory_size=0 scope=spfile;
alter system set inmemory_query=disable scope=spfile;

----内存参数调整参考
alter system set sga_max_size=40G scope=spfile;
alter system set db_cache_size=25G scope=spfile;
alter system set shared_pool_size=8G scope=spfile;
alter system set java_pool_size=1G scope=spfile;
alter system set large_pool_size=1G scope=spfile;
alter system set pga_aggregate_target=10G scope=spfile;
alter system set pga_aggregate_limit=20G scope=spfile sid='*';
--------------------------------------------------------

ALTER PROFILE DEFAULT limit FAILED_LOGIN_ATTEMPTS UNLIMITED  PASSWORD_LIFE_TIME UNLIMITED;
exec dbms_workload_repository.modify_snapshot_settings(interval=>30,retention=>40*24*60);

BEGIN
 DBMS_AUTO_TASK_ADMIN.disable(
 client_name => 'auto space advisor',
 operation => NULL,
 window_name => NULL);
END;
/

BEGIN
 DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'sql tuning advisor',
 operation => NULL,
 window_name => NULL);
END;
/ 

select client_name,status from DBA_AUTOTASK_CLIENT;

exec dbms_scheduler.disable('ORACLE_OCM.MGMT_CONFIG_JOB');
exec dbms_scheduler.disable('ORACLE_OCM.MGMT_STATS_CONFIG_JOB');

select JOB_NAME, ENABLED, STATE from dba_scheduler_jobs where owner = 'ORACLE_OCM';