CentOS 安装 Oracle 11g

准备工作

下载并解压 Oracle 的软件包

  • 下载

  • oracle 下载地址

  • 本文安装的是 Oracle Database 11g Release 2,分别下载两个压缩包,可以通过 ftp 上传至服务器

    • linux.x64_11gR2_database_1of2.zip
    • linux.x64_11gR2_database_2of2.zip
  • 解压
    切换到 oracle 压缩包目录,进行解压操作

    # 解压oracle压缩文件到 /oracle
    su - root
    mkdir /oracle
    unzip -d /oracle linux.x64_11gR2_database_1of2.zip
    unzip -d /oracle linux.x64_11gR2_database_2of2.zip

若没有安装 unzip, 可以使用 yum install unzip –y 解压出来的文件到放置在当前 /oracle/database 目录下

检查依赖

su - root

rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}(%{ARCH})\n' binutils \
elfutils-libelf \
elfutils-libelf-devel \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
ksh \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
sysstat \
unixODBC \
unixODBC-devel | grep "not installed"

若发现依赖没有安装,则使用 yum install 安装相应依赖

修改 hostname

参考: https://blog.csdn.net/tantexian/article/details/45958275

su - root

# 同时修改所有三个主机名:静态、瞬态和灵活主机名
hostnamectl set-hostname centos.java

# 手动更新/etc/hosts
sudo vim /etc/hosts
127.0.0.1 localhost centos.java

# 重启 centos
shutdown -r now
reboot -f

# 测试 hostname
hostname
ping -c 1 centos.java

SELINUX 和防火墙授权

  • 方式一: 手动添加端口授权

    su - root

    # 检查当前 linux 为 oracle 开启的端口
    semanage port -l | grep oracle

    # 若没有开放端口,则添加规则
    semanage port -a -t ssh_port_t -p tcp 1521

    # 检查 linux 防火墙是否已暴露端口
    firewall-cmd --permanent --list-port

    # 若防火墙没有开放对应端口,则开启
    firewall-cmd --zone=public --add-port=1521/tcp --permanent

    # 重载防火墙
    firewall-cmd --reload
  • 方式二: 也可以关闭 selinux 与防火墙,若未关闭,则使用以下操作

    # 关闭 selinux 
    vim /etc/selinux/config
    # 添加 SELINUX=disabled ,若有SELINUX则将值设置成disabled

    # 关闭防火墙
    systemctl stop firewalld

创建 Oracle 用户和用户组

su - root
# 新建用户组
groupadd oinstall
groupadd dba
groupadd oper

# 新建用户
# -g:加入主要组、-G:加入次要组 、-M:不要自动建立用户的登入目录 -s<shell>:指定用户登入后所使用的shell
useradd oracle -g oinstall -G dba,oper

# 设置oracle用户的密码
passwd oracle
# 这里我使用的密码是 oracle
# 检查用户
id oracle
# uid=1001(oracle) gid=1001(oinstall) 组=1001(oinstall),1002(dba),1003(oper) 表示创建用户成功

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

su - root
mkdir -p /db/app/oracle

# Oracle 数据文件存放位置
mkdir -p /db/app/oracle/data

# Oracle 安装日志存放位置
mkdir -p /db/app/oracle/inventory

# Oracle 快速恢复区
mkdir -p /db/app/oracle/fast_recovery_area

chown -R oracle:oinstall /db/app/oracle
chmod 775 /db/app/oracle

设置 Oracle 用户环境变量

# 切换到 oracle 用户,修改配置
# 注意,切换用户时切记要加 "-",加 "-" 会拥有目标用户的环境变量,不加 "-" 则没有
su - oracle
# 密码是之前设置的,我这里设置的是 oracle
  • 添加配置 vim ~/.bash_profile
# Oracle Settings
export TMP=/tmp
umask 022

export ORACLE_HOSTNAME=centos.java
export ORACLE_BASE=/db/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
# 数据库实例名
export ORACLE_SID=orcl 

export PATH=$PATH:$ORACLE_HOME/bin

source ~/.bash_profile 使配置生效

修改内核参数

su - root 修改 /etc/sysctl.conf

kernel.shmmni = 2048 
# kernel.shmmax 是单个共享内存段的最大值,一般设置为本机物理内存 的一半,单位为 byte,比如物理内存是16G,这个值就是8G *1024 * 1024 * 1024=1073741824
kernel.shmmax = 1073741824
# kernel.shmall 配置物理内存的四分之一,单位是 k, 比如物理内存是16G,这个值就是4G*1024*1024=4194304
kernel.shmall = 524288
kernel.sem = 250 32000 100 128

fs.aio-max-nr = 1048576
fs.file-max = 6815744
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 = 1048586

使新内核配置生效 /sbin/sysctl -p

修改用户限制文件

  • 操作身份 su - root

  • 限制 Oracle用户的 shell 权限 vim /etc/security/limits.conf

    oracle      soft          nproc         2047
    oracle hard nproc 16384
    oracle soft nofile 1024
    oracle hard nofile 65536
    oracle soft stack 10240
  • 修改 /etc/pam.d/login 文件 vim /etc/pam.d/login

    session  required   /lib64/security/pam_limits.so
    session required pam_limits.so
  • 修改 /etc/profile 文件vim /etc/profile (unset i 和 unset -f pathmunge 之前) 追加下面配置

    if [ $USER = "oracle" ]; then
    if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
    else
    ulimit -u 16384 -n 65536
    fi
    fi

保存后,执行 source /etc/profile

安装 Oracle

切换到 oracle 解压包目录 cd /oracle/database

图形安装 Oracle

# 可以启动oracle图形界面安装向导
cd /oracle/database
./runInstall

命令行安装 Oracle

  • 备份文件
    cp /oracle/database/response/db_install.rsp /oracle/database/response/db_install.rsp.bak

  • 编辑静默安装响应文件
    vim /oracle/database/response/db_install.rsp

    # 安装类型
    oracle.install.option=INSTALL_DB_SWONLY
    # 设置安全更新(填 true,否则会无限提醒邮件地址有问题,终止安装)
    DECLINE_SECURITY_UPDATES=true
    # 安装组
    UNIX_GROUP_NAME=oinstall
    INVENTORY_LOCATION=/db/app/oracle/inventory
    SELECTED_LANGUAGES=en,zh_CN
    ORACLE_HOSTNAME=centos.java
    ORACLE_HOME=/db/app/oracle/product/11.2.0
    ORACLE_BASE=/db/app/oracle
    # oracle版本
    oracle.install.db.InstallEdition=EE
    #自定义安装,否 false,使用默认组件
    oracle.install.db.isCustomInstall=true
    oracle.install.db.DBA_GROUP=dba
    oracle.install.db.OPER_GROUP=dba
  • 开始安装

    # 切换身份
    su - oracle
    # 切换到软件解压包目录
    cd /oracle/database

    # ./runInstaller -force -silent -noconfig -responseFile /oracle/database/response/db_install.rsp

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

    # 安装期间可以使用tail命令监看oracle的安装日志
    tail -f /db/app/oracle/inventory/logs/installActions201*.log
  • 执行配置脚本(新开一个终端窗口)

    su - root
    sh /db/app/oracle/inventory/orainstRoot.sh
    sh /db/app/oracle/product/11.2.0/root.sh
  • 返回之前的终端窗口 按 “Enter” 键继续, 安装完成,提示 Successfully Setup Software

  • 配置静默监听

    su - oracle
    netca -silent -responsefile /oracle/database/response/netca.rsp
    # 执行上述命令可能会遇到错误
    解决方式: export DISPLAY=172.20.1.1:1.0
    再次执行 netca -silent -responsefile /oracle/database/response/netca.rsp
    # 查看1521端口是否在监听中
    netstat -tnulp | grep 1521
  • 创建数据库(静默方式建立新库,同时也建立一个对应的实例)
    修改配置文件 切换身份 su - oracle 然后执行 vim /oracle/database/response/dbca.rsp,配置参考如下

    GDBNAME= "orcl"
    SID ="orcl"
    SYSPASSWORD= "oracle"
    SYSTEMPASSWORD= "oracle"
    SYSMANPASSWORD= "oracle"
    DBSNMPPASSWORD= "oracle"
    DATAFILEDESTINATION=/db/app/oracle/data
    RECOVERYAREADESTINATION=/db/app/oracle/fast_recovery_area
    CHARACTERSET= "AL32UTF8"
    # 单位为 MB,一般设置为物理内存的80%
    TOTALMEMORY= "1638"
  • 执行建库操作

    dbca  -silent  -createDatabase   -responseFile  /oracle/database/response/dbca.rsp     
    可以新开一个窗口 tail -f /db/app/oracle/cfgtoollogs/dbca/orcl/orcl.log 查看操作日志
  • 验证安装

    # 查看oracle实例进程
    ps -ef | grep ora_ | grep -v grep

    # 查看监听状态
    lsnrctl status

    # 关闭监听
    # lsnrctl stop

    # 开启监听
    # lsnrctl start

    # 登录 sqlplus 查看实例状态
    sqlplus / as sysdba
    select status from v$instance;

    # 使用 dba 权限连接 Oracle
    # connect / as sysdba

    # 关闭数据库服务
    #shutdown immediate;

    # 开启数据库服务, 遇到环境变量的问题,参考 https://blog.51cto.com/fuwenchao/1361135
    startup;

    # 退出管理员
    quit;或 exit;

    # 查看数据库编码
    select userenv('language') from dual;

    # 查看数据库版本信息
    select * from v$version;

    # 激活 scott 用户
    alter user scott account unlock;
    alter user scott identified by tiger;
    select * from all_users;

Oracle 开机自启动设置

  • 修改 /db/app/oracle/product/11.2.0/bin/dbstart
    将 ORACLE_HOME_LISTNER=$1 修改为 ORACLE_HOME_LISTNER=$ORACLE_HOME
  • 修改 /db/app/oracle/product/11.2.0/bin/dbshut
    将 ORACLE_HOME_LISTNER=$1 修改为 ORACLE_HOME_LISTNER=$ORACLE_HOME

  • 修改 /etc/oratab 文件
    将 orcl:/db/app/oracle/product/11.2.0:N 中最后的 N 改为 Y,成为 orcl:/db/app/oracle/product/11.2.0:Y

  • 输入 dbshut 和 dbstart 测试
    dbshut (Oracle 监听停止,进程消失)
    dbstart (Oracle监听启动,进程启动)

  • 切换到 root 账户建立自启动脚本

    su - root
    vi /etc/rc.d/init.d/oracle
  • 添加以下内容(有些值如 ORACLE_HOME 和 ORACLE_USER 等根据实际情况可以修改)

    #! /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=/db/app/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
  • 设置为开机启动

    systemctl enable oracle
    # 修改 /etc/init.d/oracle 服务文件权限
    # chmod 755 /etc/init.d/oracle
    # chkconfig oracle on
  • 进行 service oracle start/stop/restart 测试

  • reboot 重启查看 Oracle 监听和实例进程均能自动启动

    # 查看1521端口是否在监听中
    netstat -tnulp | grep 1521
    # 查看oracle实例进程
    ps -ef | grep ora_ | grep -v grep
  • 开机启动问题:

    # oracle ORA-12547: TNS:lost contact
    # 解决方法
    cd /db/app/oracle/product/11.2.0/bin/
    chmod 6751 oracle

    # TNS-12555: TNS:permission denied
    # 解决方法
    cd /var/tmp
    chown -R oracle:oinstall .oracle
Author: csthink
Link: csthink.com/oracle/oracle_install.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
支付宝打赏
微信打赏