Home CentOS安装Oracle
Post
Cancel

CentOS安装Oracle

一、Oracle安装

1.1 Oracle 11g版本选择

建议下载11.2.0.4版本,11.2.0.1版本有一些BUG会影响安装。CentOS7安装11.2.0.1遇到的坑:

  • 操作系统内核参数semmni明明设置正确,先决条件检查以然会提示参数不正确。
  • 一些程序包,已经安装过了,先决条件检查以然会提示没有安装。
  • 安装到68%会报错:makefile '/home/oracle/app/oracle/product/11.2.0/dbhome_1/ctx/lib/ins_ctx.mk'的目标'install'时出错

另外,11.2.0.4版本普通用户在官网是下载不到的,可以从网盘找资源。

1.2 安装和配置VNC

安装VNC图形化的操作环境即可进行VNC远程或者直接本地图形化操作,比静默安装更直观。root执行以下命令,直接整体复制粘贴到终端就行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#图形界面必备`X Window System`
yum -y groupinstall "X Window System"
#安装epel源
yum -y install epel-release
#安装VNC+图形需要的软件
yum -y install tigervnc-server openbox xfce4-terminal tint2 cjkuni-ukai-fonts network-manager-applet
#自动修改/etc/xdg/openbox/autostart配置文件
echo 'if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then' > /etc/xdg/openbox/autostart
echo '       eval `dbus-launch --sh-syntax --exit-with-session`' >> /etc/xdg/openbox/autostart
echo 'fi' >> /etc/xdg/openbox/autostart
echo 'tint2 &' >> /etc/xdg/openbox/autostart
echo 'nm-applet  &' >> /etc/xdg/openbox/autostart
echo 'xfce4-terminal &' >> /etc/xdg/openbox/autostart
echo ' ' >> /etc/xdg/openbox/autostart
#防火墙放行VNC端口
firewall-cmd --add-port=5901/tcp
firewall-cmd --add-port=5901/tcp --permanent

1.3 创建用户

为了安全起见,不建议使用root做为vnc用户。单独创建一个用户比较安全。既然安装Oracle,这里用户名我使用oracle。root执行以下命令,直接整体复制粘贴到终端就行。

1
2
3
4
5
6
7
#创建database用户组
groupadd database
#创建oracle用户并放入database组中
useradd oracle -g database
#设置oracle密码
passwd oracle 
#密码我设置的是database@2021

1.4 开启VNC服务

切换到oracle用户。

1
2
3
4
su oracle
#首次运行,生成~/.vnc/xstartup等配置文件
vncserver :1 -geometry 1920x1080
#我这里设置的密码是vnc@2021 

oracle用户执行以下命令,直接整体复制粘贴到终端就行。

1
2
3
4
5
6
#配置VNC默认启动openbox
echo "openbox-session &" > ~/.vnc/xstartup
# 停止服务
vncserver -kill :1
#重新开启vnc服务
vncserver :1 -geometry 1920x1080

1.5 客户端连接VNC实现远程控制

使用VNC客户端连接,我用的是VNC Viewer ,我的地址如下:

1
172.16.184.5:5901

然后输入上面设置的连接密码就可以了。我这里设置的密码是vnc@2021。如果你连接的时候发现没有界面,是黑屏的,只有一个鼠标,那么可以重启一下VNC服务试试。切换到oracle用户su oracle命令:

1
2
vncserver -kill :1
vncserver :1 -geometry 1024x768

1.6 安装中文字体解决中文乱码问题

默认情况下,因CentOS中缺少中易宋体18030所以会导致中文显示成□□□□□的问题。增加所需字体就行了。下载字体:https://m.rkxy.com.cn/down.php?id=71266 ,root执行以下命令:

1
2
3
4
#新建文件夹
mkdir -p /usr/share/fonts/zh_CN/TrueType
#zysong.ttf上传到/usr/share/fonts/zh_CN/TrueType目录并赋权
chmod 75 /usr/share/fonts/zh_CN/TrueType/zysong.ttf

字体安装完成,这样安装Oracle就不会中文乱码了。如果不想用中文界面安装,安装前运行以下命令,临时使用英文环境。

1
LANG=en_US

1.7 上传并解压安装包

上传安装包到CentOS7服务器。只需要*1of7.zip,*2of7.zip两个压缩包即可。我上传到/home/oracle/目录了。上传以后,文件路径和名称如下:

1
2
3
4
5
[oracle@localhost ~]$ pwd
/home/oracle
[oracle@localhost ~]$ ls
p13390677_112040_Linux-x86-64_1of7.zip  
p13390677_112040_Linux-x86-64_2of7.zip

如果没有unzip工具,安装unzip用于文件解压,root执行以下命令:

1
yum install unzip

oracle用户登录vnc,执行下面命令,解压出database,已备安装使用:

1
2
3
4
#解压第1个zip
unzip p13390677_112040_Linux-x86-64_1of7.zip
#解压第2个zip
unzip p13390677_112040_Linux-x86-64_2of7.zip

文件如下:

1
2
3
4
[oracle@localhost ~]$ ls
database  
p13390677_112040_Linux-x86-64_1of7.zip  
p13390677_112040_Linux-x86-64_2of7.zip

1.8 安装Oracle安装程序依赖程序包

root用户执行以下命令su root

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

1.9 开始安装Oracle

oracle用户登录vnc远程桌面,进入~/database/目录。

1
2
3
4
#进入安装目录
cd ~/database/
#运行安装程序
./runInstaller

配置安全更新,根据需要设置,我这里就不设置了。

下载软件更新,根据个人需要选择,我这里选择跳过软件更新(S)。

网络安装选项,选择创建和配置数据库(C)。

桌面类or服务器类,描述中已经说的很清楚了,根据自己需要选择。这里我选择的是服务器类(S)。

安装类型,我选默认的,单实例数据库安装(S)根据实际需要选择。

典型安装,默认典型安装(T)即可。

典型安装配置,主要设置一下密码,其他默认即可。这里密码要在大写字母+小写字母+数字组合。比如:我设置的是Database123

创建产品清单,默认即可。

执行先决条件检查,这一步要稍花一些时间处理。每个人的显示可能略有不同。比如:物理内存的检测,我这个1G内存就会提示小于预期。处理方法:

  • 根据提示信息做处理即可,比如:内存小了,加大内存。
  • 执行修补并再次检查(F)可以自动修复
  • 以上都解决不了,百度一下基本都是有解决办法的。 没解决之前我的显示如下:

执行修补并再次检查(F),方法上面描述的很清楚。root权限执行:

1
/tmp/CVU_11.2.0.4.0_oracle/runfixup.sh

执行完后,点击上面对话框中的确定(O)这里发现大部分都修复了。如下:

剩下的警告尽量解决,如果自己知道影响不大直接点右上角☐全部忽略即可。比如:我的虚拟机内存,比预期值差30MB左右,影响不大直接忽略也可以。解决方法也很简单,加大内存即可。

  • 解决缺失包:pdksh-5.2.14警告

这个警告,我猜测直接忽略就行了。因为本机已经安装了ksh-20120801-142.el7.x86_64yum search pdksh中搜索没的搜索到它。只能手动安装了。

1
2
3
4
#如果没有wget就安装一下 
yum install wget
#下载安装包
wget  http://vault.centos.org/5.11/os/x86_64/CentOS/pdksh-5.2.14-37.el5_8.1.x86_64.rpm

执行安装操作。

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

执行结果如下,与已经安装的冲突了,安装失败了。

1
2
3
4
rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm 
警告:pdksh-5.2.14-37.el5_8.1.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥ID e8562897: NOKEY
错误:依赖检测失败:
    pdksh 与 (已安裝) ksh-20120801-142.el7.x86_64 冲突

卸载冲突。

1
rpm -e ksh-20120801-142.el7.x86_64

再次安装。

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

全过程如下:

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm 
警告:pdksh-5.2.14-37.el5_8.1.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥ID e8562897: NOKEY
错误:依赖检测失败:
    pdksh 与 (已安裝) ksh-20120801-142.el7.x86_64 冲突
[root@localhost ~]# rpm -e ksh-20120801-142.el7.x86_64
[root@localhost ~]# rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm
警告:pdksh-5.2.14-37.el5_8.1.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥ID e8562897: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
1:pdksh-5.2.14-37.el5_8.1          ################################# [100%]

重新检测,发现警告消失了。

  • Swap分区设置

如果Oracle安装文件检查发现Swap空间不足。大小一般设置为内存的1.5倍。root权限查询当时Swap分区设置情况。

1
swapon -s

结果如下:

1
2
3
[root@localhost ~]# swapon -m
文件名         类型       大小   已用   权限
/dev/dm-1   partition  2097148   0      -2

或者使用free工具来查看内存和Swap情况。

1
free -m

结果如下单位(MB):

1
2
3
4
[root@localhost ~]# free -m
        total   used     free   shared  buff/cache   available
Mem:    1475     439     171     13         865         877
Swap:   2047      0      2047

创建Swap文件,接下来我们将在文件系统上创建Swap文件。我们要在根目录/下创建一个名叫swapfile的文件,当然你也可以选择你喜欢的文件名。该文件分配的空间将等于我们需要的Swap空间。一般为内存的1.5倍以上就好了。也可以根据安装程序的提示来。

root执行以下命令,创建swap分区。

1
2
3
4
5
6
7
8
9
10
#创建swap文件 bs=2300的设置的值一般为内存的1.5倍以上 
dd if=/dev/zero of=/var/swap bs=2500 count=1000000
#需要更改swap文件的权限,确保只有root才可读
chmod 600 /var/swap
#告知系统将该文件用于swap
mkswap /var/swap
#开始使用该swap
swapon /var/swap
#使Swap文件永久生效,/etc/fstab加入配置
echo "/var/swap   swap    swap    sw  0   0" >> /etc/fstab

如果上面创建后发现大小创建错误了。如何重置呢?swapoff -a rm /var/swap上面命令就可以删除了,然后重新创建合适的swap文件就行了。

经过我们的不断努力,所有警告都消失了。

概要,这里显示了安装配置的概要部分,检查一下是否正确。没问题就开始安装。

安装产品,上面折腾了这么久终于迎来了真正的安装操作了。

进度70% ins_emagent.mk错误弹框。

编辑/home/oracle/app/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk约176行,可以搜索$(MK_EMAGENT_NMECTL)关键字快速找到。修改后如下:

1
2
3
4
5
6
7
8
9
10
#===========================
#  emdctl
#===========================

$(SYSMANBIN)emdctl:
	$(MK_EMAGENT_NMECTL) -lnnz11

#===========================
#  nmocat
#===========================

修改完成后,点击重试(R)。

复制数据库文件,上面的问题解决后,安装一会儿就会出现如下的界面。耐心等待即可。

数据库创建完成,经过一段时间的等待,终于弹出如下界面。

执行配置脚本。

据上图提示,切换root用户执行上面两个脚本就可以了。执行结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@localhost ~]# /home/oracle/app/oraInventory/orainstRoot.sh 
更改权限/home/oracle/app/oraInventory.
添加组的读取和写入权限。
删除全局的读取, 写入和执行权限。

更改组名/home/oracle/app/oraInventory 到 database.
脚本的执行已完成。
[root@localhost ~]# /home/oracle/app/oracle/product/11.2.0/dbhome_1/root.sh 
Performing root user operation for Oracle 11g 

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /home/oracle/app/oracle/product/11.2.0/dbhome_1

Enter the full pathname of the local bin directory: [/usr/local/bin]: 
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
[root@localhost ~]# 

执行完成这两个脚本,点击确定。

Oracle Database的安装已成功。

点击关闭即可。

1.10 防火墙放行1521

1
2
3
# 默认端口是1521,防火墙放行1521端口
firewall-cmd --zone=public --add-port=1521/tcp --permanent
firewall-cmd --reload

1.11 配置环境变量

1
su oracle

切换到oracle用户操作。编辑配置文件。

1
vi ~/.bash_profile

文件末尾加入以下内容,ORACLE_HOME中换成你实际安装的路径。

1
2
3
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_1/
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin

使用配置文件立即生效。

1
source ~/.bash_profile

1.12 启动Oracle

1
2
3
4
su oracle
sqlplus /nolog
SQL> connect /as sysdba
SQL> startup

1.13 sys用户登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[oracle@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.4.0 Production on Tue Feb 2 02:59:38 2021

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

SQL> connect as sysdba
Enter user-name: sys
Enter password: 
Connected.
SQL> select 1 from dual;

	 1
----------
	 1

SQL> 

没有问题,说明本地连接Oracle成功。

1.14 启动监听

1
lsnrctl start

1.15 PLSQL连接测试

使用其他机器连接我们刚安装好的Oracle进行连接测试。修改配置文件C:\app\itkey\product\11.2.0\client_1\network\admin\tnsnames.ora(路径根据实际情况来)

1
2
3
4
5
6
7
8
CentOS7ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.184.5)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

二、Oracle创建数据库

我们很多操作都是可以通过命令行的形式来完成,但是由于不支持图形模式,在一些需要图形界面的时候就很麻烦。本次设置可以在SecureCRT中直接使用netca\dbca命令,通过xmanager的passive来显示图形界面。设置display变量,设置的IP为安装xmanager的客户端IP, 例如本地ip为:192.168.1.2

1
[root@test ~]# export DISPLAY=192.168.1.2:0.0

其次,我们要在客户端启动Xmanager - Passive程序,最后,我们就可以在SecureCRT工具中直接使用命令来启动图形化界面了。以oracle用户登录系统,打开终端输入dbca,点击下一步

点击创建数据库,下一步

默认即可,下一步

在全局数据库输入你要定义的名称,例如:myoracl,数据库实例名(SID)默认与全局数据库名相同,下一步

不勾选配置Enterprise Manager,下一步

数据库身份证明,可以为不同的账户分别设置不同的管理口令,也可以为所有账户设置同一口令,单击下一步

数据库文件所在位置,默认存储类型:文件系统,存储位置:使用模版中的数据库文件位置,也可以自己指定存储路径,单击下一步

恢复配置,指定快速恢复区,默认即可,有需要的可以配置,下一步

内存、调整大小、字符集、连接模式可以根据自己的需要设置,下一步

数据库存储,控制文件、数据文件、重做日志文件位置设置,单击下一步,创建选项,创建数据库,生成脚本,单击完成,开始创建数据库

点击退出即完成数据库创建

三、Oracle创建表空间并授权用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
-- 登录sys用户
sqlplus / as sysdba

-- 查询用户表空间文件的路径,然后在此目录下创建新的表空间
select name from v$datafile; 

-- 创建表空间,永久性表空间:一般保存表、视图、过程和索引等的数据
create tablespace TESTSERVICESPACE 
datafile '/home/oracle/app/oracle/oradata/orcl/TESTSERVICESPACE.dbf' 
size 1024m 
autoextend on 
next 100m 
maxsize unlimited;

-- 查询用户临时表空间文件的路径,然后在此目录下创建新的临时表空间
select name from v$tempfile;

-- 创建临时表空间,临时性表空间:只用于保存系统中短期活动的数据,如计算的中间结果等
create temporary tablespace TESTSERVICESPACE_TEMP 
tempfile '/home/oracle/app/oracle/oradata/orcl/TESTSERVICESPACE_TEMP.dbf' 
size 200m 
autoextend on 
next 40m 
maxsize unlimited;

-- 创建用户、密码并关联表空间和临时表空间
create user orauser 
identified by "1qaz!QAZ" 
default tablespace TESTSERVICESPACE 
temporary tablespace TESTSERVICESPACE_TEMP;

-- 授权,初始建立的用户没有任何权限,不能执行任何数据库操作,因此必须为用户设置权限或者角色
grant connect,resource to orauser;

-- 授予远程登录权限
grant create session to orauser;

-- 给表空间配额
ALTER USER orauser QUOTA 100M ON TESTSERVICESPACE;
-- 表空间配额(三选一即可)
-- 您可以给用户,例如username在xxxx表空间中的无限配额
ALTER USER orauser QUOTA UNLIMITED ON TESTSERVICESPACE;
-- 您还可以定义允许用户在表空间上分配的空间最大值
ALTER USER orauser QUOTA 100M ON TESTSERVICESPACE;
-- 您还可以授予用户UNLIMITED TABLESPACE系统权限
-- 这意味着他对数据库中的任何表空间都有无限的配额
GRANT UNLIMITED TABLESPACE TO orauser;

四、Oracle的重启

4.1 重启监听

  • 以Oracle身份登录数据库:su - oralce
  • 进入监听器控制台:lsnrctl
  • 关闭监听:stop
  • 启动监听:start
  • 查看监听状态:status
  • 退出监听器控制台:exit

4.2 重启数据库

  • 以Oracle身份登录数据库:su - oralce
  • 进入sqlplus控制台:sqlplus /nolog
  • 以系统管理员登录:connect / as sysdba
  • 关闭数据库:shutdown immediate
    • Normal:需要等待所有的用户断开连接
    • Immediate:等待用户完成当前的语句,并不允许新用户连接
    • Transactional:等待用户完成当前的事务,并不允许新用户连接
    • Abort:不做任何等待,直接关闭数据库
  • 启动数据库:startup
  • 退出Sqlplus控制台:exit

4.3 重启实例

  • 以Oracle身份登录数据库:su - oralce
  • 查看当前实例:echo $ORACLE_SID
  • 切换需要启动的数据库实例:export ORACLE_SID=ORCL
  • 进入sqlplus控制台:sqlplus /nolog
  • 以系统管理员登录:connect / as sysdba
  • 关闭实例:shutdown abort
  • 启动实例:startup
  • 退出Sqlplus控制台:exit

五、一些问题

5.1 sqlplus / as sysdba:未找到命令

  • 报错原因

    shell环境变量未配置(使用shell远程登录)

  • 解决方法

    切换登录用户环境su - oracle,为什么普通切换su oracle仍登录不了,su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell,而后者连用户和Shell环境一起切换了。只有切换了Shell环境才不会出现PATH环境变量错误。

    • su oracle登录:切换到Oracle身份后用户的home目录和PATH仍然是原先用户的home目录和PATH。
    • su - oracle登录:相当于重新登陆,此时用户的home目录和PATH等信息会发生改变。

参考:https://github.com/lxyoucan/CentOS7Oracle11gInstallHelper

This post is licensed under CC BY 4.0 by the author.