美文网首页
如何在 centos 7下安装 Oracle 11g

如何在 centos 7下安装 Oracle 11g

作者: tealyxu | 来源:发表于2019-05-04 19:04 被阅读0次

    第一步下载问题

    centos 下要用wget 下载,发现老要登录直接wget 是不行的。

    wget --http-user=[oracle网站登录账号] --http-password=[oracle 网站登录密码] --no-check-certificate --output-document=linux.zseries64_11gR2_database_1of2.zip "https://download.oracle.com/otn/linux/oracle11g/R2/linux.x64_11gR2_database_1of2.zip?AuthParam=1556897560_f2690b16de8954cc6d804e61753c6838"

    关键就是最后那个 AuthParam 怎么拿到呢?

    用Chrome,或者Firefox 直接在 https://oracle.com/technetwork/database/enterprise-edition/downloads/index.html 点击下载文件,之后暂停下载。chrome://downloads/  复制出来的链接就行了。


    第二步解压问题

    cat linux.zseries64_11gR2_database_1of2.zip linux.zseries64_11gR2_database_1of2.zip > linux.zseries64_11gR2_database.zip

    unzip linux.zseries64_11gR2_database.zip

    第三步依赖解决

    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

    然后是检查是否有包没安装成功

    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"

    centos 7 必定会报 pdksh not  installed

    wget http://vault.centos.org/5.11/os/x86_64/CentOS/pdksh-5.2.14-37.el5_8.1.x86_64.rpm

    rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm

    第四步Oracle 用户设置

    添加oracle用户组及用户

    groupadd oinstall
    groupadd dba
    groupadd asmadmin
    groupadd asmdba
    useradd -g oinstall -G dba,asmdba oracle -d /home/oracle

    添加完成后,查看oracle用户
    id oracle

    初始化oracle用户的密码
    passwd oracle

    限制Oracle 用户shell权限

    修改 Oracle 用户 ~/.bash_profile

    umask 022
    export ORACLE_BASE=/apps/svr/oracle
    export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db
    export ORACLE_SID=orcl
    export TNS_ADMIN=$ORACLE_HOME/network/admin
    export ORA_NLS10=$ORACLE_HOME/nls/data
    export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
    export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
    export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    export SQLPATH=$ORACLE_HOME/sqlplus/admin:/home/oracle/admin/sql
    ulimit -u 16384 -n 63536 #linux
    export ORACLE_HOSTNAME=centos-oracle
    export LC_ALL="en_US"
    export LANG="en_US"
    export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"

    由于Oracle 官方文档里面有个 /u01/app/oracle 这样的例子,结果网上很多都照抄,其实可以不要那个/u01,据说是为了兼容老机器。

    修改/etc/security/limits.conf 添加如下内容: 

    oracle              soft     nproc   2047
    oracle              hard    nproc  16384
    oracle              soft     nofile   1024
    oracle              hard    nofile   65536

    修改验证登录文件

    vim /etc/pam.d/login

    session required pam_limits.so
    session required /lib64/security/pam_limits.so

    修改 /etc/profile 添加:

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

    创建oracle软件安装目录

    mkdir -p /apps/svr/oracle
    chown -R oracle:oinstall /apps/svr/oracle
    chmod -R 775 /opt

    内核参数优化

    kernel.shmmax oracle 文档说设置为物理内存的一半;1073741824 这个值是1G 自己乘一下即可。
    其他参数是Oracle 建议值。

    修改/etc/sysctl.conf 文件 添加如下内容:

    vim /etc/sysctl.conf 

    添加以下参数

    fs.aio-max-nr = 1048576
    fs.file-max = 6815744
    kernel.shmall = 2097152
    kernel.shmmax = 4294967296
    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

    退出编辑后执行以下命令应用修改
    /sbin/sysctl -p

    交换分区设置(非必有)

    由于我在阿里云安装系统的时候没有设置交换分区。在安装过程中发现没有交换分区走不下去。
    于是必须先创建个交换分区。

    交换分区创建

    先检查一下, 是否已经有交换分区

    swapon -s

    如没有则执行下面的命令创建,8192 是8G 的意思,Oracle 要求 交换分区 >= 物理内存
    dd if=/dev/zero of=/swapfile bs=1M count=8192
    chown root:root /swapfile
    chmod 0600 /swapfile
    mkswap /swapfile
    swapon /swapfile

    启动自动挂载

    vim /etc/fstab
    添加这行进去
    /swapfile    swap    swap    default   0 0


    前戏到这里才结束

    为了方便切换 Oracle 用户 修改 vim ~/.bashrc 

    添加这句 alias suo='su - oracle', 然后 source ~/.bashrc 

    编辑安装默认应答文件

    应答文件在 解压包的 response 目录下。copy 一份出来找个地方放

    /apps/svr/etc/response/db_install.rsp 按照下面这个改

    https://blog.51cto.com/loofeer/1119713

    ORACLE_HOSTNAME 自己配置在 /etc/hosts 里面的值举个例子

    127.0.0.1 centos_oracle

    安装前必定要做的, 指定Oracle 安装清单保存位置,不然会报错安装不下去。

    vim /etc/oraInst.loc

    添加这两行
    inventory_loc=/apps/svr/oraInventory
    inst_group=oinstall

    编辑好 db_install.rsp 之后运行cd 到一开始解压的文件夹我的路径是/apps/svr/database

    su oracle

    ./runInstaller -silent -debug -force -noconfig -IgnoreSysPreReqs -ignorePrereq -responseFile /apps/svr/etc/response/db_install.rsp

    debug 在安装过程中会展示日志。安装的时候其实有些错误,没仔细看,回头补一下【mark】

    $ The following configuration scripts need to be executed as the "root" user.

    #!/bin/sh
    #Root scripts to run
    /apps/svr/oracle/product/11.2.0/db/root.sh
    To execute the configuration scripts:
         1. Open a terminal window
         2. Log in as "root"
         3. Run the scripts
         4. Return to this window and hit "Enter" key to continue

    su 到root 之后添加两个环境变量,不然跑了会报错。
    vim /etc/profile
    export ORACLE_OWNER = oracle
    export ORACLE_HOME =  /apps/svr/oracle/product/11.2.0/db

    网友 文章里有 orainstRoot.sh 这个,需要跑,但是我安装完没有这个文件 有点担心~~

    配置默认监听

    netca /silent /responsefile /apps/svr/etc/response/netca.rsp

    查看监听状态

    netstat -tnulp | grep 1521

    静默安装数据库实例

    编辑dbca 应答文件

    vim /apps/svr/etc/response/dbca.rsp

    主要参考:https://blog.csdn.net/Kenny1993/article/details/75038670

    source ~/.bash_profile
    dbca -silent -responseFile /apps/svr/etc/response/dbca.rsp

    完了之后在命令行输入
    sqlplus / as sysdba 登录查看实例信息。【这里也踩了个坑,看问题三】

    顺便设置 scott 密码

    alter user scott account unlock;
    lter user scott identified by tiger;

    设置oracle 开机启动

    回到root 用户,修改 dbstart

    vim $ORACLE_HOME/bin/dbstart
    ORACLE_HOME_LISTNER=$ORACLE_HOME

    修改 dbshut
    vim $ORACLE_HOME/bin/dbshut
    ORACLE_HOME_LISTNER=$ORACLE_HOME

    vim /etc/oratab
    orcl:/db/app/oracle/product/11.2.0:Y

    vim /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=/apps/svr/oracle/product/11.2.0/db
    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


    连接Oracle 客户端

    https://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html

    采坑历程

    我遇到也是这个报错信息

    问题1 :

    [FATAL] [INS-32035] Unable to create a new central inventory at the specified location.
    CAUSE: The central inventory location provided is not empty.
    ACTION: Please provide another location for the inventory, or clean up the current location.

    问题2:

    [WARNING] [INS-32055] The Central Inventory is located in the Oracle base.
    CAUSE: The Central Inventory is located in the Oracle base.
    ACTION: Oracle recommends placing this Central Inventory in a location outside the Oracle base directory.

    问题3

    dbstart 报错

    /apps/svr/oracle/product/11.2.0/db/bin/dbstart: Starting up database "orcl"
    Sat May  4 18:51:18 CST 2019
    SP2-0642: SQL*Plus internal error state 2021, context 1:1821:0
    Unsafe to proceed
    SP2-1503: Unable to initialize Oracle call interface
    SP2-0152: ORACLE may not be functioning properly
    root: Error: Database instance "orcl" NOT started.

    发现是日期环境变量写错了,这个是正确的在 oracle 用户目录下的

    vim /home/oracle/.bash_profile

    export NLS_DATE_FORMAT='YYYY-MON-DD HH24:MI:SS

    参考文章

    Oracle 官方安装文档

    https://docs.oracle.com/cd/E11882_01/install.112/e24326/toc.htm#BHCBCFDI

    Oracle中文安装文档

    https://www.oracle.com/technetwork/cn/articles/revitt-oem-096363-zhs.html#2

    比较完整的安装文档:

    https://www.jianshu.com/p/b4200e721bfd

    http://blog.itpub.net/22664653/viewspace-1062585

    https://blog.csdn.net/Kenny1993/article/details/75038670

    https://blog.51cto.com/niubdada/2164071

    分配交换分区的方法

    https://blog.51cto.com/lianlianw/1742472

    https://zhangshuqiao.org/2018-06/Linux%E4%B8%8B%E5%A2%9E%E5%8A%A0%E3%80%81%E5%88%A0%E9%99%A4Swap%E6%96%87%E4%BB%B6/

    db_install.rsp 详细解析

    https://blog.51cto.com/loofeer/1119713

    创建数据库实例

    https://blog.51cto.com/hbxztc/1884833

    https://blog.51cto.com/hbxztc/1906532

    运行 sqlplus / as sysdba 报错解决

    https://community.oracle.com/docs/DOC-888935

    相关文章

      网友评论

          本文标题:如何在 centos 7下安装 Oracle 11g

          本文链接:https://www.haomeiwen.com/subject/yszotqtx.html