Linux静默安装Oracle11g

hcwei 2020年06月10日 382次浏览

1. 创建swap分区

创建要作为swap分区的文件:增加2B大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小):

dd if=/dev/zero of=/root/swapfile bs=1M count=2048

格式化为交换分区文件:

mkswap /root/swapfile

启用交换分区文件:

swapon /root/swapfile

开机时自启用,在文件/etc/fstab中添加一行:

echo "/root/swapfile swap swap defaults 0 0" >> /etc/fstab

预览截图:
BC28BB162FB04AE9939BDAAE9BB69DE9.png

2. 配置hostname

hostnamectl set-hostname oracledb
echo "127.0.0.1     oracledb" >>/etc/hosts

3. 关闭selinux

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config  
setenforce 0

4. 下载Oracle

官方网站:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/
根据自己的服务器,下载相应的软件,并上传至服务器的/mnt/software下

linux.x64_11gR2_database_1of2.zip
linux.x64_11gR2_database_2of2.zip

B394C95C08E34211BD570D5D3450B63F.png

5. 检查软件依赖环境

安装命令

yum -y install binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel

检查依赖是否安装成功

rpm -q binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel | grep "not installed"

6. 创建所需的操作系统组和用户

如果要安装Oracle数据库,则需要以下本地操作系统组和用户:

  • Oracle inventory组(通常为 oinstall)
  • OSDBA组 (通常为 dba)
  • OSOPER组 (通常为 oper)
  • Oracle软件所有者(通常为 oracle)

添加oracle用户及相关组并改密

groupadd oinstall
groupadd dba
groupadd oper
useradd -g oinstall -G dba oracle
passwd oracle

B981AE1AEED344A0A05A01A74D3C762B.png

7. 配置内核参数和资源限制

下面的数值只是官方要求的最小值,可以根据系统调整数值,以优化系统性能

cat >> /etc/sysctl.conf << EOF
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
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
EOF

使内核参数生效

sysctl -p

F0E25E68F88945C9BBFE317284C22DA3.png

在/etc/security/limits.conf中添加参数

cat >> /etc/security/limits.conf << EOF
oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536
EOF

在/etc/pam.d/login中添加参数

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

在/etc/profile中添加内容并生效

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

禁用使用Transparent HugePages(启用Transparent HugePages,可能会导致造成内存在运行时的延迟分配,Oracle官方建议使用标准的HugePages)
查看是否启用 如果显示 [always]说明启用了

cat /sys/kernel/mm/transparent_hugepage/enabled

禁用Transparent HugePages,在/etc/grub.conf添加如下内容

echo never > /sys/kernel/mm/transparent_hugepage/enabled

AAF579EBA3A24F25AAA2C79F05C20A44.png

8. 创建oracle安装目录

如下目录,根据自己的实际情况可做修改

mkdir -p /mnt/installer/oracle/
chown -R oracle:oinstall /mnt/installer/oracle/
chmod -R 775 /mnt/installer/oracle/

9. 配置oracle用户环境变量

在文件/home/oracle/.bash_profile里添加内容(具体值根据实际情况修改)
注意:使用cat导入$需要使用\转义

cat >> /home/oracle/.bash_profile << EOF
umask 022
export ORACLE_HOSTNAME=oracledb
export ORACLE_BASE=/mnt/installer/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/
export ORACLE_SID=ORCL
export PATH=.:\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$ORACLE_HOME/jdk/bin:$PATH
export LC_ALL="en_US"
export LANG="en_US"
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
EOF

10. 重启下系统

如果可以的话重启下系统

reboot

11. 解压数据库文件

cd /mnt/software
unzip -q linux.x64_11gR2_database_1of2.zip -d /tmp
unzip -q linux.x64_11gR2_database_2of2.zip -d /tmp

修改/tmp/database/response/db_install.rsp中以下变量的值

oracle.install.option=INSTALL_DB_SWONLY
DECLINE_SECURITY_UPDATES=true
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/mnt/installer/oracle/inventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOSTNAME=oracledb
ORACLE_HOME=/mnt/installer/oracle/product/11.2.0
ORACLE_BASE=/mnt/installer/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.isCustomInstall=true
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba

12. 开始安装

切换到oracle用户,执行安装,根据提示的日志输出查看安装进度

su - oracle
cd /tmp/database
./runInstaller -silent -responseFile /tmp/database/response/db_install.rsp -ignorePrereq

安装完成后有如下提示,如果有类似如下提示,说明安装完成
1EB81B5F7389466EB31B234AB72D95D5.png

13. 使用root用户执行脚本

su - root
sh /mnt/installer/oracle/inventory/orainstRoot.sh
sh /mnt/installer/oracle/product/11.2.0/root.sh

14. 配置监听程序

su - oracle
source ~/.bash_profile
netca /silent /responsefile /tmp/database/response/netca.rsp

查看监听端口

netstat -lntp | grep 1521

D5B985F658C94FEF8B21814193DDFCBD.png

15. 静默创建数据库

编辑应答文件/tmp/database/response/dbca.rsp

[GENERAL]
RESPONSEFILE_VERSION = "11.2.0"
OPERATION_TYPE = "createDatabase"
[CREATEDATABASE]
GDBNAME = "orcl"
SID = "orcl"
SYSPASSWORD = "oracle"
SYSTEMPASSWORD = "oracle"
SYSMANPASSWORD = "oracle"
DBSNMPPASSWORD = "oracle"
DATAFILEDESTINATION =/mnt/installer/oracle/oradata
RECOVERYAREADESTINATION=/mnt/installer/oracle/fast_recovery_area
CHARACTERSET = "AL32UTF8"
TOTALMEMORY = "1638"

执行静默建库

su - oracle
dbca -silent -responseFile /tmp/database/response/dbca.rsp

查看进程

ps -ef | grep ora_ | grep -v grep

查看监听状态

lsnrctl status

D0E7F181CC1B45B687A72F5F97021A04.png

16. 数据库安装成功,登录数据库

su - oracle
sqlplus / as sysdba
select status from v$instance;

问题1:执行select时,出现以下情况
08167CB98E1142DE94ABED597CC919AD.png

解决方式:
输入startup
69E4BAD42217480D890DAE1769CD3103.png
根据提示,将ORACLEBASE/admin/数据库名称/pfile目录下的init.ora.xxx形式的文件copy到
ORACLEBASE/admin/数据库名称/pfile目录下的init.ora.xxx形式的文件copy到ORACLE_HOME/dbs目录下initOracle.ora(根据startup提示)即可

cp /mnt/installer/oracle/admin/orcl/pfile/init.ora.4222020192643 /mnt/installer/oracle/product/11.2.0/dbs/initORCL.ora

问题2:ORA-01102: cannot mount database in EXCLUSIVE mode
1AD8340F10F94967BE184015A91F8417.png
解决办法:

fuser -k /mnt/installer/oracle/product/11.2.0/dbs/lkORCL

14CEADF5CFAA426689BC9E50B93128B2.png

激活scott用户

alter user scott account unlock;
alter user scott identified by tiger;
select username,account_status from dba_users;

至此oracle安装完成并成功启动

17. 设置Oracle开机启动

修改/mnt/installer/oracle/product/11.2.0/bin/dbstart

ORACLE_HOME_LISTNER=$ORACLE_HOME

修改/mnt/installer/oracle/product/11.2.0/bin/dbshut

ORACLE_HOME_LISTNER=$ORACLE_HOME

修改vim /etc/oratab

orcl:/mnt/installer/oracle/product/11.2.0:Y

新建文件/etc/rc.d/init.d/oracle

#! /bin/bash
# oracle: Start/Stop Oracle Database 11g R2
#
# chkconfig: 345 90 10
# description: The Oracle Database is an Object-Relational Database Management System.
#
# processname: oracle
. /etc/rc.d/init.d/functions
LOCKFILE=/var/lock/subsys/oracle
ORACLE_HOME=/mnt/installer/oracle/product/11.2.0
ORACLE_USER=oracle
case "$1" in
'start')
   if [ -f $LOCKFILE ]; then
      echo $0 already running.
      exit 1
   fi
   echo -n $"Starting Oracle Database:"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl start"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl start dbconsole"
   touch $LOCKFILE
   ;;
'stop')
   if [ ! -f $LOCKFILE ]; then
      echo $0 already stopping.
      exit 1
   fi
   echo -n $"Stopping Oracle Database:"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
   rm -f $LOCKFILE
   ;;
'restart')
   $0 stop
   $0 start
   ;;
'status')
   if [ -f $LOCKFILE ]; then
      echo $0 started.
      else
      echo $0 stopped.
   fi
   ;;
*)
   echo "Usage: $0 [start|stop|status]"
   exit 1
esac
exit 0

给/etc/init.d/oracle添加执行权限

chmod +x /etc/init.d/oracle

给启动文件加权限

cd /mnt/installer/oracle/product/11.2.0/bin/
chmod 6751 oracle
cd /var/tmp
chown -R oracle:oinstall .oracle

开机启动oracle

chkconfig oracle on