美文网首页
Centos7/8 安装Oracle数据库

Centos7/8 安装Oracle数据库

作者: 清茶苦竹 | 来源:发表于2020-08-06 12:05 被阅读0次

    0、概述

    该方案适用于真机和虚拟机环境,并实测在云主机、Hyper-v、Vmware下均可正常使用;

    该方案对内存要求不高,本人尝试过2G也可以正常安装,1G内存暂且没有尝试,感觉把swap设置高点应该也可以安装使用。

    如果内存低于4G建议还是设置一下swap

    先执行free -m,看看系统有没有swap分区

    free -m
    

    如果有,就会出现swap,2g左右即可,这时就可以直接从1开始看,后面设置swap的内容就不需要了解了。

    如果没有,先执行下面的命令

    dd if=/dev/zero of=/home/swap bs=1024 count=2097152
    mkswap  /home/swap
    swapon  /home/swap
    

    上面指令的意思如下:

    dd if=/dev/zero of=/home/swap bs=1024 count=2097152 #bs为单位,count为设置的大小2048*1024
    mkswap  /home/swap     #格式化交换文件
    swapon  /home/swap     #立即启用交换分区文件, 要停止使用新创建的swap文件,只要执行 swapoff/home/swap命令即可.
    

    执行完成后,查看分区情况 free -m

    要在/etc/fstab文件中添加一行,不然重启后swap就失效

    添加内容:/home/swap swap swap defaults 0 0

    vim /etc/fstab
    

    截图与文件描述可能不对应,我这个swap是系统就已经有了,如果没有就按照图中的格式写入即可

    /home/swap swap swap defaults 0 0

    1、关闭防火墙

    执行如下代码:

    systemctl stop firewalld.service
    systemctl disable firewalld.service
    

    上面的代码意思如下:

    # systemctl stop firewalld.service --关闭防火墙
    
    # systemctl disable firewalld.service -- 禁止防火墙开机启动
    

    2、关闭selinux

    先执行下面的命令:

    setenforce 0
    

    在文件中设置SELINUX=disabled

    vim /etc/selinux/config 
    

    3、安装OracleDataBase依赖

    直接运行下面的代码即可

    centos 7

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

    centos 8

    dnf -y install binutils gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libgcc.i686 libstdc++ libstdc++-devel libXi libXtst libnsl make sysstat
    

    4、创建用户和用户组

    需要执行下面的bash代码

    groupadd oinstall
    groupadd dba
    useradd -g oinstall -G dba -m oracle
    groups oracle
    passwd oracle
    id oracle
    

    上面代码的意思如下:

    groupadd oinstall             #创建用户组oinstall
    groupadd dba                   #创建用户组dba
    useradd -g oinstall -G dba -m oracle  #创建oracle用户,并加入到oinstall和dba用户组
    groups oracle                #查询用户组是否授权成功
    passwd oracle                  #设置用户oracle的登陆密码,不设置密码,在CentOS的图形登陆界面没法登陆
    id oracle                          #查看新建的oracle用户
    

    5、修改内核参数(根据需要修改)

    MEMTOTAL=$(free -b | sed -n '2p' | awk '{print $2}')
    SHMMAX=$(expr $MEMTOTAL / 2)
    SHMMNI=4096
    PAGESIZE=$(getconf PAGE_SIZE)
    
    cat > /etc/sysctl.d/50-oracle.conf << EOF
    fs.aio-max-nr = 1048576
    fs.file-max = 6815744
    kernel.shmmax = $SHMMAX
    kernel.shmall = $(expr \( $SHMMAX / $PAGESIZE \) \* \( $SHMMNI / 16 \))
    kernel.shmmni = $SHMMNI
    kernel.sem = 250 32000 100 128
    kernel.panic_on_oops = 1
    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 --system
    
    .....
    .....
    * Applying /etc/sysctl.conf ...
    fs.file-max = 6815744
    kernel.sem = 250 32000 100 128
    kernel.shmmni = 4096
    kernel.shmall = 1073741824
    kernel.shmmax = 4398046511104
    kernel.panic_on_oops = 1
    net.core.rmem_default = 262144
    net.core.rmem_max = 4194304
    net.core.wmem_default = 262144
    net.core.wmem_max = 1048576
    net.ipv4.conf.all.rp_filter = 2
    net.ipv4.conf.default.rp_filter = 2
    fs.aio-max-nr = 1048576
    net.ipv4.ip_local_port_range = 9000 65500
    
    

    付上各个参数说明:
    fs.aio-max-nr:
    此参数限制并发未完成的请求,应该设置避免I/O子系统故障。
    fs.file-max:
    该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。
    kernel.shmall:
    该参数控制可以使用的共享内存的总页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB=16777216KB /4KB=4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求.
    kernel.shmmax:
    是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。至于导致系统下降的主要原因为在实例启动以及ServerProcess创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。
    官方建议值:
    32位linux系统:可取最大值为4GB(4294967296bytes)-1byte,即4294967295。建议值为多于内存的一半,所以如果是32为系统,一般可取值为4294967295。
    64位linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,例如,如果为12GB物理内存,可取1210241024*1024-1=12884901887。
    kernel.shmmni:
    该参数是共享内存段的最大数量。shmmni缺省值4096,一般肯定是够用了。
    kernel.sem:
    以kernel.sem = 250 32000 100 128为例:

    • 250是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。
    • 32000是参数semmns的值,表示系统内可允许的信号量最大数目。
    • 100是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。
    • 128是参数semmni的值,表示系统信号量集合总数。

    net.ipv4.ip_local_port_range:
    表示应用程序可使用的IPv4端口范围。
    net.core.rmem_default:
    表示套接字接收缓冲区大小的缺省值。
    net.core.rmem_max:
    表示套接字接收缓冲区大小的最大值。
    net.core.wmem_default:
    表示套接字发送缓冲区大小的缺省值。
    net.core.wmem_max:
    表示套接字发送缓冲区大小的最大值。

    使配置文件生效

    sysctl -p
    

    6、修改配置

    (1)修改limits.conf

    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
    oracle hard stack 10240
    

    第1行是设置进程数软限制;
    第2行是设置进程数硬限制;
    第3行是设置文件数软限制;
    第4行是设置文件数硬限制;

    (2)修改login

    vim /etc/pam.d/login
    

    添加以下内容

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

    (3)修改profile

    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
    

    使配置文件生效

    source /etc/profile
    

    (4)创数据库目录

    按序执行如下命令

    mkdir -p /data/oracle
    mkdir -p /data/oraInventory
    mkdir -p /data/database
    cd /data
    ll
    chown -R oracle:oinstall /data/oracle
    chown -R oracle:oinstall /data/oraInventory
    chown -R oracle:oinstall /data/database
    
    

    上面代码的意思如下:

    
    mkdir -p /data/oracle  #oracle数据库安装目录
    mkdir -p /data/oraInventory  #oracle数据库配置文件目录
    mkdir -p /data/database  #oracle数据库软件包解压目录
    cd /data
    ll          #创建完毕检查一下
    chown -R oracle:oinstall /data/oracle  #设置目录所有者为oinstall用户组的oracle用户
    chown -R oracle:oinstall /data/oraInventory
    chown -R oracle:oinstall /data/database
    

    (5)配置Oracle用户

    切换到oracle用户下

    su - oracle
    

    打开并编辑环境变量文件,配置oracle用户环境变量

    vim ~/.bash_profile
    

    在末尾添加

    export ORACLE_BASE=/data/oracle/oracle
    export ORACLE_SID=orcl
    

    使配置生效

    source ~/.bash_profile
    

    7、安装部署及配置

    (1)上传Oracle安装包

    创建一个文件夹

    mkdir /home/oracle/oradb
    

    (2)安装解压工具

    切换到root用户

    su - root
    

    安装解压工具

    yum install -y unzip zip
    

    (3)解压文件

    切换到oracle用户

    su - oracle 
    

    解压文件

    unzip xxx.zip
    

    (4)复制相应的模板

    为了不影响原来的文件内容(后面文件脚本内容会作修改),将相应的模板复制一份,当然也可以省略这步

    cd /home/oracle
    mkdir etc
    cp  /home/oracle/oradb/database/response/* /home/oracle/etc/
    

    切换到root用户

    su - root
    

    设置权限

    chmod 700 /home/oracle/etc/*.rsp
    

    (5)编辑文件内容

    切换到oracle用户

    su - oracle
    

    打开编辑db_install.rsp

    vim /home/oracle/etc/db_install.rsp
    

    找出以下项,并作修改(根据个人实际情况修改,比如我这边的oracle的目录是做过调整的)

    oracle.install.option=INSTALL_DB_SWONLY // 安装类型  
    UNIX_GROUP_NAME=oinstall // 安装组  
    INVENTORY_LOCATION=/database/oracle/oraInventory //INVENTORY目录(不填就是默认值)  
    ORACLE_HOME=/database/oracle/oracle/product/12/db_1  
    ORACLE_BASE=/database/oracle/oracle  
    oracle.install.db.InstallEdition=EE     // 企业版本  
    oracle.install.db.OSDBA_GROUP=dba  
    oracle.install.db.OSOPER_GROUP=oinstall  
    oracle.install.db.OSBACKUPDBA_GROUP=oinstall  
    oracle.install.db.OSDGDBA_GROUP=oinstall  
    oracle.install.db.OSKMDBA_GROUP=oinstall  
    oracle.install.db.OSRACDBA_GROUP=oinstall  
    oracle.install.db.config.starterdb.type=GENERAL_PURPOSE //数据库类型  
    oracle.install.db.config.starterdb.globalDBName=orcl  
    oracle.install.db.config.starterdb.SID=orcl  
    oracle.install.db.config.starterdb.memoryLimit=81920 //自动管理内存的内存(M)  
    oracle.install.db.config.starterdb.password.ALL=oracle//设定所有数据库用户使用同一个密码  
    SECURITY_UPDATES_VIA_MYORACLESUPPORT=false  
    DECLINE_SECURITY_UPDATES=true
    

    (6)开始安装

    执行db_install.rsp文件

    cd /home/oracle/oradb/database
    ./runInstaller -ignoreSysPrereqs -ignorePrereq -waitforcompletion \
    -showProgress -silent -responseFile /home/oracle/etc/db_install.rsp
    

    在安装快完成的时候会提示要切换到root用户执行两个脚本,这步跟着照做就是

    su - root 
    /data/oracle/oraInventory/orainstRoot.sh
    /data/oracle/oracle/product/12/db_1/root.sh
    

    (7)修改oracle用户环境变量

    切换到oracle用户,打开并编辑用户编辑变量文件

    su - oracle
    vim ~/.bash_profile
    

    按需求将以下内容加上

    export ROACLE_PID=oral12
    #export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
    export ORACLE_HOME=/data/oracle/oracle/product/12/db_1
    export PATH=$PATH:$ORACLE_HOME/bin
    export LANG="zh_CN.UTF-8"
    export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
    export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
    

    使配置生效

    source ~/.bash_profile
    

    (8)配置监听

    netca /silent /responsefile /home/oracle/etc/netca.rsp
    

    启动监听

    lsnrctl start
    

    (9)数据库安装

    修改静默建库文件

    vim /home/oracle/etc/dbca.rsp
    

    其中文件内容修改如下(根据实际情况修改)

    responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v12.2.0  
    gdbName=orcl  
    sid=orcl  
    databaseConfigType=SI  
    createAsContainerDatabase=true  
    numberOfPDBs=1  
    pdbName=orclpdb  
    templateName=/database/oracle/oracle/product/12/db_1/assistants/dbca/templates/General_Purpose.dbc  
    emExpressPort=5500  
    omsPort=0  
    characterSet=AL32UTF8  
    listeners=LISTENER  
    memoryPercentage=40  
    automaticMemoryManagement=false  
    totalMemory=0
    

    执行静默建库

    dbca -silent -createDatabase  -responseFile  /home/oracle/etc/dbca.rsp
    

    此时数据库已安装成功

    (10)登录数据库开启实例

    sqlplus / as sysdba
    SQL>startup
    

    8、一些优化和远程连接配置

    (1) 数据库开机后自启动

    先修改etc目录下的oratab文件

    vim /etc/oratab
    

    将下面的结尾改成Y


    修改etc目录下的,自启动文件

    vi /etc/rc.local 
    

    在目录后面加上如下指令:

    su - oracle -c 'lsnrctl start'
    su - oracle -c 'dbstart'

    效果如下图:

    重启linux

    你会发现还是不行!!!!哈哈哈

    原因是啥呢,是文件的权限不够,但是不是这个/etc/rc.local文件,这个文件是个软连接,用 ll 命令找到真实文件位置:

    ll /etc/rc.local
    

    发现这个文件的真实文件其实rc.d/rc.local,再次对这个真实文件用ll命令

    ll /etc/rc.d/rc.local
    

    如果不是 -rwxr-xr-x 的话那就是权限不够了,需要授权执行下述授权命令

    chmod  755  /etc/rc.d/rc.local
    

    至此就完成了,开机自启的设置,重启后就生效了

    (2) sqlplus优化

    在默认的sqlplus的使用过程中发现是比较难用的,最好的例子就是不能用退格键以及掉出历史命令的上下键,这里介绍退格键的改进,至于掉出历史命令的上下键可参考文末的文章

    切换至oracle用户

    su - oracle
    

    打开并编辑用户环境变量配置文件

    vim ~/.bash_profile
    

    在文件末尾加上以下代码并保存退出

    stty erase ^h
    

    使配置文件生效

    source ~/.bash_profile
    

    此时再进入sqlplus测试发现,退格键已经能用了

    (3)Linux重启后sqlplus无效

    今oracle的环境变量,配置到了~/.bash_profile文件中。在虚拟机中,echo $ORACLE_HOME能正常显示环境变量,但是,用xshell每次重新连接,环境变量就会失效,需要重复手动执行 source ~/.bash_profile

    用图形界面登录时,系统会读取~/.bash_profile中的配置信息,所以环境变量可以生效。
    但是用命令行登录,例如xshell,系统加载的是~/.bashrc 中的配置信息。
    所以,我们把环境变量在~/.bashrc文件中,重新配置一次,问题解决

    vim ~/.bashrc
    

    加入下面的环境变量

    export ORACLE_BASE=/data/oracle/oracle
    export ORACLE_SID=orcl
    export ROACLE_PID=oral12
    #export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
    export ORACLE_HOME=/data/oracle/oracle/product/12/db_1
    export PATH=$PATH:$ORACLE_HOME/bin
    export LANG="zh_CN.UTF-8"
    export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
    export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
    stty erase ^h 
    

    保存后退出,使环境变量生效

    source ~/.bashrc
    

    (4)plsql远程连接

    一般数据库是安装在远程服务器上,然后用本机的管理软件去连接,此时需要配置一下
    在oracle用户下,打开并编辑listener.ora文件(一般在安装目录下)

    vim /data/oracle/oracle/product/12/db_1/network/admin/listener.ora
    

    然后将其中的HOST改为服务器的IP(这里为了保留之前的配置所以直接在文件后面复制了上面的配置然后作修改)


    保存退出
    打开并编辑tnsnames.ora文件

    vim /data/oracle/oracle/product/12/db_1/network/admin/tnsnames.ora
    

    跟上面操作一样,将HOST改为服务器的IP

    保存退出
    然后重启数据库实例和数据库监听,此时可以用远程工具来连接数据库了

    本地连接需要先安装Oracle Client,然后在系统的环境变量里配置如下环境变量

    #ORACLE_HOME
    D:\JavaIDE\instantclient_12_2                   #你的oracleClent的安装位置
    #TNS_ADMIN  
    D:\JavaIDE\instantclient_12_2\NETWORK\ADMIN     #你的oracleClent的安装位置
    #NLS_LANG   
    SIMPLIFIED CHINESE_CHINA.AL32UTF8
    

    后在不用登陆的情况下plsql进入

    按照下图将信息配置好即可

    然后,找到OracleClient安装目录,再找到NETWORK路径下的ADMIN文件夹,进入

    编辑tnsnames.ora文件

    修改完成后保存该文件,然后退出plsql,一般情况下就可以选择数据库,并可以用账号密码登录了

    (5)navicat远程问题解决方案

    可能会遇到的错误:
    1、ORA-12170:TNS:连接超时

    检查步骤及解决方法:
    (1)从本机ping服务器IP是否能ping通
    (2)使用tnsping或者telnet测试端口是否通畅
    (3)服务器防火墙是否已关闭
    (4)服务器selinux是否已关闭
    (5)数据库监听是否开启
    (6)如果是用PL/SQL的话,tns配置中,host是否为服务器的IP

    2、ORA-28040:No matching authentication protocol

    错误原因是因为navicat的oci.dll版本不匹配,通常是因为版本过低,即低版本的oci.dll连接高版本的数据
    根据下面步骤查看oci.dll的版本

    如果版本过低从Oracle client里面拷对应的文件替换该目录即可,或者直接修改oci lib的位置,指向Oracle client的目录里的oci.dll都可以

    相关文章

      网友评论

          本文标题:Centos7/8 安装Oracle数据库

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