暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

RHEL8.2搭建Oracle19c单实例数据库

DBA管家 2022-02-12
937



本文适用于Oracle 19c on CentOS,Oracle Linux8, Redhat8


环境说明

主机名OracleDB NAMEOS
DBAPRD19.3.0.0DBADGRHEL8.2

环境配置

# 配置RHEL8仓库<确保可上外网>
curl -o etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' etc/yum.repos.d/CentOS-Base.repo

#
安装epel并替换成阿里云
dnf install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*

sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*



#
安装必备软件包
#dnf -y install sysstat compat-libcap1 ksh libaio-devel \
net-tools gblic gblic-devel binutils compat-libstdc libxcb libX11 libXau libXi libXtst \
unzip make gcc gcc-c++ compat-libcap1 compat-libstdc elfutils-libelf \
net-tools unixODBC smartmontools yum install compat-libstdc++-33 \
libnsl libnsl.i686 libnsl2 libnsl2.i686


#
或者使用如下
rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n' sysstat compat-libcap1 ksh libaio-devel net-tools gblic gblic-devel binutils compat-libstdc libxcb libX11 libXau libXi libXtst unzip make gcc gcc-c++ compat-libcap1 compat-libstdc elfutils-libelf net-tools unixODBC smartmontools compat-libstdc++-33 | grep -i "not installed" | awk '{print $2}'|xargs dnf -y install


#
也可以安装官方预安装包<与余下全文无冲突>
#curl -o oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL8/appstream/x86_64/getPackage/oracle-database-preinstall-19c-1.0-2.el8.x86_64.rpm


#
创建目录,用户以及组
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54330 racdba
useradd -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba,racdba -u 54321 oracle

echo "redhat" | passwd --stdin oracle
mkdir -p /u01/app/oracle/product/19c/db_1
chown -R oracle:oinstall /u01/app/oracle/product/19c/db_1

#
绑定指定网卡作为流量入口<不理解,对于单实例可以直接忽略,别设置!>
#cat /etc/sysconfig/network
#NETWORKING=yes
#HOSTNAME=DBAPRD
#GATEWAYDEV=ens32
#GATEWAY=182.1111.11.11
#NOZEROCONF=yes


#
配置NOZEROCONF
cat >>/etc/sysconfig/network<<EOF
NOZEROCONF=yes
EOF


#
修改全局登录配置
cat >>/etc/pam.d/login<<EOF
#ORACLE SETTING
session required pam_limits.so
EOF



#
关闭透明大页
cp -f /etc/default/grub{,.midwacsbak}

sed -i 's/quiet/quiet transparent_hugepage=never numa=off/' /etc/default/grub

grub2-mkconfig -o /boot/grub2/grub.cfg


#
配置内存,这个size可以填大些
cp /etc/fstab /etc/fstab_`date +"%Y%m%d_%H%M%S"`
echo "tmpfs /dev/shm tmpfs rw,exec,size=8G 0 0">>/etc/fstab
mount -o remount /dev/shm


#
配置LoginGraceTime参数为0, 将timeout wait设置为无限制
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_`date +"%Y%m%d_%H%M%S"` && sed -i '/#LoginGraceTime 2m/ s/#LoginGraceTime 2m/LoginGraceTime 0/' /etc/ssh/sshd_config && grep LoginGraceTime /etc/ssh/sshd_config
--加快SSH登陆速度,禁用DNS
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_`date +"%Y%m%d_%H%M%S"` && sed -i '/#UseDNS yes/ s/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config && grep UseDNS /etc/ssh/sshd_config



#
关闭selinux以及防火墙
if [[ "$(getenforce)" = "Enforcing" ]]; then
cp /etc/selinux/config /etc/selinux/config_$(date +%Y%m%d)
setenforce 0
# sed -i "/^SELINUX=enforcing/c\#SELINUX=enforcing\nSELINUX=disable" /etc/selinux/config
sed -i "/^SELINUX=enforcing/a\SELINUX=disable" /etc/selinux/config
fi

if [[ "$(ps -ef |grep -v grep|grep -ci firewalld)" = "1" ]]; then
systemctl stop firewalld
systemctl disable firewalld
fi

#
配置PAM
cp /etc/pam.d/login{,_$(date +%Y%m%d)}
echo "session required pam_limits.so" >> /etc/pam.d/login

#
禁用 avahi-daemon服务
systemctl stop avahi-daemon

systemctl disable avahi-daemon


#
配置系统资源限制
<此处如果使用如下脚本,那么系统在运行一段时间增加内存时,需要对应修改oracle以及gridmemlock>
# the value of size in Kb

MEMTOTAL=$(grep MemTotal /proc/meminfo|awk '{print $2}')
MEMLOCK=$(( MEMTOTAL * 9/10 ))
cat > /etc/security/limits.d/99-grid-oracle-limits.conf << EOF
oracle soft nproc 16384 #Ora bug 15971421
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
# setting for memlock hard limit is maximum of 128GB on x86_64 or 3GB on x86 OR 90 % of RAM
oracle soft memlock ${MEMLOCK}
oracle hard memlock ${MEMLOCK}
grid soft nproc 16384 #Ora bug 15971421
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
grid hard stack 32768
grid soft memlock ${MEMLOCK}
grid hard memlock ${MEMLOCK}
EOF

#
配置系统内核参数
# the value of size in Kb
cat > /etc/sysctl.d/97-oracle-sysctl.conf << EOF
# -- The number of asynchronous IO requests at the same time(as per Note 579108.1),for example 1048576 = 1024 * 1024
fs.aio-max-nr = 3145728
fs.file-max = 6815744
# is maximum of sga in bytes
kernel.shmmax = 4398046511104
kernel.shmall = 1073741824
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
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
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
kernel.panic_on_oops = 1
vm.min_free_kbytes = 524288
EOF

#
配置oracle环境变量
cat >> /home/oracle/.bash_profile << "EOF"
umask 022
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19c/db_1
export ORACLE_SID=DBA19PRD
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=/usr/sbin:/usr/local/bin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
alias dba='sqlplus / as sysdba'
EOF

#
######### 环境配置<完> #############



数据库软件以及DB创建

# 数据库软件安装响应文件
# cat>> dbsw_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_HOME=/u01/app/oracle/product/19c/db_1
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.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.memoryOption=false
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.managementOption=DEFAULT
oracle.install.db.config.starterdb.omsPort=0

EOF

#
静默安装数据库软件
export CV_ASSUME_DISTID=OL7
$ORACLE_HOME/runInstaller -silent -force -noconfig -ignorePrereq -responseFile $ORACLE_HOME/dbsw_install.rsp

#
数据库软件安装成功后,切换成root执行
su -
bash /u01/app/oraInventory/orainstRoot.sh
bash /u01/app/oracle/product/19c/db_1/root.sh


#
监听响应文件
cat >> db_netca.rsp<<EOF

[GENERAL]
RESPONSEFILE_VERSION="19.3"
CREATE_TYPE="CUSTOM"
[oracle.net.ca]
INSTALLED_COMPONENTS={"server","net8","javavm"}
INSTALL_TYPE=""typical""
LISTENER_NUMBER=1
LISTENER_NAMES={"LISTENER"}
LISTENER_PROTOCOLS={"TCP;1529"}
LISTENER_START=""LISTENER""
NAMING_METHODS={"TNSNAMES","ONAMES","HOSTNAME"}
NSN_NUMBER=1
NSN_NAMES={"EXTPROC_CONNECTION_DATA"}
NSN_SERVICE={"PLSExtProc"}
NSN_PROTOCOLS={"TCP;HOSTNAME;1529"}

EOF


#
静默配置监听
$netca -silent -responsefile $ORACLE_HOME/db_netca.rsp


#
安装数据库响应文件
# echo >dbca_install.rsp
cat >> dbca_install.rsp<<EOF
responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v12.2.0
gdbName=DBADG
sid=DBADG
databaseConfigType=SI
policyManaged=false
createServerPool=false
force=false
createAsContainerDatabase=true
numberOfPDBs=1
pdbName=PDB_DBADG
useLocalUndoForPDBs=true
templateName=/u01/app/oracle/product/19c/db_1/assistants/dbca/templates/General_Purpose.dbc
sysPassword=redhat
systemPassword=redhat
serviceUserPassword=redhat
pdbAdminPassword=redhat
sysPassword=redhat
systemPassword=redhat
emExpressPort=5500
runCVUChecks=FALSE
dvConfiguration=false
olsConfiguration=false
datafileJarLocation={ORACLE_HOME}/assistants/dbca/templates/
datafileDestination={ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}/
recoveryAreaDestination={ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME}
storageType=FS
characterSet=AL32UTF8
nationalCharacterSet=AL16UTF16
registerWithDirService=false
listeners=LISTENER_{DB_UNIQUE_NAME}
variables=ORACLE_BASE_HOME=/u01/app/oracle/product/19c/db_1,DB_UNIQUE_NAME=DBADGPRD,ORACLE_BASE=/u01/app,PDB_NAME=,DB_NAME=DBADG,ORACLE_HOME=/u01/app/oracle/product/19c/db_1,SID=DBADG
initParams=undo_tablespace=UNDOTBS1,db_block_size=8192BYTES,nls_language=AMERICAN,dispatchers=(PROTOCOL=TCP) (SERVICE=DBADGXDB),diagnostic_dest={ORACLE_BASE},control_files=("{ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}/control01.ctl", "{ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME}/control02.ctl"),remote_login_passwordfile=EXCLUSIVE,audit_file_dest={ORACLE_BASE}/admin/{DB_UNIQUE_NAME}/adump,processes=300,nls_territory=AMERICA,local_listener=LISTENER_DBADG,memory_target=1574MB,db_recovery_file_dest_size=12732MB,open_cursors=300,log_archive_format=%t_%s_%r.dbf,compatible=19.0.0,db_name=DBADG,db_recovery_file_dest={ORACLE_BASE}/fast_recovery_area/{DB_UNIQUE_NAME},audit_trail=db
sampleSchema=false
memoryPercentage=40
databaseType=MULTIPURPOSE
automaticMemoryManagement=true
totalMemory=2048
EOF

#
静默安装数据库
export CV_ASSUME_DISTID=OL7
export _JAVA_OPTIONS="-Djava.io.tmpdir=/tmp"

dbca -silent -createDatabase -responseFile $ORACLE_HOME/dbca_install.rsp



DB随系统启动脚本

单实例的Oracle,需要手工配置自动启停数据库

# 首先修改
cat /etc/oratab
N改成Y

mkdir /home/oracle/scripts

cat > /home/oracle/scripts/setEnv.sh <<EOF
# Oracle Settings
export TMP=/tmp
export TMPDIR=\$TMP

export ORACLE_HOSTNAME=youhostname
export ORACLE_UNQNAME=DBADG
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/19c/db_1
export ORACLE_SID=DBADG

export PATH=/usr/sbin:/usr/local/bin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$PATH

export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
EOF


echo ". /home/oracle/scripts/setEnv.sh" >> /home/oracle/.bash_profile


cat > /home/oracle/scripts/start_all.sh <<EOF
#!/bin/bash
. /home/oracle/scripts/setEnv.sh

export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

dbstart \$ORACLE_HOME
EOF


cat > /home/oracle/scripts/stop_all.sh <<EOF
#!/bin/bash
. /home/oracle/scripts/setEnv.sh

export ORAENV_ASK=NO
. oraenv
export ORAENV_ASK=YES

dbshut \$ORACLE_HOME
EOF

chown -R oracle.oinstall /home/oracle/scripts
chmod u+x /home/oracle/scripts/*.sh

#
测试脚本
$ ~/scripts/start_all.sh
$ ~/scripts/stop_all.sh

#
创建systemd
cat >> /etc/systemd/system/dbora.service <<EOF
[Unit]
Description=The Oracle Database Service
After=syslog.target network.target

[Service]
# systemd ignores PAM limits, so set any necessary limits in the service.
# Not really a bug, but a feature.
LimitMEMLOCK=infinity
LimitNOFILE=65535

#
Type=simple
# idle: similar to simple, the actual execution of the service binary is delayed
# until all jobs are finished, which avoids mixing the status output with shell output of services.
RemainAfterExit=yes
User=oracle
Group=oinstall
Restart=no
ExecStart=/bin/bash -c '/home/oracle/scripts/start_all.sh'
ExecStop=/bin/bash -c '/home/oracle/scripts/stop_all.sh'

[Install]
WantedBy=multi-user.target
EOF

#
测试systemd脚本
systemctl daemon-reload
systemctl start dbora.service
systemctl stop dbora.service
systemctl start dbora.service
systemctl status dbora.service


#
################## 完 #######################



B站视频地址:

https://www.bilibili.com/video/BV1jV411S77W



文章转载自DBA管家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论