如何在 CentOS 7 部署 Oracle 19c 数据库

添加用户

添加 oracle 用户并设置用户密码。

1
2
adduser oracle
passwd oracle

添加 oinstalldba 组。

1
2
groupadd oinstall
groupadd dba

设置 oracle 用户的主组为 oinstall 附加组为 dba

1
usermod -g oinstall -G dba oracle

新建目录并设置权限

新建 u01 目录。

1
mkdir /u01

打开 /etc/fstab 文件,添加以下内容:

1
/dev/sdb1 /u01 xfs defaults 0 0

重启或执行以下命令,将 sdb1 分区挂载到 u01 目录。

1
mount -a

新建 oracleoraInventory 目录。

1
2
mkdir -p /u01/app/oracle
mkdir -p /u01/app/oraInventory

分别将它们指定为 dbaoinstall 组。

1
2
chown -R oracle:dba /u01/app/oracle
chown -R oracle:oinstall /u01/app/oraInventory

配置环境变量

打开 /home/oracle/.bash_profile 文件,配置环境变量。

1
2
3
4
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=orcl

安装 Oracle Database 19c

https://www.oracle.com/database/technologies/oracle-database-software-downloads.html 选择 Linux x86-64 用迅雷下载 Oracle Database 19c,使用 WinSCP 上传到 Linux。新建 dbhome_1 目录并解压 LINUX.X64_193000_db_home.zip

1
2
mkdir -p /u01/app/oracle/product/19.3/dbhome_1
unzip LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.3/dbhome_1

指定所有者和组。

1
chown -R oracle:dba /u01/app/oracle

使用 oracle 用户登录 CentOS 7 图形界面,打开终端执行以下命令运行 runInstaller 安装脚本。

1
/u01/app/oracle/product/19.3/dbhome_1/runInstaller

然后在弹出的安装界面参考以下步骤安装:

  1. 配置选项,选择“仅设置软件”;
    配置选项
  2. 数据库安装选项;
    数据库安装选项
  3. 数据库版本;
    数据库版本
  4. 安装位置;
    安装位置
  5. 创建产品清单;
    创建产品清单
  6. 操作系统组,数据库操作员组选择“dba”;
    操作系统组
  7. Root 脚本执行,勾选“自动运行配置脚本”,使用“root”用户身份证明并输入口令;
    Root 脚本执行
  8. 先决条件检查,修补并再次检查,对于不可修复的需要手动修复后重新检查;
    先决条件检查
  9. 概要;
    概要
  10. 安装产品,点击“是”继续;
    安装产品
  11. 完成。
    完成

监听程序与本地 Net 服务名配置

执行以下命令配置监听程序与本地 Net 服务名:

1
netca

创建数据库

执行以下命令创建数据库:

1
dbca

设置开机自启动

打开 /etc/oratab 文件,将 orcl:/u01/app/oracle/product/19.3/dbhome_1:N 修改为 orcl:/u01/app/oracle/product/19.3/dbhome_1:Y。然后再打开 /etc/rc.d/rc.local 文件,添加以下内容:

1
2
su oracle -lc "/u01/app/oracle/product/19.3/dbhome_1/bin/lsnrctl start"
su oracle -lc "/u01/app/oracle/product/19.3/dbhome_1/bin/dbstart"

执行以下命令使 rc.local 文件具有可执行权限:

1
chmod +x /etc/rc.d/rc.local

开放端口

执行以下命令开放 1521 端口:

1
firewall-cmd --zone=public --add-port=1521/tcp --permanent

重新加载 firewalld,使规则立即生效。

1
firewall-cmd --reload

问题及解决方法

以下是安装时先决条件检查失败及未设置开机自启动会遇到的问题,对于 ORA-12541、ORA-12514 和 ORA-01034 问题,其实设置开机自启动后就可以不用理会了,写出来主要是一些时候方便参考。
先决条件检查失败

  • 操作系统内核参数 shmmax
    要确定共享内存段的最大大小,请运行:
1
cat /proc/sys/kernel/shmmax

shmmax 可以在 /proc/sys/kernel/shmmax 文件或执行以下命令(4x1024x1024x1024=4G)更改而无需重新启动。

1
sysctl -w kernel.shmmax = 4294967296

要使更改永久生效,请将以下内容添加到 /etc/sysctl.conf 文件并重新启动。

1
kernel.shmmax = 4294967296
  • 交换空间大小

在分区时,如果合理分配交换分区就不会存在这个问题了,不过也可以通过添加交换文件的方式来增加交换空间大小。首先要生成 2G 的 swapfile 文件:

1
dd if=/dev/zero of=swapfile bs=1M count=2048

swapfile 文件格式化为交换文件。

1
mkswap swapfile

启用交换文件。

1
swapon swapfile

/etc/fstab 文件添加以下内容,以便在重新启动时启用。

1
/swapfile swap swap defaults 0 0
  • 程序包

使用 yum 安装依赖的程序包。

ORA-12541: TNS:no listener
ORA-12541: TNS:no listener
执行以下命令,启动监听。

1
lsnrctl start

ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
打开 /u01/app/oracle/product/19.3/dbhome_1/network/admin/listener.ora 文件,添加以下内容:

1
2
3
4
5
6
7
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME = /u01/app/oracle/product/19.3/dbhome_1)
(SID_NAME = orcl)
)
)

ORA-01034: ORACLE not available
ORA-01034: ORACLE not available
打开 SQL Plus,使用 sys 用户强制关闭,再启动数据库。

1
2
3
4
sqlplus /nolog
conn sys/sys as sysdba
shutdown abort
startup