Oracle 19c of step by step install
介绍
脚本基于rockyOS 8.9操作系统上编写,基于自己对Oracle数据库安装流程的理解整理的自动安装脚本。
- 脚本使用response自动响应模板文件进行安装,实例使用dbca的自动响应模板进行创建。
- oracle安装为单机模式,未进行RAC配置
- dbca是单实例模式创建。
自动安装脚本
SetEnvironment() {
# 设置安装目录,指定Oracle home、inventory、数据存放路径和备份路径
INSTALL_DIR=/opt
ORACLE_BASE=$INSTALL_DIR/oracle
INVENTORY_DIR=$ORACLE_BASE/oraInventory
ORACLE_HOME=$ORACLE_BASE/app/19c
ORADATA=$INSTALL_DIR/oradata
ORABAK=$INSTALL_DIR/oradata_bak
ORACLE_SID=PLASMA
# 设置运行内存,默认设置512M,安装过程中需要
# memory is Mbyte
MEMORY=512
# 为操作系统DBA账户设置随机密码,默认长度为16位
# oracle dba user password length
PASSWORD_LENGTH=16
# Oracle的Sys、System账户密码
DBA_PASSWORD="PASSWORD"
ORACLE_SYS_PASSWORD="PASSWORD"
ORACLE_SYSTEM_PASSWORD="PASSWORD"
# 生成oracle账户,并设置随机16位字符串的密码
# generate dba user
ORACLE_USER=oracle
# generate random password
ORACLE_PASSWORD="$(openssl rand -base64 $((PASSWORD_LENGTH * 3 / 4)))"
# 生成随机服务器主机名
ORACLE_HOSTNAME="oraSrv-$(head -c 32 /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 6)"
hostnamectl set-hostname $ORACLE_HOSTNAME
# 写入/etc/hosts
for ip in $(hostname -I);
do
printf "$ip\t$ORCL_HOSTNAME\n" >> /etc/hosts
done
}
CreateUser() {
# 创建操作系统账户,并使用随机16位密码
if id $ORACLE_USER >& /dev/null; then
groupadd oinstall
groupadd dba
useradd $ORACLE_USER -G oinstall -g dba -m
# 列印账户密码
echo "Create Oracle User: $ORACLE_USER:$ORACLE_PASSWORD"
echo "$ORACLE_USER:$ORACLE_PASSWORD" | chpasswd
fi;
}
CreateDirectory() {
# create directory
mkdir -p $ORACLE_HOME
mkdir -p $INVENTORY_DIR
mkdir -p $ORADATA
mkdir -p $ORABAK
# grant directory permissions
chown oracle:oinstall -R $ORACLE_BASE
chown oracle:dba -R $ORADATA
chown oracle:dba -R $ORABAK
cd $ORACLE_HOME
}
InstallDepends() {
# install oracle depends
dnf groupinstall "Development Tools" -y
dnf install epel-release -y
dnf install libnsl.x86_64 glibc.x86_64 glibc-gconv-extra.x86_64 rlwrap ksh -y
}
CreateResponse() {
# generate oracle response.
sed -i.bak ./install/response/db_install.rsp \
-e '/^oracle\.install\.option=/s/$/INSTALL_DB_SWONLY/' \
-e '/^UNIX_GROUP_NAME=/s/$/oinstall/' \
-e '/^INVENTORY_LOCATION=/s/$/'"${INVENTORY_DIR}"'/' \
-e '/^ORACLE_HOME=/s/$/'"${ORACLE_HOME}"'/' \
-e '/^ORACLE_BASE=/s/$/'"${ORACLE_BASE}"'/' \
-e '/^oracle\.install\.db\.InstallEdition=/s/$/EE/' \
-e '/^oracle\.install\.db\.OSDBA_GROUP=/s/$/dba/' \
-e '/^oracle\.install\.db\.OSOPER_GROUP=/s/$/dba/' \
-e '/^oracle\.install\.db\.OSBACKUPDBA_GROUP=/s/$/dba/' \
-e '/^oracle\.install\.db\.OSDGDBA_GROUP=/s/$/dba/' \
-e '/^oracle\.install\.db\.OSKMDBA_GROUP=/s/$/dba/' \
-e '/^oracle\.install\.db\.OSRACDBA_GROUP=/s/$/dba/' \
-e '/^oracle\.install\.db\.ConfigureAsContainerDB=/s/$/false/' \
-e '/^oracle\.install\.db\.config\.starterdb\.characterSet=/s/$/AL32UTF8/' \
-e '/^oracle\.install\.db\.config\.starterdb\.memoryLimit=/s/$/'"${MEMORY}"'/' \
-e '/^oracle\.install\.db\.config\.starterdb\.password\.ALL=/s/$/'"${DBA_PASSWORD}"'/' \
-e '/^oracle\.install\.db\.config\.asm\.diskGroup=/s/^/#/' \
-e '/^oracle\.install\.db\.config\.asm\.ASMSNMPPassword=/s/^/#/'
# generate oracle instance response.
sed -i.bak ./assistants/dbca/dbca.rsp \
-e '/^gdbName=/s/$/PLASMA/' \
-e '/^sid=/s/$/PLASMA/' \
-e '/^createAsContainerDatabase=/s/$/false/' \
-e '/^templateName=/s/$/'"${ORACLE_HOME}"'\/assistants\/dbca\/templates\/New_Database.dbt/' \
-e '/^sysPassword=/s/$/'"${ORACLE_SYS_PASSWORD}"'/' \
-e '/^systemPassword=/s/$/'${ORACLE_SYSTEM_PASSWORD}'/'
-e '/^datafileDestination=/s/$/'"${ORADATA}"'/'
# generate profile.
cat > /etc/profile.d/oracle.sh <<EOF
export ORACLE_SID=PLASMA
export ORACLE_BASE=$ORACLE_BASE
export ORACLE_HOME=$ORACLE_HOME
export PATH=\$PATH:\$ORACLE_HOME/bin
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:\$LD_LIBRARY_PATH
export LANG=en_US.UTF-8
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
export NLS_DATE_FORMAT="YYYY:MM:DDHH24:MI:SS"
export ORACLE_TERM=xterm
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias lsnrctl='rlwrap lsnrctl'
EOF
# generate systemd service
cat > /etc/systemd/system/oracle.service << EOF
[Unit]
Description=Oracle Database 19c Startup/Shutdown Service
After=syslog.target network.target
[Service]
LimitMEMLOCK=infinity
TimeoutStopSec=5min
LimitNOFILE=65535
LimitMEMLOCK=16G
Type=forking
User=oracle
SyslogIdentifier=oracle-service
RemainAfterExit=yes
Environment="ORACLE_HOME=$ORACLE_HOME"
ExecStart=$ORACLE_HOME/bin/dbstart \$ORACLE_HOME
ExecStop=$ORACLE_HOME/bin/dbshut \$ORACLE_HOME
[Install]
WantedBy=multi-user.target
EOF
# Create listener.ora
cat > $ORACLE_HOME/network/admin/listener.ora <<EOF
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = $HOSTNAME)
(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SERVICE_NAME = $ORAINSTALL_SID)
(SID_NAME = $ORAINSTALL_SID)
(ORACLE_HOME = $ORACLE_HOME)
)
)
EOF
}
InstallDatabase() {
# execute oracle silent install
su oracle -c 'CV_ASSUME_DISTID=RHEL8 ./runInstaller -silent -responseFile ./install/response/db_install.rsp'
bash -c $INVENTORY_DIR/orainstRoot.sh
bash -c $ORACLE_HOME/root.sh
}
InitInstance() {
# Create database instance
su oracle -c 'dbca -silent -createDatabase -responseFile ./assistants/dbca/dbca.rsp'
}
RemoveInstance() {
su oracle -c 'dbca -silent -deleteDatabase $ORACLE_SID'
}
initInstall(){
SetEnvironment
CreateUser
if [ -d $ORACLE_HOME ]; then
CreateDirectory
fi;
InstallDepends
CreateResponse
InstallDatabase
InitInstance
}
case $@ in
install)
# 完整安装oracle数据库
initInstall
;;
reinstall)
# 重新安装(删除文件后重新安装,操作会删除数据库文件)
;;
uninstall)
# 卸载(删除所有与oracle相关的安装和配置)
;;
add_instalce)
# 安装实例
;;
remove_instance)
# 卸载实例
;;
esac