zoukankan      html  css  js  c++  java
  • CentOS7.6静默(无图形化界面)安装Oracle 11g

    一、准备工作

    1.准备CentOS 7 系统环境

    由于是使用静默模式(silent)安装的,无需使用图形化界面,我选择了最小安装的服务器版的CentOS 7。安装完成后,只有命令行界面。

    2.下载 Oracle 11g

    (1)Oracle官方网站:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html 我的机器安装的是CentOS7 64位系统,因此下载的Oracle版本也是64位的

    特别注意:11.2.0.2.0  zlinux64版本的Oracle是安装在IBM服务器的,CentOS 7是无法安装的。

    (2)下载完成后,有两个压缩文件

    linux.x64_11gR2_database_1of2.zip 和 linux.x64_11gR2_database_2of2.zip

    3.通过Xftp将压缩文件上传到 /db/

    4.安装依赖包,安装依赖包之前,个人建议将yum源修改为aliyun源,下载速度快些,执行如下命令即可: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
    yum clean all
    yum makecache

    若提示:
    正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 失败:未知的名称或服务。
    则执行:echo 'nameserver 8.8.8.8'>>/etc/resolv.conf

    5.修改成功后,安装如下依赖包:

    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

    6.安装完成后显示如下界面

     

    7.使用如下命令检查依赖是否安装完整

    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"

    8.发现 pdksh 没有安装

    9.执行 yum -y install pdksh,发现CentOS 7 没有相关安装包可用

    10.通过wget命令直接下载pdksh的rpm包,我下载到了/tmp/

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

    下载完成后,进入 /tmp/

    cd /tmp/
    rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm

    11.再次检查依赖包是否安装完整

    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"

     到此依赖包安装完整

    12.添加oracle用户组和用户

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

    13.添加完成后,查看oracle用户

    id oracle

    14.初始化oracle用户的密码

    passwd oracle

     说明:密码需输入两次,提示密码强度若不用管,两次一致后会提示设置成功

    15.配置hostname(本机IP映射)

    vim /etc/hosts
    192.168.154.154 centos-oracle

    16.测试hostname

    ping -c 3 centos-oracle

     17.优化OS内核参数,kernel.shmmax 参数设置为物理内存的一半

    vim /etc/sysctl.conf
    fs.aio-max-nr=1048576
    fs.file-max=6815744
    kernel.shmall=2097152
    kernel.shmmni=4096
    kernel.shmmax = 1073741824
    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=1048586

    18.使参数生效

    sysctl -p

     19.限制oracle用户的shell权限

    vim /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   /lib64/security/pam_limits.so
    session  required   pam_limits.so
    vim /etc/profile
    if [ $USER = "oracle" ]; then
    if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
    else
    ulimit -u 16384 -n 65536
    fi
    fi

    20.创建oracle安装目录

    mkdir -p /db/app/oracle/product/11.2.0
    mkdir /db/app/oracle/oradata
    mkdir /db/app/oracle/inventory
    mkdir /db/app/oracle/fast_recovery_area
    chown -R oracle:oinstall /db/app/oracle
    chmod -R 775 /db/app/oracle

    21.配置oracle用户环境变量

    su - oracle
    vim .bash_profile
    umask 022
    export ORACLE_HOSTNAME=centos-oracle
    export ORACLE_BASE=/db/app/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"

    22.以上配置完成后,个人建议重启下系统

    reboot

    23.解压oracle压缩文件到 /db

    cd /db/
    unzip linux.x64_11gR2_database_1of2.zip -d /db
    unzip linux.x64_11gR2_database_2of2.zip -d /db

    24.解压完成后

    mkdir /db/etc/
    cp /db/database/response/* /db/etc/
    vim /db/etc/db_install.rsp
    oracle.install.option=INSTALL_DB_SWONLY
    DECLINE_SECURITY_UPDATES=true
    UNIX_GROUP_NAME=oinstall
    INVENTORY_LOCATION=/db/app/oracle/inventory
    SELECTED_LANGUAGES=en,zh_CN
    ORACLE_HOSTNAME=centos-oracle
    ORACLE_HOME=/db/app/oracle/product/11.2.0
    ORACLE_BASE=/db/app/oracle
    oracle.install.db.InstallEdition=EE
    oracle.install.db.isCustomInstall=true
    oracle.install.db.DBA_GROUP=dba
    oracle.install.db.OPER_GROUP=dba

     二、开始安装

    1.切换到oracle用户

    su - oracle
    # 先cd到/db/database/目录然后执行
    ./runInstaller -silent -ignorePrereq -responseFile /db/etc/db_install.rsp

    报错:centos 安装oracle 报Checking swap space: 0 MB available, 150 MB required. Failed <<<<【备注:若无此错误请忽略,我在华为云服务器挂载磁盘且安装位置设置为/mnt目录,此情景下安装oracle 11g时发送这样的错误,一般情况不会出现此错误】

      解决办法:

    (1)检查 Swap 空间在设置 Swap 文件之前,有必要先检查一下系统里有没有既存的 Swap 文件。运行以下命令:

    swapon -s

    如果返回的信息概要是空的,则表示 Swap 文件不存在。

    (2)检查文件系统在设置 Swap 文件之前,同样有必要检查一下文件系统,看看是否有足够的硬盘空间来设置 Swap 。运行以下命令:

    df -hal

    (3)创建并允许 Swap 文件下面使用 dd 命令来创建 Swap 文件。检查返回的信息,还剩余足够的硬盘空间即可。

    dd if=/dev/zero of=/swapfile bs=1024 count=512k

    参数解读:if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >bs=bytes:同时设置读入/输出的块大小为bytes个字节count=blocks:仅拷贝blocks个块,块大小等于bs指定的字节数。

    (4)格式化并激活 Swap 文件上面已经创建好 Swap 文件,还需要格式化后才能使用。运行命令:

    mkswap /swapfile

    激活 Swap ,运行命令:

    swapon /swapfile

    (5)以上步骤做完,再次运行命令:

    swapon -s

    (6)你会发现返回的信息概要:

    Filename Type Size Used Priority
    /swapfile file 524284 0 -1
    (7)如果要机器重启的时候自动挂载 Swap ,那么还需要修改 fstab 配置。用 vim 打开 /etc/fstab 文件,在其最后添加如下一行:

    vim /etc/fstab
    /swapfile swap swap defaults 0 0

    (8)最后,赋予 Swap 文件适当的权限:

    chown root:root /swapfile
    chmod 0600 /swapfile

    若无错误继续往下,若解决完以上错误继续执行一下命令:

    ./runInstaller -silent -ignorePrereq -responseFile /db/etc/db_install.rsp

    2.安装期间可以使用tail命令监看oracle的安装日志

    tail -f /db/app/oracle/inventory/logs/installActions2019-09-03_19-48-29PM.log

     安装完成,提示Successfully Setup Software.

    3.根据提示完成配置

    su root
    sh
    /db/app/oracle/inventory/orainstRoot.sh sh /db/app/oracle/product/11.2.0/root.sh

     

     4.配置静默监听

    su - oracle
    netca /silent /responsefile /db/etc/netca.rsp

    注意:若失败可能是由于系统setlinux未设置为disable,设置好后需要重启系统

    5.查看监听端口

    netstat -tnulp | grep 1521

    6.静默创建数据库   TOTALMEMORY 设置为总内存的80%

    切换为root用户

    su root
    vi
    /db/etc/dbca.rsp //打开文件后可通过搜索将“=”右边参数值补齐
    GDBNAME = "orcl"
    SID = "orcl"
    SYSPASSWORD = "oracle"
    SYSTEMPASSWORD = "oracle"
    SYSMANPASSWORD = "oracle"
    DBSNMPPASSWORD = "oracle"
    DATAFILEDESTINATION =/db/app/oracle/oradata
    RECOVERYAREADESTINATION=/db/app/oracle/fast_recovery_area
    CHARACTERSET = "AL32UTF8"
    TOTALMEMORY = "1638"

    7.执行静默建库(切换为oracle用户)

    su - oracle

    dbca -silent -responseFile /db/etc/dbca.rsp

    8.查看oracle实例进程

    ps -ef | grep ora_ | grep -v grep

    9.查看监听状态

    lsnrctl status

    10.切换为oracle用户,登录sqlplus,查看实例状态

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

    注意:此处会报错

      解决办法:输入命令startup

    startup

    若依旧有问题,则ls命令查看  /db/app/oracle/admin/orcl/pfile/下有没有init.ora.*****类似的文件,拷贝覆盖报错的文件

    cp /db/app/oracle/admin/orcl/pfile/init.ora.8420191849 /db/app/oracle/product/11.2.0/dbs/initORCL.ora

    再次startup即可成功

    再次查询即可正常显示

     (1)查看数据库编码

    select userenv('language') from dual;

    (2)查看数据库版本信息

    select * from v$version;

    (3)激活scott用户

    alter user scott account unlock; //若遇到su - oracle用户下无法解锁该用户,请用远程连接工具通过system用户进行解锁,这里不影响
    alter user scott identified by tiger; //若遇到su - oracle用户下无法修改密码,请用远程连接工具通过system用户进行修改,这里不影响
    select username from all_users;

    11.Navicat远程连接Oracle

    (1)开放1521端口

    firewall-cmd --zone=public --add-port=1521/tcp --permanent
    firewall-cmd --reload

    (2)官方网站http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

    下载 instantclient-basic,解压压缩文件

     (3)下载Navicat:http://pan.baidu.com/s/1c2GP9U4

    ① 打开Navicat,工具→选项

    ② 打开OCI界面,在右侧OCI library一栏中选择instantclient-basic解压目录下的oci.dll,然后点击确定。

    该文件可以不用本地安装oracle即可远程连接,若本地安装过oracle也可使用本地dll文件,如我本地的为:D:softwareworkSoftdatabaseSoftOracleSoftproduct11.2.0dbhome_1inoci.dll

    ③ 重启Navicat,点击连接,选中Oracle

     

    ④ IP为Oracle服务器的IP地址,服务名为Oracle的实例名,可忽略大小写

    select instance_name from v$instance;

    ⑤ 用户名使用刚激活的scott,密码为tiger,填完以上信息后点击连接测试

    到此Navicat远程连接Oracle数据库成功

    12.设置Oracle开机启动

    #可能出现的问题oracle ORA-12547: TNS:lost contact,故此处提前设置好权限
    cd /db/app/oracle/product/11.2.0/bin/
    chmod 6751 oracle
    vi /db/app/oracle/product/11.2.0/bin/dbstart
    # 查找并设置值 ORACLE_HOME_LISTNER=$ORACLE_HOME vi /db/app/oracle/product/11.2.0/bin/dbshut
    # 查找并设置值 ORACLE_HOME_LISTNER=$ORACLE_HOME vi /etc/oratab
    # 默认为N,将N改为Y orcl:/db/app/oracle/product/11.2.0:Y
    vi /etc/rc.d/init.d/oracle //默认没有该文件

    (1)注意:默认没有该文件,复制以下内容到打开的白板界面

    #! /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

    (2)授权

    chmod 750 /etc/rc.d/init.d/oracle 

    (3)检查一下脚本能否正确执行 

    cd /etc/rc.d/init.d 
    ./oracle start 
    ./oracle stop 

    (4)加入自动启动行列,执行如下命令: 

    ln -s /etc/rc.d/init.d/oracle /etc/rc2.d/S61oracle 
    ln -s /etc/rc.d/init.d/oracle /etc/rc3.d/S61oracle 
    ln -s /etc/rc.d/init.d/oracle /etc/rc4.d/S61oracle 
    ln -s /etc/rc.d/init.d/oracle /etc/rc0.d/K61oracle 
    ln -s /etc/rc.d/init.d/oracle /etc/rc6.d/K61oracle 
    chkconfig --level 234 oracle on 
    chkconfig --add oracle

    注意:最后一行命令需要oracle服务状态停止时执行有效(./oracle stop)

    重启后即可正常连接 

    三、重启若出现 no listener情况,且startup无效

    Solution:

    1. Check if you have correct ORACLE_HOME, ORACLE_SID and PATH environments.

    2. Check if /tmp/.oracle and /var/tmp/.oracle directories exists.

    3. Check permissions for those directories for current user who is trying to start listener.

    mkdir /var/tmp/.oracle
    mkdir /tmp/.oracle
    chown -R oracle:oinstall /var/tmp/.oracle /tmp/.oracle
    chmod -R 01777 /var/tmp/.oracle /tmp/.oracle

    4. Run the listener, problem solved:

    lsnrctl start

    5. If you still cant start listener grant 777 permissions to oracle on /tmp directory.

    chmod -R 777 /tmp /var/tmp

    6. ***重要:***若提示root用户都无权限在/var/tmp 和 /tmp下创建.oracle,则使用chattr命令移除/var/tmp 和 /tmp 目录的i属性,重新创建即可

    chattr -i /var/tmp //去除i属性

     四、执行lsnrctl start后若出现以下情况

    解决方法:

    在/db/app/oracle/product/11.2.0/network/admin/listener.ora里面添加一行

    SID_LIST_LISTENER = 
      (SID_LIST = 
        (SID_DESC = 
        (GLOBAL_DBNAME = orcl)
        (SID_NAME = orcl)
      )
    )

    注:里面的orcl根据你安装的数据库实例名确定,我用此法解决了这个报错。

    五、后续问题解决

    1.意外断电或意外中断服务器导致oracle不能正常连接问题及解决:

    问题1:ORA-01081: cannot start already-running ORACLE - shut it down first
    解决1:

    shutdown immediate
    startup mount

    问题2:ORA-01102: cannot mount database in EXCLUSIVE mode(重点解决)

    2.分析原因:

    2.1在HA系统中,已经有其他节点启动了实例,将双机共享的资源(如磁盘阵列上的裸设备)占用了;

    2.2说明Oracle被异常关闭时,有资源没有被释放,一般有以下几种可能,

    2.2.1Oracle的共享内存段或信号量没有被释放;

    2.2.2Oracle的后台进程(如SMON、PMON、DBWn等)没有被关闭;

    2.2.3用于锁内存的文件lk<sid>和sgadef<sid>.dbf文件没有被删除。

    3.具体解决办法:

    (1)查$ORACLE_HOME/dbs目录:

    cd $ORACLE_HOME/dbs
    ls lk*
    lkORCL

    果然,lk<sid>文件没有被删除。将它删除掉

    rm lk*

    (2)再次启动startup mount时又遇到下面的错误,不过别担心,继续后面的操作就搞定

    (3)查看共享内存段

    ipcs -map

    根据ID号清除共享内存段

    ipcrm –m 1409040

    我这里操作是没有成功的,不过执行了下面的操作就ok了!

    (4)查看信号量

    ipcs -s

    清除oracle的信号量

    ipcrm -s 360448

    再次查询确认

    ipcs -s

    ------ Semaphore Arrays --------

    key  semid  owner  perms   nsems

    再查询共享内存段也ok了!

    ipcs -m

    (5)如果是Oracle进程没有关闭,

    kill -9 <PID>

    (6)执行上面5个步骤即可成功解决该错误!

  • 相关阅读:
    Docker找不到私有nuget服务
    EF中字符串转数字排序
    一个简单的注册页面
    【转】【数据库SQL】SQL查询和替换含有回车,空格,TAB,等
    RGB颜色记录
    javascript中event.keycode
    java基础总结
    面试干货
    jQuery、实例大全
    使用Sql按日期条件查询
  • 原文地址:https://www.cnblogs.com/wanderwei/p/11458979.html
Copyright © 2011-2022 走看看