Centos7/8 安装Oracle数据库

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数据库)