0x01 前言

最近有学习Oracle的需求,一切从0开始,今天花了点时间把环境搭建好后,感觉发现了新大陆。

官方的安装手册不但详细,还兼顾了众多操作系统,相关的安装手册可以通过以下地址下载:

0x02 准备

0x02.1 系统安装

我选择将Oracle 12c安装在centos 7上,因为Oracle的安装需要使用GUI界面,所以我在安装系统的时候选择server whit GUI,同时关闭了KDUNP与security policy:

在这里建议手动划分挂载点的空间,我这台虚拟机的磁盘空间为50G,所以各个挂载点的空间如下:

  • boot:512MIB
  • swap:8GiB,需与内存大小一致
    • 当物理内存介乎1G-2G时,swap需为物理内存的1.5倍;
    • 当物理内存介乎2G-16G时,swap需等于物理内存;
    • 当物理内存大于16G时,swap为16G。
  • /:剩下的空间全部挂在到根目录

这样分区有一个好处:不再需要担心如usr等重要的目录的空间不足。

安装Oracle还有分辨率的要求,最低分辨率需要达到1024 x 768。内存最小要求为1G,建议值为2G或更高;如果需要安装Oracle Grid,则需要8G内存。我这台虚拟机的配置如下:

安装好后可以依照以下文章对虚拟机进行更新与其他配置:

我会禁用IPv6、关闭SELinux与iptables,然后升级系统。

 

0x02.2 系统设置

以下是我系统的基本信息:

[root@oracle-s2 ~]# hostnamectl 
   Static hostname: oracle-s2
         Icon name: computer-vm
           Chassis: vm
        Machine ID: e67de8c496944a42ad49a4a0112821e5
           Boot ID: ffa746fca55143c6a6d5fb6435fc9c44
    Virtualization: vmware
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-693.21.1.el7.x86_64
      Architecture: x86-64

因为Oracle的要求,需要检查系统hostname与IP的对应关系,如果没有独立的DNS,请在hosts中将hostname手动加入,如:

#获取IP信息
[root@oracle-s2 ~]# ifconfig
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.1.1.120  netmask 255.255.255.0  broadcast 10.1.1.255
        ether 00:50:56:b6:47:95  txqueuelen 1000  (Ethernet)
        RX packets 30518  bytes 2065970 (1.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 730  bytes 68422 (66.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 72  bytes 5736 (5.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 72  bytes 5736 (5.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:c7:6f:f3  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

#获取hostname
[root@oracle-s2 ~]# hostname
oracle-s2

#将hostname与IP的对应关系添加到hosts文件中
[root@oracle-s2 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 oracle-s2
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.1.120  oracle-s2

如果有独立的DNS服务器,则需要在DNS服务器中添加DNS解析。

然后检查SELinux与firewalld,在测试环境中我都是将这两个服务关闭的:

#检查SELinux状态
[root@oracle-s2 ~]# sestatus 
SELinux status:                 disabled

#检查firewalld状态
[root@oracle-s2 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

然后添加Oracle所需要的用户组与用户:

#添加oinstall用户组
[root@oracle-s2 ~]# groupadd oinstall

#添加dba用户组
[root@oracle-s2 ~]# groupadd dba

#添加oracle用户并将其添加到oinstall用户组并附加dba用户组
[root@oracle-s2 ~]# useradd -g oinstall -G dba oracle

#为oracle设置密码
[root@oracle-s2 ~]# passwd oracle
Changing password for user oracle.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

然后调整内核参数:

[root@oracle-s2 ~]# cat /etc/sysctl.conf 
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4185772032
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

设定Oracle用户的limits:

[root@oracle-s2 ~]# cat /etc/security/limits.conf | grep oracle
oracle soft nproc 65536
oracle hard nproc 65536
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft stack 65536
oracle hard stack 65536

还需要安装以下软件包:

[root@oracle-s2 ~]# yum install -y binutils.x86_64 compat-libcap1.x86_64 gcc.x86_64 gcc-c++.x86_64 glibc.i686 glibc.x86_64 glibc-devel.i686 glibc-devel.x86_64 ksh compat-libstdc++-33 libaio.i686 libaio.x86_64 libaio-devel.i686 libaio-devel.x86_64 libgcc.i686 libgcc.x86_64 libstdc++.i686 libstdc++.x86_64 libstdc++-devel.i686 libstdc++-devel.x86_64 libXi.i686 libXi.x86_64 libXtst.i686 libXtst.x86_64 make.x86_64 sysstat.x86_64

调整完系统后需要重启,完成后即可进行安装。

0x03 安装

0x03.1 安装包与目录权限

所有这一切完成后,就可以通过以下地址下载Oracle 12c的安装包并上传到服务器中进行安装:

下载可能需要登入Oracle网站,本文章使用Linux x86-64版进行安装:

下载好安装包后即可上传到服务器中,然后通过SSH使用root用户登入并使用以下命令解压到“stage”目录中,完成后还需要修改该目录的权限:

#解压文件
[root@oracle-s2 ~]# unzip ./oracle/linuxx64_12201_database.zip -d /stage/

#修改权限
[root@oracle-s2 ~]# chown -R oracle:oinstall /stage/

在安装之前需要建立几个目录并修改权限:

#新建文件夹
[root@oracle-s2 ~]# mkdir /u01
[root@oracle-s2 ~]# mkdir /u02

#修改权限
[root@oracle-s2 ~]# chown -R oracle:oinstall /u01
[root@oracle-s2 ~]# chown -R oracle:oinstall /u02
[root@oracle-s2 ~]# chmod -R 775 /u01
[root@oracle-s2 ~]# chmod -R 775 /u02
[root@oracle-s2 ~]# chmod g+s /u01
[root@oracle-s2 ~]# chmod g+s /u02

以上新建了两个目录,其中u01用于存放Oracle软件,u02用于存放数据库文件。

完成后即可开始安装。

0x03.2 安装

从这里开始需要使用Oracle这个用户登入系统的GUI界面,如果你的系统没有安装GUI界面,则需要安装“X Window System”或其他具备GUI界面的软件。另外,如果你的系统无法通过显示器或VNC显示,则需要安装xrdp或其他软件:

打开一个终端并运行安装文件,稍等片刻后即可看到安装向导:

[oracle@oracle-s2 ~]$ /stage/database/runInstaller

在弹出的安装向导中填入Oracle账号邮箱并取消勾选Oracle support,然后点选next:

在installation option窗口中选择“create and configure a database”并点击next:

在system class窗口中选择“server class”并单击next:

在database installation option窗口中选择“single instance database installation”,然后单击next:

在install type窗口中选择“typical install”,然后单击next:

在typical installation窗口中作如下配置:

  • oracle base:/u01/app/oracle
  • software location:/u01/app/oracle/product/12.2.0/dbhome_1
  • storage type:File System
  • database file location:/u02
  • database edition:enterprise edition
  • OSDBA group:dba
  • global database name:orcl.t.com
  • password:请输入你的密码,密码中不允许含有字符

最后取消勾选“create as container database”,完成后单击next:

在create inventory窗口中配置“inventory directory”与“orainventory group name”,然后单击next:

如果通过安装前检查,则会到达summary窗口,这里可以检查相关配置的信息,确认无误后单击install即可:

在安装过程中会弹出一个对话框,需要手动将对话框中的两个脚本用root用户执行,执行完毕后单击ok即可继续安装进程:

经过漫长的等待,安装终于完成。完成后的界面很简洁,但其中会显示Oracle Enterprise Manager的地址:

至此,安装已全部完成,可以单击close关闭安装窗口。

0x03.3 收尾

使用SSH登入oracle这个用户,然后将环境变量添加到用户环境中:

#打开文件
[oracle@oracle-s2 ~]# vim /home/oracle/.bash_profile 

#在最后添加以下内容
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=orcl; export ORACLE_SID
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/lib64; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

使用以下命令执行该文件:

[oracle@oracle-s2 ~]$ . .bash_profile

该操作不会返还任何内容,但如果执行成功的话,即可使用sqlplus命令并登入数据库:

[oracle@oracle-s2 ~]$ sqlplus system@orcl

SQL*Plus: Release 12.2.0.1.0 Production on Mon Mar 19 00:42:03 2018

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

Enter password: 
Last Successful login time: Mon Mar 19 2018 00:41:48 +08:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>

0x03.4 Oracle Enterprise Manager

我们还可以通过Oracle Enterprise Manager管理数据库,使用浏览器打开以下地址:

  • https://oracle-s2.t.com:5500/em

注意,这里需要使用https协议,然后输入用户名和密码:

  • 用户名:system
  • 密码:安装时所设置的密码

通过验证后即可进入Oracle Enterprise Manager:

0x04 结语

通过安装,我敲了Oracle的大门,接下来需要开门和深入。