前言:因为测试需求需要搭建oracle将底层存储对接为ceph集群提供iscsi磁盘。所以被迫需求所致又得从头开始数据库的搭建安装配置以及各种增删查改操作。这里主要讲述在CentOS7.3的系统上如何搭建Oracle 12c数据库。
官方安装文档请点击这里。
这里主要说下官档中提及到的有关CentOS安装Oracle部分所需要硬件和软件的条件审查。同时给出了我的配置步骤。
关于Oracle 12c所需包,从官方文档看,不同版本的操作系统似乎有所不同,Oracle Linux 5 and Red Hat Enterprise Linux 5需要安装下面一些包:
binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
compat-libstdc++-33-3.2.3 (32 bit)
gcc-4.1.2
gcc-c++-4.1.2
glibc-2.5-58
glibc-2.5-58 (32 bit)
glibc-devel-2.5-58
glibc-devel-2.5-58 (32 bit)
ksh
libaio-0.3.106
libaio-0.3.106 (32 bit)
libaio-devel-0.3.106
libaio-devel-0.3.106 (32 bit)
libgcc-4.1.2
libgcc-4.1.2 (32 bit)
libstdc++-4.1.2
libstdc++-4.1.2 (32 bit)
libstdc++-devel 4.1.2
libXext-1.0.1
libXext-1.0.1 (32 bit)
libXtst-1.0.1
libXtst-1.0.1 (32 bit)
libX11-1.0.3
libX11-1.0.3 (32 bit)
libXau-1.0.1
libXau-1.0.1 (32 bit)
libXi-1.0.1
libXi-1.0.1 (32 bit)
make-3.81
sysstat-7.0.2
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
在首次执行安装Oracle安装包之前我们还需要在系统上设置一些参数,追加用户和对安装路径的文件夹属组修改。
这里为了节约时间精力我默认将Selinux关闭,并且禁用了firewalld服务。
#setenforce 0
#vim /etc/selinux/conf
SELINUX=disabled
#systemctl stop firewalld
#systemctl disable firewalld
那么首先我们先来解决系统参数配置调优问题。
这里是解释参数配置,如果没有兴趣可以直接跳到实战阶段。
- kernel.sem有关的参数
kernel.sem是指 semmsl,semmns,semopm,semmni这4个参数。SEMMSL、SEMMNS、SEMOPM、SEMMNI这四个核心参数,具体含义和配置如下。
SEMMSL :用于控制每个信号集的最大信号数量。
Oracle 建议将 SEMMSL 设置为 init.ora 文件(用于 Linux 系统中的所有数据库)中的最大 PROCESS 实例参数的设置值再加上 10 。此外, Oracle 建议将 SEMMSL 的值设置为不少于 100 。
SEMMNS:用于控制整个 Linux 系统中信号(而不是信号集)的最大数。
Oracle 建议将 SEMMNS 设置为:系统中每个数据库的 PROCESSES 实例参数设置值的总和,加上最大 PROCESSES 值的两倍,最后根据系统中 Oracle 数据库的数量,每个加 10 。
使用以下计算式来确定在 Linux 系统中可以分配的信号的最大数量。它将是以下两者中较小的一个值:SEMMNS 或 (SEMMSL * SEMMNI)
SEMOPM: 内核参数用于控制每个 semop 系统调用可以执行的信号操作的数量。semop 系统调用(函数)提供了利用一个 semop 系统调用完成多项信号操作的功能。一个信号集能够拥有每个信号集中最大数量的SEMMSL 信号,因此建议设置 SEMOPM 等于SEMMSL 。
Oracle 建议将 SEMOPM 的值设置为不少于 100 。
SEMMNI :内核参数用于控制整个 Linux 系统中信号集的最大数量。Oracle 建议将 SEMMNI 的值设置为不少于 100 。
kernel.shmall 参数是控制共享内存页数 。Linux共享内存页大小为4KB, 共享内存段的大小都是共享内存页大小的整数倍。
shmmax是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值,shmmax设置应足够大,能在一个共享内存段下容纳下整个的SGA,设置的过低可能会导致需要创建多个共享内存段,可能导致系统性能的下降 。
Oralce建议一个大的共享内存段能容纳整个SGA,这样在任何时候都不会有性能下降的隐患。
Oracle安装文档建议,32位Linux设置shmmax 为32位最大限制值(settingshmmax to the 32-bit number limit),即4G,所以1-4G 的物理内存,可以直接设置shmmax 为最大物理内存即可,SGA 肯定在一个共享内存段中,32位Linux 物理内存大于4G 的设置为4G 即可
shmmni 内核参数是共享内存段的最大数量(注意该参数不是shmmin,是shmmni,shmmin 表示内存段最小大小 ) 。
net.core.rmem_default 指网络套接字的默认接收缓冲区的大小,oracle建议设置为265K即262144
net.core.rmem_max 指网络套接字的最大接收缓冲区的大小,oracle10g及以前版本建议设置为256k即262144 oracle11g建议设置为4M 即4194304
net.core.wmem_default指网络套接字的默认发送缓冲区的大小,oracle建议设置为265K即262144
net.core.wmem_max 指网络套接字的最大发送缓冲区的大小,oracle10g及以前版本建议设置为256k即262144 oracle11g建议设置为1M即1048576
net.ipv4.ip_local_port_range ,指本地的允许打开随机端口范围
oracle10g前建议端口范围为1024 65000,oracle11g建议端口范围为:
9000 65500 并忽略oracle安装程序任何关于这个参数的警告
fs.aio-max-nr 指系统允许的最大的异步IO请求大小
oracle默认设置为1M即1048576,一般不用更改
这里要在sysctl文件中改的东西比较多,所以为了方便和安全起见,建议使用参数来接受变量,然后在做sysctl配置修改之前首先将该文件备份保存一份。
[root@localhost ~]# MEMTOTAL=$(free -b | sed -n '2p' | awk '{print $2}')
[root@localhost ~]# SHMMAX=$(expr $MEMTOTAL / 2)
[root@localhost ~]# SHMMNI=4096
[root@localhost ~]# PAGESIZE=$(getconf PAGE_SIZE)
[root@localhost ~]# cat >> /etc/sysctl.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
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
这里需要配置相关oracle用户,其实这里配置的话最简化的配置是只需要添加一个oracle的用户和用户组即可,但是为了完整性,我这里把相关的用户组都配置上。
[root@localhost ~] i=1000; for group in oinstall dba backupdba oper dgdba kmdba; do
groupadd -g $i $group; i=`expr $i + 1`
done
[root@localhost ~] useradd -u 1200 -g oinstall -G dba,oper,backupdba,dgdba,kmdba -d /home/oracle oracle
[root@localhost ~] passwd oracle
Changing password for user oracle.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~] mkdir -p /u01/app/oracle
[root@localhost ~] chown -R oracle:oinstall /u01/app
[root@localhost ~] chmod -R 775 /u01
[root@localhost ~] vi /etc/pam.d/login
# near line 14: 添加如下新的配置项
session required pam_selinux.so open
session required pam_namespace.so
session required pam_limits.so
session optional pam_keyinit.so force revoke
session include system-auth
session optional pam_ck_connector.so
[root@localhost ~] vi /etc/security/limits.conf
# add to the end
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
这里需要将用户切换到oracle用户来执行操作。
[oracle@localhost ~] vi ~/.bash_profile
# add to the end
umask 022
export ORACLE_BASE=/u01/app/oracle
# create a temporary directory for installation
我这里将Oracle数据库安装文件直接拷贝在了oracle的用户家目录下解压执行的。当然也可以放在tmp下,我看很多安装指导文档都在tmp下,这个有没有必要没有深究。
[oracle@localhost ~] unzip V38500-01_1of2.zip
[oracle@localhost ~] unzip V38500-01_1of2.zip
解压出来之后会有一个database的目录,该目录下有一个runinstall的脚本,运行该脚本,待安装审查通过之后就可以正常看到图形化的安装界面了。
[oracle@localhost ~] ./database/runInstaller
第一步是设置的你邮箱账号,用于订阅和技术支持,这个填不填都可以略过。
第二步有三个选项,“create and configure a database”适用于安装一个新的数据库并且配置数据库管理软件。“install database software only”是仅仅安装数据库管理软件。“upgrade anexisting database”则是更新已有的数据库。在这里我们选择第一个选项“create and configure a database”。
第四步选择安装数据库的类型,这里我们只是安装一个单数据库,并不安装集群,所以选择第一个。
这里选择数据库安装的版本,如果上面你选择类型的时候选择的是单实例的安装那么这里保持默认即可。
这里选择数据库存放的位置和数据库软件存放的位置,这里选择的路径是我们在上一步中创建的文件路径。一定要注意这里的文件路径要让oracle用户属组有读写执行权限。
创建数据库,这里由于我的目的很简单只要有数据库就行所以就保持了默认。
确认你数据库的标识符,因为我这没有连接外网所以这个填写只需要符合他的命名规范就行了。
在字符集这里一定需要注意一下,要讲字符集修改为UTF-8,否则以后使用数据库出现乱码会头疼。
设置存储设备,因为我的测试目标是为了测试iscsi的性能所以我这里选用了文件存储系统
设置密码这一块我为了简单方便,将所有系统预账户的用户名和密码统一的进行了设置
每一个数据库的属组,这里如果你在之前创建用户和属组的时候全部创建了的话那这里会显示每个组。如果你只创建了DBA那这里五个组都会是DBA。
所有配置项概览总结,这里建议保存一份以防止以后忘了再改某些配置项就非常麻烦。
等待安装https://img-blog.csdn.net/20170911181206506?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWlueGlob3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast” alt=”这里写图片描述” title=”” />/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
在安装的过程当中会弹出一个对话框提示你用root用户来执行以下两个脚本,这个时候需要先把这两个脚本执行完然后再回来继续安装。
等待安装过程结束完成
如果预检测项里面出现fail,请点击“Fix & Check Again”,会弹出提示让你运行脚本来解决。
但是安装完成之后你会发现没有sqlplus命令,这意味着使用命令行没有办法链接到数据库。我们需要修改一下oracle用户的环境变量。
vi ~/.bash_profile
# add to the end
export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=orcl
[oracle@localhost database]$ source ~/.bash_profile
vi /etc/oratab
# change like follows
[oracle@localhost database]$ vim /etc/oratab
# change like follows
orcl:/u01/app/oracle/product/12.1.0/dbhome_1:Y
#创建启动服务
[oracle@localhost ~] vim /etc/sysconfig/orcl.oracledb
# create new : define environment variables
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1
ORACLE_SID=orcl
# 配置监听服务
[oracle@localhost ~] vim /usr/lib/systemd/system/[email protected]
[Unit]
Description=oracle net listener
After=network.target listner.service
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/orcl.oracledb
ExecStart=/u01/app/oracle/product/12.1.0/dbhome_1/bin/dbstart /u01/app/oracle/product/12.1.0/dbhome_1
ExecStop=/u01/app/oracle/product/12.1.0/dbhome_1/bin/dbshut /u01/app/oracle/product/12.1.0/dbhome_1
User=oracle
[Install]
WantedBy=multi-user.target
#配置数据库服务
[oracle@localhost ~] vi /usr/lib/systemd/system/[email protected]
[Unit]
Description=oracle net listener
After=network.target lsnrctl.service
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/orcl.oracledb
ExecStart=/u01/app/oracle/product/12.1.0/dbhome_1/bin/dbstart /u01/app/oracle/product/12.1.0/dbhome_1
ExecStop=/u01/app/oracle/product/12.1.0/dbhome_1/bin/dbshut /u01/app/oracle/product/12.1.0/dbhome_1
User=oracle
[Install]
WantedBy=multi-user.target
[oracle@localhost ~] systemctl daemon-reload
[oracle@localhost ~] systemctl enable orcl@listner orcl@oracledb
在解压完Oracle软件包之后运行runIinstaller安装脚本时,脚本会检查临时文件夹空间,交换空间和显示器情况,只有在三者都通过之后图形化安装界面才能出来。博主就遇到了检查不同的情况,错误如下:
$ ./runInstaller
Starting Oracle Universal Installer...
Checking Temp space: must be greater than 120 MB. Actual 42451 MB Passed
Checking swap space: must be greater than 150 MB. Actual 4031 MB Passed
Checking monitor: must be configured to display at least 256 colors
>>> Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLAY variable is set. Failed <<<<
Some requirement checks failed. You must fulfill these requirements before
continuing with the installation,
Continue? (y/n) [n] n
如果是直接连接的方式出现了该问题可按照以下方法来解决。
1.首先登陆到root用户执行
#xdpyinfo记录下name of display:后面的字符串,如127.0.0.1:1.0
如果没有的话则使用命令# xhost +SI:localuser:oracle 添加一个
2.#xhost +
返回信息为: access control disabled,clients can connect from any host
或者xhost +SI:localuser:oracle
3.切换到Oracle用户:
#su - oracle
4.在Oracle用户下执行命令:
export DISPLAY=:1.0
5.在Oracle下执行xdpyinfo命令,如果能正常显示,说明设置成功
当然网上的方法也是有局限性,因为博主正好不能用这种情况来解决。博主是用的服务器当中的一台虚机,所以自然而然的使用的是VNC远程桌面协议来链接到的虚机。在虚拟里面安装的是tigervnc来实现的可视化。
如果这里是用了VNC的话则需要考虑VNC是使用什么账号来开的session。在我最开始的配置文件中我是用的是root账户
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/root/.vnc/%H%i.pid
所以导致了su - oracle时 无法执行可视化安装程序。这里需要在给oracle用户再单独开一个vnc的session来解决这个问题。