Zeuk, Zozo's father

CentOS 7 安装 Oracle 12c R2

2019.01.10

之前因为工作的需要,只在 CentOS-6 下安装过 Oracle 11g,最近尝试在自己的 CentOS-7 虚拟机中安装 Oracle 12c,看了网上的教程或多或少都有点问题,于是自己倒腾了几天,将安装过程予以记录。

安装 Oracle 前的环境准备

检查网络是否连通 & 修改 hosts

首先检查网络是否连通,然后查看本机的 hostnameip,我这里 hostnamecentos7-vmip192.168.88.129,然后在 /etc/hosts 文件中添加一条 ip hostname 的记录。

ping baidu.com
yum install -y nano # 安装 nano 编辑器,不习惯用 vi
cat /etc/hostname # 查看主机名
ip addr # 查看本机 IP
nano /etc/hosts

# 在文件末尾添加如下行
192.168.88.129   centos7-vm

安装 EPEL

EPEL (Extra Packages for Enterprise Linux) 是基于 Fedora 的一个项目,为 红帽系 的操作系统提供额外的软件包,适用于 RHEL、CentOS 和 Scientific Linux。我这里安装的是 USTC(中国科学技术大学) 的 EPEL 源

yum install -y epel-release
sed -e 's!^mirrorlist=!#mirrorlist=!g' \
    -e 's!^#baseurl=!baseurl=!g' \
    -e 's!//download\.fedoraproject\.org/pub!//mirrors.ustc.edu.cn!g' \
    -e 's!http://mirrors\.ustc!https://mirrors.ustc!g' \
    -i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo

更新系统并重启

yum -y update
reboot

关闭防火墙和 SELinux,关闭 SELinux 需要重启

systemctl stop firewalld # 停止防火墙
systemctl disable firewalld # 关机开机启动防火墙
sed 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 禁用 SELinux
reboot

安装 MATE 桌面并重启

因为我是最小化安装的 CentOS,所以是不带图形界面的,所以这里安装的是 MATE 桌面

yum groupinstall -y mate-desktop
yum groupinstall -y "X Window System"
systemctl set-default graphical.target
reboot

安装中文字体

把 Windows 系统下 C:\Windows\Fonts 目录下需要的中文字体文件复制到 CentOS 下的 /usr/share/fonts/chinese/ 目录下,我这里使用的幼圆 SIMYOU.TTF 字体, 然后执行如下命令即可安装这些字体

cd /usr/share/fonts/chinese/ # 切换到新字体目录
mkfontscale # 在当前目录下生成fonts.scale文件
mkfontdir  # 在当前目录下生成fonts.dir文件
fc-cache -fv # 重新建立字体缓存

安装解压缩软件

yum install -y zip unzip

创建运行 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用户

修改内核参数

kernel.shmmax 配置最大的内存segment的大小,可以设置为物理内存的 90%(需要将内存换算成 bytekernel.shmall 配置共享内存总页数,设置为物理内存 / 4 (需要将内存换算成 kB

首先查看物理内存

cat /proc/meminfo | grep MemTotal
MemTotal:       16412684 kB

我这里物理内存为 16412684 kB,那么 kernel.shmmax 的值为 16412684 * 1024 * 90% ≈ 15125929574 kernel.shmall 的值为 16412684 / 4 ≈ 4103171

nano /etc/sysctl.conf

# 在文件中添加如下内容
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 4103171
kernel.shmmax = 15125929574
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

sysctl -p # 使以上配置生效

oracle 用户设置限制并重启

nano /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 32768

reboot

创建 Oracle 数据库安装目录

mkdir -p /data/oracle #oracle数据库安装目录
mkdir -p /data/oraInventory #oracle数据库配置文件目录
mkdir -p /data/database #oracle数据库软件包解压目录

#设置目录所有者为oinstall用户组的oracle用户
chown -R oracle:oinstall /data/oracle
chown -R oracle:oinstall /data/oraInventory
chown -R oracle:oinstall /data/database

安装 Oracle 数据库所需的软件包

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 smartmontools.x86_64 net-tools.x86_64 sysstat.x86_64

配置 oracle 用户的环境变量

nano /home/oracle/.bash_profile

# 在文件中添加如下内容
export ORACLE_BASE=/data/oracle #oracle数据库安装目录
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0.1.0/dbhome_1 #oracle数据库路径
export ORACLE_SID=orcl #oracle启动数据库实例名
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH #添加系统环境变量
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib #添加系统环境变量
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"  #设置Oracle客户端字符集,必须与Oracle安装时设置的字符集保持一致

source /home/oracle/.bash_profile  # 使环境变量生效

将 Oracle 安装文件 linuxx64_12201_database.zip 上传到服务器 /tmp 目录

解压缩 Oracle 安装文件到 /data/database/ 目录

unzip /tmp/linuxx64_12201_database.zip -d /data/database/
chown -R oracle:oinstall /data/database/database/ # 将安装文件拥有者更改为 oracle 用户

安装和配置 Oracle

Oracle 的安装

使用 oracle 用户登入图形化系统,然后进入数据库安装文件目录执行安装脚本,接着会出现 Oracle 的图形安装界面

cd /data/database/database/ # 进入安装目录
./runInstaller # 执行安装

1 . 是否需要接收安全更新邮件,否,去掉前面的勾,点击 Next 下一步

2 . 确认不接收安全更新邮件,点击 yes 下一步

3 . 选第二个,仅安装数据库,点击 Next 下一步

4 . 选第一个,安装单实例数据库,点击 Next 下一步

5 . 选第一个,安装企业版,点击 Next 下一步

6 . 设定 Oracle 的安装目录,默认为前面配置的环境变量,点击 Next 下一步

7 . 设定 Oracle 配置文件目录,默认,点击 Next 下一步

8 . 选择各功能的用户组,其中除了第二个需要手动选择 oinstall 用户组外,其他的默认,点击 Next 下一步

9 . 安装设置汇总页面,点击 install 开始数据库的安装

10 . 在安装过程中,会提示需要用 root 用户执行以下2个脚本,执行完后,点击 OK

11 . 到这里 Oracle 数据库就安装完成了,点击 Close 结束安装

创建数据库实例和监听

数据库安装完成后,需要配置数据库实例和监听,同样需要使用 oracle 用户登入图形化系统,打开终端输入如下命令后会弹出配置的图形界面

dbca

1 . 选择第一个创建数据库,点击 Next 下一步

2 . 选择高级配置,点击 Next 下一步

3 . 选择一般用途数据库,点击 Next 下一步

4 . 设置数据库名和 SID 并且取消创建数据库容器的勾选,点击 Next 下一步

5 . 选择数据库存储系统为文件系统,默认即可,点击 Next 下一步

6 . 配置数据库闪回区,这里不需要配置,点击 Next 下一步

7 . 勾选创建监听,输入监听名和端口,点击 Next 下一步

8 . Data Vault 安全配置,这里不需要配置,点击 Next 下一步

9 . Configuration Options 这里共5部分

Memory 配置,这里选择第一个,然后将右边的滑块调到内存的 75% 左右

Sizing 配置,这里根据实际情况将数据库允许的最大连接数调整到合适的数值,我这里配置为 1000

Character sets 配置,字符集采用 ZHS16GBK,如作为其他数据库迁移需要确认迁移数据库的字符集,数据库字符集查询语句:select * from nls_database_parameters; 查看字符集信息(其中 NLS_NCHAR_CHARACTERSET 为国家字符集,NLS_CHARACTERSET 为数据库字符集)

其他的默认即可,然后点击 Next 下一步

10 . EM 配置,EM 是 Oracle 自带的基于 web 接口的图形化数据库管理工具。默认为勾选,点击 Next 下一步

11 . 数据库用户密码配置,这里选择第二个为所有用户使用相同的管理密码,输入密码后,点击 Next 下一步

12 . Creation Option,可以选择仅生成脚本或存为模板,这里选择第一个创建数据库,点击 Next 下一步

13 . 配置概要,确认无误后,点击 Finish 开始数据库的安装

14 . 安装过程

15 . 最后如下图所示,代表数据库实例和监听创建成功,点击 Close 结束配置

安装完成后查看监听状态,确认是否安装成功(oracle 用户)

lsnrctl status

其他设置

设置 Oracle 自动启动关闭

首先使用 oracle 用户修改以下三个文件

nano /etc/oratab # 在文件找到 'orcl:/data/oracle/product/12.2.0.1.0/dbhome_1:N' 将其修改为 'orcl:/data/oracle/product/12.2.0.1.0/dbhome_1:Y'
nano $ORACLE_HOME/bin/dbstart # 在文件中找到 'ORACLE_HOME_LISTNER=$1',将其修改为 'ORACLE_HOME_LISTNER=$ORACLE_HOME'
nano $ORACLE_HOME/bin/dbshut  # 在文件中找到 'ORACLE_HOME_LISTNER=$1',将其修改为 'ORACLE_HOME_LISTNER=$ORACLE_HOME'

然后使用 root 用户修改 /etc/rc.d/rc.local 文件

nano /etc/rc.d/rc.local

# 添加如下内容
su - oracle -lc "/data/oracle/product/12.2.0.1.0/dbhome_1/bin/lsnrctl start"
su - oracle -lc "/data/oracle/product/12.2.0.1.0/dbhome_1/bin/dbstart"

chmod +x /etc/rc.d/rc.local # 赋予执行权限

设置兼容性

由于 Oracle12c 默认不兼容低版本的 Oracle 客户端,导致客户端无法连接。所以需要在 $ORACLE_HOME/network/admin/sqlnet.ora 文件中添加如下行,使之兼容低版本的客户端,使用 oracle 用户打开终端执行以下操作

nano $ORACLE_HOME/network/admin/sqlnet.ora

# 添加如下内容
SQLNET.ALLOWED_LOGON_VERSION=8

另外由于用户密码规则事先写入,导致低版本客户端无法识别,此时需要使用 dba 权限登入本地数据库修改 syssystem 密码,使用 oracle 用户打开终端执行以下操作

sqlplus / as sysdba # 以 dba 权限进入 sql 环境

SQL> alter user sys identified by 12345678;
SQL> alter user system identified by 12345678;

deferred_segment_creation 参数设置,默认是true,这会导致在数据库表导出时,空表不会导出。所以这里需要将该参数设置为 false 并且需要重启系统才能生效,使用 oracle 用户打开终端执行以下操作

sqlplus / as sysdba # 以 dba 权限进入 sql 环境

SQL> show parameter deferred_segment_creation;  # 查看设置
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation	     boolean	 TRUE

SQL> alter system set deferred_segment_creation=false;  # 设置参数为 false
SQL> quit; # 退出 sql 环境

reboot # 使用 root 用户重启系统
发表评论