在经历了一番安装Oracle数据库的折腾后,感觉有必要为自己所踩过的坑做个记录(本篇文章几乎包含了在安装Oracle中会遇到的所有问题)。我在安装过程中也参考了网上的一些教程,但发现大部分都是随手复制粘贴,安装过程中还会遇到问题。由于Oracle安装过程中,一旦哪里配置出现问题,很难排除,最后很可能得重装,所以我决定将自己的安装过程做一个完整的记录,以备不时之需。本文介绍在CentOS7上安装Oracle11g数据库。

文章目录

一、环境准备与检查

1.添加用户和用户组

2.下载oracle的安装包

3.上传安装包,解压

4.硬件检查

5.软件检查

6.配置内核参数

7.为Oracle用户添加shell配置

8.创建并配置环境变量

二、正式安装

1.使用oracle用户登录图形界面

2.图形化界面配置

三、测试连接数据库


一、环境准备与检查

1.添加用户和用户组

添加oracle用户,后续安装过程中需要使用oracle用户权限,来创建文件等操作,将其归为oinstall用户组,附加用户组为dba。

[root@Main-node ~]# groupadd oinstall
[root@Main-node ~]# groupadd dba
[root@Main-node ~]# useradd -g oinstall -G dba oracle

使用id oracle查看创建的oracle用户信息。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_bc

2.下载oracle的安装包

官网地址为:Database Software Downloads | Oracle

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_Linux_02

3.上传安装包,解压

我个人喜欢将安装的软件放在/usr/local目录下

[root@Main-node ~]# mkdir -p /usr/local/oracle
[root@Main-node ~]# cd /usr/local/oracle
[root@Main-node oracle]# ls -lh
total 2.2G
-rw-r--r--. 1 root root 1.2G Nov  7 19:10 linux.x64_11gR2_database_1of2.zip
-rw-r--r--. 1 root root 1.1G Nov  7 19:10 linux.x64_11gR2_database_2of2.zip

使用unzip命令依次解压

[root@Main-node oracle]# unzip linux.x64_11gR2_database_1of2.zip

[root@Main-node oracle]# unzip linux.x64_11gR2_database_2of2.zip

解压后就会得到一个database的文件夹

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_Oracle_03

4.硬件检查

  • 内存要求,至少1G的RAM
[root@Main-node database]# grep MemTotal /proc/meminfo
MemTotal:        4028432 kB

我这有将近4G的内存,然后要检查RAM与交换分区之间的要求

RAM

需要交换空间大小

1GB~2GB

RAM的1.5倍

2GB~16GB

等于RAM大小

超过16GB

16GB

  • 查看交换分区大小
[root@Main-node database]# grep SwapTotal /proc/meminfo
SwapTotal:       4063228 kB

因为我这内存在4G左右,交换分区大小与之接近,因此无需修改。我之前也修改过交换分区的大小,挺简单的,计算好了就没错。增加交换分区方法(原来不够的,只需添加少的空间即可):

  • 在根目录生成swapfile,if表示输入,of表示输出,cout设定块数,bs设定块大小(单位可选:k, M, G),生成8G的swap代码如下:

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

  • 格式化为交换分区,路径和上面的一致

       mkswap /var/swapfile

  • 启动交换分区,路径依然一致

       swapon /var/swapfile

  • 将交换分区写入/etc/fstab中

       echo "/var/swapfile swap swap defaults 0 0">>/etc/fstab

       也可用vi /etc/fstab手工写入方式,如下图

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_在虚拟机上安装mysql_04

  •  硬盘检查,保证/tmp目录至少有1GB的可用空间
[root@Main-node database]# df -h /tmp
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   46G  8.4G   37G  19% /

5.软件检查

  • 修改系统标识

       centos系统本质其实是redhat,我们在安装Oracle的过程中,为了防止后面出现问题,最好是将系统标识修改为redhat。

[root@Main-node database]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 
[root@Main-node database]# vim /etc/redhat-release 
[root@Main-node database]# cat /etc/redhat-release 
redhat-7

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_bc_05

安装上述所有软件包的语句:

yum install -y binutils compat-gcc* compat-glibc* compat-libcap1 compat-libstd* compat-libstdc++-33 compat-libstdc++-33.i686 compat-libstdc++-33*.i686 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel glibc-devel.i686 glibc-devel*.i686 glibc-headers glibc.i686 glibc*.i686 ksh libaio libaio-devel libaio-devel.i686 libaio-devel*.i686 libaio.i686 libaio*.i686 libgcc libgcc.i686 libgcc*.i686 libstdc++ libstdc++-devel libstdc++-devel*.i686 libstdc++.i686 libstdc++*.i686 libXp make numactl sysstat unixODBC unixODBC-devel unixODBC-devel*.i686 unixODBC*.i686

rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_Oracle_06

部分软件包显示已经安装,我们只需要执行以下语句,将软件包全部安装一遍即可。

yum install -y binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel compat-libcap1* libXi* libXtst* glibc-devel.i686 compat-libstdc++-33.i686

glic-devel.i686 和 compat-libstdc++-33.i686(不同版本可能需要安装的32位的glibc-devel包的名称有所不同,反正尽量把包都装了),否则在最后安装Oracle过程中会提示Error in invoking target 'installer' of makefile错误。(此处我也是踩了很多坑了,所以在安装软件包时要尽量全一点。)

然后我们再一次检查,软件包是否已全部安装。

rpm -qa binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libgomp libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel compat-libcap1* libXi* libXtst* glibc-devel.i686

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_bc_07

 好了,这样我们的软件包就全部安装了,接着进行下一步。

6.配置内核参数

因为我们只是简单的在自己的虚拟机上安装一个Oracle数据库用于练习,所以只需要最简单的配置就行了。此外可以参考官方文档进行详细配置。Database Installation Guide - Contents

/etc/sysctl.conf文件,在文档末尾添加以下内容。

vim /etc/sysctl.conf

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
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 = 1048586
  • 输入 /sbin/sysctl -p,使配置快速生效。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_Linux_08

7.为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     pam_limits.so

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_在虚拟机上安装mysql_09

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

8.创建并配置环境变量

  • 为了方便操作,我们在根目录下创建一个oracle目录。
[root@Main-node ~]# mkdir -p /oracle/app
[root@Main-node ~]# chown -R oracle:oinstall /oracle
[root@Main-node ~]# chmod -R 775 /oracle
  • 配置oracle用户环境变量
[root@Main-node ~]# su - oracle
[oracle@Main-node ~]$ vim .bash_profile
  • 添加以下环境变量
export ORACLE_BASE=/oracle
export ORACLE_HOME=/oracle/app
export ORACLE_SID=oracleSID
export PATH=$ORACLE_HOME/bin:$PATH

前期的准备工作就告一段落了,下面就可以进入正式安装环节!

二、正式安装

在安装之前有一点需要先说明,因为Oracle的安装需要用到图形界面,所以我们需要先打开一个图形化界面。我们有很多种方式可以打开图形界面:

方式1:直接在虚拟机上操作,只是将命令行模式换成图形界面模式。

systemctl set-default graphical.target

换成图形界面后需要重启虚拟机

shutdown -r now

方式2:使用xstart

方式3:使用vnc

接下来我们只需采用其中的一种方式进行以下安装步骤即可。若是不想安装其他软件,可以使用方式1。

下面进入正题。

1.使用oracle用户登录图形界面

[root@Main-node ~]# su - oracle

 进入之前解压好的database文件夹,执行./runInstaller

[oracle@Main-node ~]$ cd /usr/local/oracle/database
[oracle@Main-node database]$ ./runInstaller -jreLoc /usr/local/java/jdk1.8.0_221/

./runInstaller的时候加上我们的jdk的目录来指定jre所在的位置可以解决后面安装过程中出现的弹窗显示不全问题(可以先看后面,后面我也讲了这个问题),即执行./runInstaller -jreLoc /usr/local/java/jdk1.8.0_221/(这个目录是你自己本地的jdk的目录位置) ,

运行上述脚本,在我们以上配置都正确的情况下,一般会出现下面的界面,提示我们监视器颜色未通过。我们只需要为oracle用户设置DISPLAY变量即可。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_oracle_10

(1)切换回root,执行xdpyinfo,若提示unable to open display " ". 则执行

export DISPLAY=:0

备注:1.这里DISPLAY=:0表示设置在本地监视器,即在用本地的可视化,若使用xstart或者vnc则需要暴露其他端口,如export DISPLAY=:1,否则会一直提示unable to open display ...

2.暴露的端口一定要对应,若把端口1暴露给了vnc,而又是在xstart中运行的./runInstaller,那么此时安装oracle的界面已经起在vnc中(我这里碰到的这个问题,在xstart中等了老半天,还以为哪里配置错了,结果打开vnc之后发现安装界面的窗口已经起起来了)

再次执行xdpyinfo,可以看到信息显示,我们此时只需记住name of display后面的信息,因为我们暴露的是本地0端口,那么这里显示出来就肯定是 :0

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_在虚拟机上安装mysql_11

 (2)执行xhost +,提示access control disabled, clients can connect from any host,此时表示可以从oracle用户接入。

[root@Main-node database]# xhost +
access control disabled, clients can connect from any host

(3)切换到oracle用户,执行export DISPLAY=:0(这里的端口 0 一定要是你自己设置的暴露的端口)

[root@Main-node database]# su - oracle
Last login: Sat Nov  9 17:46:56 CST 2019 on pts/1
[oracle@Main-node ~]$ export DISPLAY=:0

xdpyinfo,即可看到信息输出

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_oracle_12

 此时我们再次进入database目录下,执行./runInstaller,然后就可以看到三项检测都通过进入到了oracle的安装界面,当显示出下图,即表示可以进行安装了。

[oracle@Main-node ~]$ cd /usr/local/oracle/database/
[oracle@Main-node database]$ ./runInstaller

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_bc_13

2.图形化界面配置

接下来,我们主要在Oracle安装的图形化界面上进行设置。

这里在多说一句,若安装界面为乱码,则需要配置语言为英文。若没有出现该问题,可以跳过该步骤直接从下面的(1)开始继续安装。

出现安装界面为乱码,按以下步骤解决。退出安装界面,切换回root用户,编辑/etc/profile 

[oracle@Main-node ~]$ su
Password:
[root@Main-node oracle]# vim /etc/profile

添加一行代码

export LANG=en_US.UTF-8

保存,退出。执行source /etc/profile使配置生效

[root@Main-node oracle]# source /etc/profile

切换回oracle用户,进入database目录,运行.runInstaller 继续安装。 

Oracle的安装总共21步,请耐心!下面开始。

(1) 去掉勾,下一步,表示不接受更新。在弹出的窗口中提示没有提供邮箱,不用管,直接点yes即可。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_在虚拟机上安装mysql_14

(2)默认选择创建并配置数据库,下一步。

 

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_在虚拟机上安装mysql_15

(3)因为我们不是在自己的笔记本桌面上安装Oracel,所以需要选择服务器类型,下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_Oracle_16

(4)选择单实例数据库安装,下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_oracle_17

(5)典型安装会执行所有的数据库安装,我们这里选择高级安装,可以为不同的账户提供不同的密码等,下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_在虚拟机上安装mysql_18

(6)语言选择英文和简体中文,下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_oracle_19

(7)选择版本为企业版,下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_在虚拟机上安装mysql_20

(8)选择Orace软件安装的配置路径,这里默认即可,因为我们前面已经在配置中配置好了,然后点下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_Linux_21

(9)Inventory Directory我们选择放在/home/oracle/inventory下,该目录记录一些清单信息。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_Linux_22

(10)选择通用目的,下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_bc_23

(11)Oracle服务标识,SID我们设置为oracleSID,下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_Linux_24

(12)分配的内存默认即可(一般是40%),这一步中我们需要修改字符集为UTF-8,下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_在虚拟机上安装mysql_25

(13)邮件通知不用配置,直接下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_oracle_26

(14)默认选择即可,文件系统进行数据库存储 ,下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_Oracle_27

(15)自动备份我们不需要,看个人的实际需求即可,下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_oracle_28

(16)选择使用相同的密码,最好设置一个包含大小写和数字的密码,并记住,若采用简单密码提示警告其实也可以不用管,然后继续下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_Linux_29

(17)数据库管理组,默认即可,下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_Oracle_30

(18)检查内核参数和软件包时会提示failed,但是实际上我们的前期工作已经做好了,软件包的版本不会低于最小需求的版本,所以我们这里选择忽略全部,然后下一步。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_bc_31

(19)给出的一些总结信息,我们可以直接点Finish。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_oracle_32

(20)等待安装完成。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_Linux_33

安装过程中会弹出如下图所以的一个界面,看不到内容,我们可以将鼠标移动到小窗口边缘拖拉以显示信息(也可以直接右键点两次关闭)。

提示:小窗口的解决还可以在运行./runInstaller的时候加上我们的jdk的目录来指定jre所在的位置,即执行./runInstaller -jreLoc /usr/local/java/jdk1.8.0_221/(这个目录是你自己本地的jdk的目录位置)

./runInstaller -jreLoc /usr/local/java/jdk1.8.0_221/

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_bc_34

Password Management...来配置一下密码。

此处未显示出来的错误为 Error in invoking target "install " of makefile 的错误,多半是因为我们软件包没装全而导致的,在xshell中安装前面额外提到的两个软件包之后continue

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_在虚拟机上安装mysql_35

点击后再次弹出小窗口,同样可以将鼠标移动到小窗口边缘,左键拖动调整窗口,调整至下图所示。

然后我们可以解锁scott账户,修改SYS, SYSTEM, SCOTT三者密码,可以设置成相同的,然后点击OK。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_Oracle_36

再次点击ok后,若弹出小窗口继续鼠标移动到边缘,左键拖拉调整即可完整显示。这里需要执行一下脚本,我们点击OK执行一下就好了。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_bc_37

(21)安装完成,点击close。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_在虚拟机上安装mysql_38

三、测试连接数据库

1.使用以下命令进行连接

[oracle@Main-node ~]$ sqlplus / as sysdba

 开启数据库实例:startup,关闭数据库实例:shutdown immediate

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_oracle_39

2.用scott登录,输入密码后查询。

在虚拟机上安装mysql 在虚拟机上安装oracle数据库_bc_40

经过上述的辛苦配置,Oracle终于成功安装! 还有疑问可以在底下评论备注。