CentOS7离线静默安装Oracle11gR2数据库0x

0x00 安装前准备

  1. 一台可用的 CentOS 7.+ 的机器, 已经配置好了yum环境。

  2. 已经下载了 Oracle11gR2数据库安装文件, linux.x64_11gR2_database_1of2.ziplinux.x64_11gR2_database_2of2.zip. 并上传到 tmp 目录下. 也可以通过 bypy 通过百度云盘直接下载到机器中.

    image-20210707110120134

    文件分享地址: pan.baidu.com/s/12MV-Dq8z… (s5i7)

0x01 操作系统准备工作

1. 添加 host 地址

## 该步骤中主要为后边配置文件中中 host 的配置. oracledb#01为自定义值可以根据相关进行修改
[root@centos7] $ echo "192.168.0.111 oracledb" > /etc/hosts
## 还可以给服务器设置一个名称[非必须], 操作完毕需要重新登陆一下, centos7就会修改成 oracledb
[root@centos7] $ hostnamectl set-hostname oracledb
复制代码

2. 安装 unzip 软件及常用软件

[root@oracledb] $ yum install unzip net-tools vim -y
复制代码

3. 解压oracle安装程序

## 创建 '/data/oracle/oraclesetup' 用于存放安装文件
[root@oracledb] $ mkdir -p /data/oracle/oraclesetup
## 解压安装文件到 /data/oracle/oraclesetup
[root@oracledb] $ unzip linux.x64_11gR2_database_1of2.zip -d /data/oracle/oraclesetup
[root@oracledb] $ unzip linux.x64_11gR2_database_2of2.zip -d /data/oracle/oraclesetup
复制代码

4. 关闭 Selinux

## 为了不重启服务器先临时将 Selinux 关闭
[root@oracledb] $ setenforce 0
## 修改配置文件永久关闭 Selinux 
[root@oracledb] $ vim /etc/selinux/config
...修改如下内容
SELINUX=disabled
复制代码

image-20210707135333372

5. 防火墙配置

## firewalld防火墙放行 1521 端口
[root@oracledb] $ firewall-cmd --zone=public --add-port=1521/tcp --permanent
## 重新加载防火墙配置
[root@oracledb] $ firewall-cmd --reload

## [可选] 如果测试环境可以直接关闭防火墙
[root@oracledb] $ systemctl stop firewalld
[root@oracledb] $ systemctl disable firewalld // 禁止防火墙自启动
复制代码

6. 安装数据库依赖环境

在线环境 可以通过 'yum install' 安装相关的依赖环境

[root@oracledb] $ yum install gcc make binutils gcc-c++ compat-libstdc++-33elfutils-libelf-devel elfutils-libelf-devel-static ksh libaio libaio-develnumactl-devel sysstat unixODBC unixODBC-devel pcre-devel –y
复制代码

离线环境 可以通过下载离线的 rpm 包使用 'rpm' 进行安装

## 提前下载依赖的压缩包. CentOS7.4
## 链接: https://pan.baidu.com/s/1TVrQDBjU2tzDHU1yZRooxw 提取码: i8oo
[root@oracledb] $ rpm -Uvh --force --nodeps *.rpm
复制代码

7. 添加 oracle 数据库所需的用户和用户组

[root@oracledb] $ groupadd oinstall
[root@oracledb] $ groupadd dba
[root@oracledb] $ useradd -g oinstall -G dba oracle
## 为 oracle 用户设置密码. 
[root@oracledb] $ passwd oracle
[root@oracledb] $ id oracle
uid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1002(dba),1004(asmdba)
复制代码

image-20210707140550400

8. 修改内核参数配置文件

  • 修改 /etc/sysctl.conf 内核参数配置文件

    # 其中kernel.shmmax = 1073741824 为物理内存(2G)的一半,单位为byte
    [root@oracledb] $ vim /etc/sysctl.conf
    ... 添加如下内容
    fs.aio-max-nr = 1048576
    fs.file-max = 6815744
    kernel.shmall = 2097152
    kernel.shmmax = 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
    
    ## 查看配置内容
    [root@oracledb] $ sysctl -p
    复制代码

    image-20210707140756322

  • 修改用户的限制文件

    [root@oracledb] # vim /etc/security/limits.conf
    ... 添加如下内容
    oracle soft nproc 2047
    oracle hard nproc 16384
    oracle soft nofile 1024
    oracle hard nofile 65536
    
    [root@oracledb] # vim /etc/pam.d/login
    ... 添加如下内容
    session required  /lib64/security/pam_limits.so
    session required   pam_limits.so
    
    [root@oracledb] # vim /etc/profile
    ... 添加如下内容
    ##oracle
    if [ $USER = "oracle" ]; then
      if [ $SHELL = "/bin/ksh" ]; then
        ulimit -p 16384
        ulimit -n 65536
      else
        ulimit -u 16384 -n 65536
      fi
    fi
    复制代码

0x02 静默安装 Oracle 服务器

1. 创建安装目录和设置文件权限

[root@oracledb] $ mkdir -p /data/oracle/product/11.2.0
[root@oracledb] $ mkdir -p /data/oracle/oradata
[root@oracledb] $ mkdir -p /data/oracle/inventory
[root@oracledb] $ mkdir -p /data/oracle/fast_recovery_area
[root@oracledb] $ chown -R oracle:oinstall /data/oracle
[root@oracledb] $ chmod -R 775 /data/oracle
复制代码

2. 设置 oracle 用户环境变量

# 切换到 oracle 用户. 请注意 su username 切换用户无法切换环境变量, 请使用 su - username 的方式
[root@oracledb] $ su - oracle
[oracle@oracledb] $ vim ~/.bash_profile
...添加如下内容
## oracle
ORACLE_BASE=/data/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.2.0
ORACLE_SID=ora11 # 实例名, 按实际情况填写
NLS_LANG=AMERICAN_AMERICA.AL32UTF8 # 编码集, 按实际情况填写, 必须将该参数 export 到系统变量中. 不然导入数据的时候会乱码
PATH=$PATH:$ORACLE_HOME/bin
export NLS_LANG ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
复制代码

3. 编辑静态安装文件

# 将安装配置文件放置到 /home/oracle 下后面容易使用
[oracle@oracledb] $ cp -R /data/oracle/oraclesetup/database/response/ ~/
[oracle@oracledb] $ vim ~/response/db_install.rsp
... 修改如下内容
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=oracledb
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/data/oracle/inventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/data/oracle/product/11.2.0
ORACLE_BASE=/data/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
DECLINE_SECURITY_UPDATES=true
复制代码

4. 使用 db_install.rsp 静默安装数据库

[oracle@oracledb] $ /data/oracle/oraclesetup/database/runInstaller -silent -responseFile ~/response/db_install.rsp -ignorePrereq

...
/u01/app/oracle/inventory/logs/*.log
复制代码

开始Oracle在后台静默安装。安装过程中,如果提示[WARNING]不必理会,此时安装程序仍在后台进行,如果出现[FATAL],则安装程序已经停止了。可以通过执行输入找到安装会话的日志。

5. 等待安装完成后, 按照安装完成后提示使用root用户执行配置

# 切换 root 用户
[oracle@oracledb] $ su - root
# 执行脚本
[root@oracledb] $ sh /data/oracle/product/11.2.0/root.sh
复制代码

0x03 静默配置数据库监听

# 切换 oracle 用户
[root@oracledb] $ su - oracle
# 配置监听
[oracle@oracledb] $ netca /silent /responseFile ~/response/netca.rsp
复制代码

成功运行后,在/data/oracle/product/11.2.0/network/admin中生成listener.ora和sqlnet.ora

# root用户可以通过 netstat 工具查看到 1521 端口正在被占用
[root@oracledb] $ netstat -tnulp | grep 1521
tcp6       0      0 :::1521                 :::*                    LISTEN      87283/tnslsnr  
复制代码

0x04 静默创建数据库实例

1. 修改 dbca.rsp 文件

# 切换 oracle 用户
[root@oracledb] $ su - oracle
# 修改 dbca.rsp 文件 
[oracle@oracledb] $ vim ~/response/dbca.rsp
... 修改如下配置
GDBNAME= "ora11"
SID ="ora11" # 修改自己的监听
SYSPASSWORD= "dbpassword" # 修改为自己的密码
SYSTEMPASSWORD= "dbpassword" # 修改为自己的密码
SYSMANPASSWORD= "dbpassword" # 修改为自己的密码
DBSNMPPASSWORD= "dbpassword" # 修改为自己的密码
DATAFILEDESTINATION=/data/oracle/oradata
RECOVERYAREADESTINATION=/data/oracle/fast_recovery_area
CHARACTERSET= "AL32UTF8" # 修改自己的字符集, 注意这里如果给了不正确的字符集则默认为 US7ASCII 无法导入中文. 这里的字符集必须是子集不能包含父集名称
TOTALMEMORY= "1638" # 总内存, 根据自己的需求修改,单位MB。
复制代码

2. 静默创建数据库实例

# 开始静默创建数据库实例
[oracle@oracledb] $ dbca -silent -responseFile ~/response/dbca.rsp
复制代码

3. 实例进程检查

# 建库后进行实例进程检查
[oracle@oracledb] $ ps -ef | grep ora_ | grep -v grep
复制代码

建库后进行实例进程检查

4. 查看监听状态

# 查看监听状态
[oracle@oracledb] $ lsnrctl status
复制代码

image-20210707145605349

5. 登陆数据库查看实例状态

[oracle@oracledb] $ sqlplus / as sysdba
...
SQL> select status from v$instance;

STATUS
------------
OPEN
复制代码

登陆数据库查看实例状态

0x05 Oracle 开机自启动设置

1. 修改 dbstart 配置

[oracle@oracledb] $ vim /data/oracle/product/11.2.0/bin/dbstart
... 修改如下配置 
ORACLE_HOME_LISTNER=$ORACLE_HOME # 将ORACLE_HOME_LISTNER=$1修改为$ORACLE_HOME
复制代码

2. 修改 dbshut 配置

[oracle@oracledb] $ vim /data/oracle/product/11.2.0/bin/dbshut
... 修改如下配置 
ORACLE_HOME_LISTNER=$ORACLE_HOME # 将ORACLE_HOME_LISTNER=$1修改为$ORACLE_HOME
复制代码

3.修改 /etc/oratab 配置

[oracle@oracledb] $ vim /etc/oratab
... 修改如下配置
ora11:/data/oracle/product/11.2.0:Y # 将orcl:/data/oracle/product/11.2.0:N中最后的N改为Y
复制代码

4. 测试 dbshut、distart 命令

# 测试关闭
[oracle@oracledb] $ dbshut
# 关闭后实例进程会消失
[oracle@oracledb] $ ps -ef | grep ora_ | grep -v grep
复制代码
# 测试开启
[oracle@oracledb] $ dbstart
# 开启后实例进程会出现
[oracle@oracledb] $ ps -ef | grep ora_ | grep -v grep
复制代码

5. 编写自启动脚本

# 切换到 root 用户
[oracle@oracledb] $ su - root
# 编写脚本, 请注意按照自己的配置修改  ORACLE_BASE、 ORACLE_HOME、 ORACLE_SID
[root@oracledb] $ vim /etc/rc.d/init.d/oracle
#!/bin/sh
# chkconfig: 345 61 61
# description: Oracle 11g R2 AutoRun Servimces
# /etc/init.d/oracle
#
# Run-level Startup script for the Oracle Instance, Listener, and
# Web Interface
export ORACLE_BASE=/data/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/
export ORACLE_SID=ora11
export PATH=$PATH:$ORACLE_HOME/bin
ORA_OWNR="oracle"
# if the executables do not exist -- display error
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]; then
	echo "Oracle startup: cannot start"
	exit 1
fi
# depending on parameter -- startup, shutdown, restart
# of the instance and listener or usage display
case "$1" in
start)
	# Oracle listener and instance startup
	su $ORA_OWNR -lc $ORACLE_HOME/bin/dbstart
	echo "Oracle Start Succesful!OK."
	;;
stop)
	# Oracle listener and instance shutdown
	su $ORA_OWNR -lc $ORACLE_HOME/bin/dbshut
	echo "Oracle Stop Succesful!OK."
	;;
reload | restart)
	$0 stop
	$0 start
	;;
*)
	echo $"Usage: $(basename $0) {start|stop|reload|reload}"
	exit 1
	;;
esac
exit 0

复制代码

6. 配置自启动脚本

# 修改/etc/init.d/oracle服务文件权限
[root@oracledb] $ chmod 755 /etc/init.d/oracle
# 设置开机自启动
[root@oracledb] $ chkconfig oracle on
复制代码

7. 使用 service 测试 oracle 服务

# 重启 oracle 服务
[root@oracledb] $ service oracle restart
# 查看 oracle 服务状态
[root@oracledb] $ service oracle status
# 关闭 oracle 服务
[root@oracledb] $ service oracle stop
# 开启 oracle 服务
[root@oracledb] $ service oracle start
复制代码