Linux安装centos7的Oracle1一键安装脚本

本文提供了一个详细的bash脚本,用于自动化Oracle数据库的安装过程,包括配置yum源、环境变量、用户组、数据库依赖、监听和端口设置等,最后启动并确认数据库连接信息。
摘要由CSDN通过智能技术生成

有时候总是安装麻烦,写了个一键安装的,方便快捷,拿走记得点赞

#!/bin/bash
###########自定义变量#########
#本机ip
host_ip=`ip addr | awk '{print$2}' |awk -F/ '{print$1}' |grep 192`
oracle_passwd="123456"      #oracle用户密码
ftpIP="192.168.2.250"       #FTP地址
oracle_instance_name=orcl    #Oracle数据库实例名称
oracle_password=oracle      #Oracle数据库系统用户初始密码
oracle_base=/db/app/oracle  # Oracle主目录
oracle_unzip=/db            # Oracle数据库解压目录
oracle_log_file=/db/oracle_install.log # 安装详细日志文件
oracle_home=${oracle_base}/product/11.2.0/db_1 # Oracle安装目录
oracle_file_1=/db/linux.x64_11gR2_database_1of2.zip
oracle_file_2=/db/linux.x64_11gR2_database_2of2.zip
host_name=oracle

# 自定义函数
function red_display(){
    echo -e "\e[31m$1\e[0m"
}

#绿色文字
function green_display(){
    echo -e "\e[32m$1\e[0m"
}

#下载文件
function download_file(){
    ftp -v -n $ftpIP<<EOF
    user admin admin
    binary
    get  $remoteFile  $localFile
    bye
EOF
}
function moweiadd(){
    sed  -i  '$a '"$1"  $path
}
function xiugai(){
  strArr=$1
  filePath=$2
  for i in ${strArr[*]}; do
	sed -i "s#^${i%%=*}=.*#${i}#" ${filePath}
  done
}
echo "正在修改用户名位oracle"
hostnamectl set-hostname oracle
echo "正在配置yum源......"
yum install ftp wget unzip -y       >> ${oracle_log_file} 2>&1
cd /etc
mv yum.repos.d yum.repos.d.bak
mkdir yum.repos.d
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo      >> ${oracle_log_file} 2>&1
yum clean all >> ${oracle_log_file} 2>&1
yum makecache >> ${oracle_log_file} 2>&1


echo "正在安装数据库依赖环境..."
yum -y install binutils \
compat-libstdc++-33 \
elfutils-libelf \
elfutils-libelf-devel \
expat \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
pdksh \
sysstat \
unixODBC \
unixODBC-devel  >> ${oracle_log_file} 2>&1

echo 检查依赖是否安装完整......
rpm -q \
binutils \
compat-libstdc++-33 \
elfutils-libelf \
elfutils-libelf-devel \
expat \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
pdksh \
sysstat \
unixODBC \
unixODBC-devel | grep "not installed" >> ${oracle_log_file} 2>&1
echo "正在添加oracle用户组和用户"
groupadd oinstall   >> ${oracle_log_file} 2>&1
groupadd dba        >> ${oracle_log_file} 2>&1
groupadd asmadmin   >> ${oracle_log_file} 2>&1
groupadd asmdba     >> ${oracle_log_file} 2>&1
useradd -g oinstall -G dba,asmdba oracle -d /home/oracle    >> ${oracle_log_file} 2>&1

id oracle
red_display "正在修改oracle用户密码"
echo "$oracle_passwd" | passwd --stdin oracle 

echo "${host_ip} ${host_name}" >> /etc/hosts
echo "测试hostname能否通信..."
ping -c 3 oracle >> ${oracle_log_file} 2>&1
if [ $? -eq 0 ];then
    green_display "通信成功"
else
    red_display "通信失败,请检查网络或者配置文件"
    exit
fi

path=/etc/sysctl.conf
echo "优化OS内核参数,设置为物理内存的一半"
moweiadd "fs.aio-max-nr=1048576"
moweiadd "fs.file-max=6815744"
moweiadd "kernel.shmall=2097152"
moweiadd "kernel.shmmni=4096"
moweiadd "kernel.shmmax=536870912"
moweiadd "kernel.sem=250 32000 100 128"
moweiadd "net.ipv4.ip_local_port_range=9000 65500"
moweiadd "net.core.rmem_default=262144"
moweiadd "net.core.rmem_max=4194304"
moweiadd "net.core.wmem_default=262144"
moweiadd "net.core.wmem_max=1048586"
sysctl -p >> ${oracle_log_file} 2>&1

echo "限制oracle用户的shell权限"
path=/etc/security/limits.conf
moweiadd "oracle	soft	nproc	2047"
moweiadd "oracle	hard	nproc	16384"
moweiadd "oracle	soft	nofile	1024"
moweiadd "oracle	hard	nofile	65536"
moweiadd "oracle	soft	stack	10240"
moweiadd "oracle	hard	stack	10240"
path=/etc/pam.d/login
moweiadd "session  required   /lib64/security/pam_limits.so"
moweiadd "session  required   pam_limits.so"

echo "if [ \$USER = \"oracle\" ]; then" >>  /etc/profile
echo "  if [ \$SHELL = \"/bin/ksh\" ]; then" >>  /etc/profile
echo "    ulimit -p 16384" >>  /etc/profile
echo "    ulimit -n 65536" >>  /etc/profile
echo "  else" >>  /etc/profile
echo "    ulimit -u 16384 -n 65536" >>  /etc/profile
echo "  fi" >>  /etc/profile
echo "fi" >>  /etc/profile
source /etc/profile

echo "创建oracle安装目录"
mkdir -p ${oracle_base}/product/11.2.0
mkdir ${oracle_base}/oradata
mkdir ${oracle_base}/oraInventory
mkdir ${oracle_base}/fast_recovery_area
chown -R oracle:oinstall ${oracle_base}
chmod -R 775 ${oracle_base}
echo "inventory_loc=${oracle_base}/oraInventory"  >> /etc/oraInst.loc
echo "inst_group=oinstall"          >>  /etc/oraInst.loc
chown oracle:oinstall /etc/oraInst.loc
chmod 664 /etc/oraInst.loc

chmod -R 666 ${oracle_log_file}

function oracle_huanjng(){
echo "配置oracle用户环境变量"
su - oracle<<EOF2
echo "正在配置oracle用户环境变量"   
echo "export ORACLE_HOSTNAME=oracle"    >>/home/oracle/.bash_profile
echo "export ORACLE_BASE=${oracle_base}"  >>/home/oracle/.bash_profile  
echo "export ORACLE_SID=ORCL"  >>/home/oracle/.bash_profile  
echo "export LC_ALL=\"en_US\""  >>/home/oracle/.bash_profile  
echo "export LANG=\"en_US\""  >>/home/oracle/.bash_profile  
echo "export NLS_LANG=\"AMERICAN_AMERICA.ZHS16GBK\""  >>/home/oracle/.bash_profile  
echo "export NLS_DATE_FORMAT=\"YYYY-MM-DD HH24:MI:SS\""  >>/home/oracle/.bash_profile  

source /home/oracle/.bash_profile  
env   >> ${oracle_log_file} 2>&1  

EOF2
}
oracle_huanjng
green_display "oracle环境变量已经配置"


#删除原有的源码文件
if [ -f ${oracle_file_1} ] || [ ! -f ${oracle_file_2} ];then
    echo  "oracle压缩文件已存在" 
else
    echo  "oracle压缩文件不存在"
    echo  "开始下载ftp的源码文件"
    echo  "文件大小2G,请耐心等待....."
    localFile=${oracle_file_1}
    remoteFile="/software/数据库工具/linux.x64_11gR2_database_1of2.zip"
    download_file   >> ${oracle_log_file} 2>&1
    #下载第二个文件
    localFile=${oracle_file_2}
    remoteFile="/software/数据库工具/linux.x64_11gR2_database_2of2.zip"
    download_file   >> ${oracle_log_file} 2>&1
fi
echo "正在解压linux.x64_11gR2_database_1of2.zip源码....."
unzip ${oracle_file_1} -d ${oracle_unzip}/ >> ${oracle_log_file} 2>&1
unzip ${oracle_file_2} -d ${oracle_unzip}/ >> ${oracle_log_file} 2>&1
# 增加检查点

mkdir /home/oracle/etc/
cp /db/database/response/* /home/oracle/etc/
chmod 777 /home/oracle/etc/*.rsp



red_display "正在修改安装文件......"  
aa[0]="oracle.install.option=INSTALL_DB_SWONLY"
aa[1]="ORACLE_HOSTNAME=${host_name}"
aa[2]="UNIX_GROUP_NAME=oinstall"
aa[3]="INVENTORY_LOCATION=${oracle_base}/oraInventory"
aa[4]="SELECTED_LANGUAGES=en,zh_CN"
aa[5]="ORACLE_HOME=${oracle_home}"
aa[6]="ORACLE_BASE=${oracle_base}"
aa[7]="oracle.install.db.InstallEdition=EE"
aa[8]="oracle.install.db.isCustomInstall=true"
aa[9]="oracle.install.db.DBA_GROUP=dba"
aa[10]="oracle.install.db.OPER_GROUP=oinstall"
aa[11]="oracle.install.db.config.starterdb.type=GENERAL_PURPOSE"
aa[12]="oracle.install.db.config.starterdb.globalDBName=orcl"
aa[13]="oracle.install.db.config.starterdb.SID=orcl"
aa[14]="oracle.install.db.config.starterdb.memoryLimit=512"
aa[15]="oracle.install.db.config.starterdb.password.ALL=${oracle_password}"
aa[16]="DECLINE_SECURITY_UPDATES=true"  
xiugai "${aa[*]}" "/home/oracle/etc/db_install.rsp"
green_display "修改安装文文件完毕......"

showBar(){
  i=$1
  jj=0
  ((jj=i+3))
  jj=`echo "$i $jj"|awk '{printf "%d\n",$1/$2*100}'`
  msg=$2
  b=`echo "" | sed ":a; s/^/-/; /-\{${jj}\}/b; ta"`
  b="${b}>"
  if [ $msg == "执行中" ]
    then	  
	  printf "[%-101s] %d%% %3s \r" "$b" "$jj" "$msg";
  else
      jj=100
	  b=`echo "" | sed ":a; s/^/-/; /-\{${jj}\}/b; ta"`
	  b="${b}>"
      printf "[%-101s] %d%% %3s \n" "$b" "$jj" "$msg";
  fi
}
echo "开始安装数据库..."
touch ${oracle_unzip}/database/oracle_install_log.out
chmod -R 666 ${oracle_unzip}/database/oracle_install_log.out
su - oracle <<EOF
cd ${oracle_unzip}/database
nohup ./runInstaller -silent -force -responseFile /home/oracle/etc/db_install.rsp -ignorePrereq >> oracle_install_log.out &
EOF
ii=0
while true
do
    sleep 1
    egrep -e "FATAL|Failed" ${oracle_unzip}/database/oracle_install_log.out
    msg=$?
    if [ "$msg" == '0' ];then    
	    showBar ${ii} "失败"
	    exit
    fi
    grep "Successfully Setup Software." ${oracle_unzip}/database/oracle_install_log.out >> ${oracle_log_file} 2>&1
    msg=$?	
    if [ "$msg" == '0' ];then
	    showBar 100 "成功"
	    green_display "oracle数据库安装成功" 
	    break
    fi
    showBar ${ii} "执行中"
    ((ii=ii+2))
done

${oracle_base}/product/11.2.0/db_1/root.sh

echo "修改oracle环境变量中......"

path=/home/oracle/.bash_profile
moweiadd "export ORACLE_HOME=${oracle_home}"
moweiadd "export TNS_ADMIN=\$ORACLE_HOME/network/admin"
moweiadd "export PATH=.:\${PATH}:\$HOME/bin:\$ORACLE_HOME/bin"
moweiadd "export PATH=\${PATH}:/usr/bin:/bin:/usr/local/bin"
moweiadd "export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}:\$ORACLE_HOME/lib"
moweiadd "export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}:\$ORACLE_HOME/oracm/lib"
moweiadd "export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib"
moweiadd "export CLASSPATH=\${CLASSPATH}:\$ORACLE_HOME/jlib"
moweiadd "export CLASSPATH=\${CLASSPATH}:\$ORACLE_HOME/rdbms/jlib"
moweiadd "export CLASSPATH=\${CLASSPATH}:\$ORACLE_HOME/network/jlib"
moweiadd "export LIBPATH=\${CLASSPATH}:\$ORACLE_HOME/lib:\$ORACLE_HOME/ctx/lib"
moweiadd "export ORACLE_OWNER=oracle"
moweiadd "export SPFILE_PATH=\$ORACLE_HOME/dbs"
moweiadd "export ORA_NLS10=\$ORACLE_HOME/nls/data"
source /home/oracle/.bash_profile


echo "正在配置监听程序......"
su - oracle <<EOF
cd   ${oracle_home}/bin
./netca /silent /responseFile /home/oracle/etc/netca.rsp
echo "正在启动监听"
lsnrctl start 
sleep 5
lsnrctl status
EOF
echo "正在编辑数据库实例"
bb[0]="GDBNAME = \"${oracle_instance_name}\""
bb[1]="SID = \"orcl\""
bb[2]="CHARACTERSET = \"AL32UTF8\""
bb[3]="NATIONALCHARACTERSET= \"UTF8\""
bb[4]="SYSPASSWORD = \"${oracle_password}\""
bb[5]="SYSTEMPASSWORD = \"${oracle_password}\""
for i in "${bb[@]}"; do
  str_trim=`echo ${i%%=*} | sed 's/[ \t]*$//g'`
  sed -i "s/^#${i%%=*}=.*/${i%%=*}=.*/" /home/oracle/etc/dbca.rsp
sed -i "s/^#${str_trim}=.*/${i%%=*}=.*/" /home/oracle/etc/dbca.rsp
sed -i "s#^${i%%=*}=.*#${i}#" /home/oracle/etc/dbca.rsp
done
su - oracle <<EOF
$ORACLE_HOME/bin/dbca -silent -responseFile /home/oracle/etc/dbca.rsp
echo "正在启动监听"
lsnrctl start 
sleep 5
lsnrctl status
EOF

rm -rf /etc/oratab 
echo "正在设置oracle开机自启..."
echo "${oracle_instance_name}:${oracle_home}:Y" >> /etc/oratab

cd ${oracle_base}/admin/$oracle_instance_name/pfile/
cp `ls` initORCL.ora
mv initORCL.ora ${oracle_home}/dbs/
chmod -R 777 ${oracle_home}/dbs/initORCL.ora

su - oracle <<EOF6
echo "正在重启监听"
lsnrctl stop   >> ${install_log_file} 2>&1
lsnrctl start   >> ${install_log_file} 2>&1
sleep 5
EOF6

#启动oracle
su - oracle <<EOF5
sqlplus "/as sysdba"
SHUTDOWN IMMEDIATE;
startup;
EOF5

su - oracle <<EOF7
echo "正在查看监听"
lsnrctl status
EOF7
#oracle端口号文件
oracle_duankou_base=${oracle_home}/network/admin/listener.ora  
#oracle端口号
oracle_duankou=`cat ${oracle_duankou_base} | grep 'PORT = ' |awk -F'PORT = ' '{print$2}' |awk -F\) '{print$1}'`

green "您的数据库连接地址:${host_ip}:${oracle_duankou}/${oracle_instance_name}"
green "管理员用户名:      system"
green "初始密码:          ${oracle_password}"

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值