Oracle Database 19c 的 Linux 防火墙配置

在 CentOS 8 防火墙中允许 Oracle SQL* Net Listener 端口 1521/tcp。

[root@oracle-db-19c ~]# firewall-cmd --permanent --add-port=1521/tcp
success
[root@oracle-db-19c ~]# firewall-cmd --reload
success

为 Oracle 用户配置 Linux 环境

以 oracle 用户身份连接。

[root@oracle-db-19c ~]# su - oracle
[oracle@oracle-db-19c ~]$

编辑 oracle 用户的 .bash_profile 。

[oracle@oracle-db-19c ~]$ vi ~/.bash_profile

并在此文件的末尾添加以下配置。

# Oracle Settings
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=oracle-db-19c.onitroad.com
export ORACLE_UNQNAME=cdb1
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1
export ORA_INVENTORY=/u01/app/oraInventory
export ORACLE_SID=cdb1
export PDB_NAME=pdb1
export DATA_DIR=/u02/oradata
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib

执行 .bash_profile 为当前会话设置环境。

[oracle@oracle-db-19c ~]$ source ~/.bash_profile

在 CentOS 8 上以静默模式安装 Oracle Database 19c

我们可以从 Oracle 网站下载 Oracle Database 19c。

我们需要创建一个免费的 Oracle Single Sign-On 帐户才能登录和下载。

我们已经下载了适用于 Linux 的 Oracle Database 19c (19.3) 并将其传输到 oracle 用户的主目录中。

将下载的 zip 文件解压到 ORACLE_HOME 目录。

[oracle@oracle-db-19c ~]$ unzip LINUX.X64_193000_db_home.zip -d $ORACLE_HOME

Oracle Database 19c 安装程序在检测 CentOS 8 操作系统时出现问题,但是,我们可以通过在开始安装之前设置环境变量来解决它。

[oracle@oracle-db-19c ~]$ export CV_ASSUME_DISTID=RHEL8.0

转到 ORACLE_HOME 目录并开始安装。

[oracle@oracle-db-19c ~]$ cd $ORACLE_HOME
[oracle@oracle-db-19c dbhome_1]$ ./runInstaller -ignorePrereq -waitforcompletion -silent \
> oracle.install.option=INSTALL_DB_SWONLY \
> ORACLE_HOSTNAME=${ORACLE_HOSTNAME} \
> UNIX_GROUP_NAME=oinstall \
> INVENTORY_LOCATION=${ORA_INVENTORY} \
> ORACLE_HOME=${ORACLE_HOME} \
> ORACLE_BASE=${ORACLE_BASE} \
> oracle.install.db.InstallEdition=EE \
> oracle.install.db.OSDBA_GROUP=dba \
> oracle.install.db.OSBACKUPDBA_GROUP=backupdba \
> oracle.install.db.OSDGDBA_GROUP=dgdba \
> oracle.install.db.OSKMDBA_GROUP=kmdba \
> oracle.install.db.OSRACDBA_GROUP=racdba \
> SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \
> DECLINE_SECURITY_UPDATES=true
Launching Oracle Database Setup Wizard...
The response file for this session can be found at:
 /u01/app/oracle/product/19.3.0/dbhome_1/install/response/db_2020-04-28_02-44-19PM.rsp
You can find the log of this install session at:
 /tmp/InstallActions2020-04-28_02-44-19PM/installActions2020-04-28_02-44-19PM.log
As a root user, execute the following script(s):
        1. /u01/app/oraInventory/orainstRoot.sh
        2. /u01/app/oracle/product/19.3.0/dbhome_1/root.sh
Execute /u01/app/oraInventory/orainstRoot.sh on the following nodes:
[oracle-db-19c]
Execute /u01/app/oracle/product/19.3.0/dbhome_1/root.sh on the following nodes:
[oracle-db-19c]

Successfully Setup Software.
Moved the install session logs to:
 /u01/app/oraInventory/logs/InstallActions2020-04-28_02-44-19PM

以 root 用户身份连接并执行安装后脚本。

[oracle@oracle-db-19c dbhome_1]$ su 
Password:
Last login: Tue Apr 28 14:09:02 PKT 2020 on pts/2
[root@oracle-db-19c ~]# /u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.
Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.
[root@oracle-db-19c ~]# /u01/app/oracle/product/19.3.0/dbhome_1/root.sh
Check /u01/app/oracle/product/19.3.0/dbhome_1/install/root_oracle-db-19c.onitroad.com_2020-04-28_15-01-30-090367646.log for the output of root script

Oracle Database 19c 已安装在 CentOS 8 服务器上。

在 CentOS 8 中调整内核参数

根据 Oracle Database 19c 的要求设置以下内核参数。

在 /etc/sysctl.d 目录下创建 98-oracle.conf 配置文件。

[root@oracle-db-19c ~]# vi /etc/sysctl.d/98-oracle.conf

并在此文件中添加以下内核参数集。

fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500

现在使用 sysctl 命令重新加载内核参数。

[root@oracle-db-19c ~]# sysctl -p

为 Oracle 用户设置安全限制

在/etc/security/limits.d目录下创建30-oracle.conf配置文件,设置oracle用户的安全限制。

[root@oracle-db-19c ~]# vi /etc/security/limits.d/30-oracle.conf

并其中添加以下指令。

oracle   soft   nofile    1024
oracle   hard   nofile    65536
oracle   soft   nproc    16384
oracle   hard   nproc    16384
oracle   soft   stack    10240
oracle   hard   stack    32768
oracle   hard   memlock    134217728
oracle   soft   memlock    134217728

为 Oracle Database 19c 创建用户和组

根据 Oracle Database 19c 的要求创建 Linux 用户和组。

[root@oracle-db-19c ~]# groupadd -g 1501 oinstall
[root@oracle-db-19c ~]# groupadd -g 1502 dba
[root@oracle-db-19c ~]# groupadd -g 1503 oper
[root@oracle-db-19c ~]# groupadd -g 1504 backupdba
[root@oracle-db-19c ~]# groupadd -g 1505 dgdba
[root@oracle-db-19c ~]# groupadd -g 1506 kmdba
[root@oracle-db-19c ~]# groupadd -g 1507 racdba
[root@oracle-db-19c ~]# useradd -u 1501 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba oracle
[root@oracle-db-19c ~]# echo "oracle" | passwd oracle --stdin
Changing password for user oracle.
passwd: all authentication tokens updated successfully.

在 CentOS 8 中禁用透明 HugePages

Oracle 建议我们禁用 Transparent HugePages ,因为它们可能会导致访问内存延迟,从而导致 Oracle RAC 环境中的节点重新启动以及 Oracle 数据库单实例的性能问题或者延迟。
相反,Oracle 建议为基于 Linux 的操作系统使用标准 HugePages。

EL (Enterprise Linux) 6 或者更高版本中默认启用透明 HugePages。

验证我们的 CentOS 8 服务器上是否启用了 Transparent HugePages。

[root@oracle-db-19c ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

[always] 标志表明我们的 CentOS 8 服务器正在使用 Transparent HugePages。

要禁用 Transparent HugePages,我们需要编辑 GRUB 配置。

[root@oracle-db-19c ~]# vi /etc/default/grub

在 GRUB_CMDLINE_LINUX 参数的末尾添加“transparent_hugepage=never”。
编辑后,该指令应如下所示。

GRUB_CMDLINE_LINUX="resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet transparent_hugepage=never"

使用修改后的配置生成 /boot/grub2/grub.cfg 文件。

[root@oracle-db-19c ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
done

重新启动 CentOS 8 机器使更改生效。

[root@oracle-db-19c ~]# systemctl reboot

重新启动后,再次检查 Transparent HugePages 的状态。

[root@oracle-db-19c ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

透明 HugePages 现在已被禁用。

在 CentOS 8 上为 Oracle Database 19c 创建 SystemD 服务

要在 CentOS 8 上配置 Oracle Database 19c 的自动启动,我们必须编写一个 SystemD 服务。

[root@oracle-db-19c ~]# vi /usr/lib/systemd/system/dbora.service

在此文件中添加以下代码行。

[Unit]
Description=Oracle Database Service
After=network.target

[Service]
Type=forking
ExecStart=/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbstart /u01/app/oracle/product/19.3.0/dbhome_1
ExecStop=/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbshut /u01/app/oracle/product/19.3.0/dbhome_1
User=oracle
TimeoutSec=300s

[Install]
WantedBy=multi-user.target

执行以下命令以通知 SystemD 有关单元文件的更改。

[root@oracle-db-19c ~]# systemctl daemon-reload

启用并启动 Oracle Database 19c 服务。

[root@oracle-db-19c ~]# systemctl enable --now dbora.service
Created symlink /etc/systemd/system/multi-user.target.wants/dbora.service -> /usr/lib/systemd/system/dbora.service.

验证 Oracle Database 19c 服务的状态。

[root@oracle-db-19c ~]# systemctl status dbora.service
-> dbora.service - Oracle Database Service
   Loaded: loaded (/usr/lib/systemd/system/dbora.service; enabled; vendor prese>
   Active: active (running) since Tue 2020-04-28 16:01:39 PKT; 3s ago
  Process: 27957 ExecStart=/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbstart >
    Tasks: 57 (limit: 12367)
   Memory: 1.0G
   CGroup: /system.slice/dbora.service
           ->->28067 ora_pmon_cdb1
           ->->28069 ora_clmn_cdb1
           ->->28071 ora_psp0_cdb1
           ->->28073 ora_vktm_cdb1

我们已经在 CentOS 8 服务器上成功安装了 Oracle Database 19c 并在该服务器中创建了一个数据库。

在静默模式下创建 Oracle 19c 多租户数据库

使用以下命令启动 Oracle 侦听器。

[oracle@oracle-db-19c ~]$ lsnrctl start
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 28-APR-2020 15:04:29
Copyright (c) 1991, 2019, Oracle.  All rights reserved.
Starting /u01/app/oracle/product/19.3.0/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Log messages written to /u01/app/oracle/diag/tnslsnr/oracle-db-19c/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle-db-19c.onitroad.com)(PORT=1521)))
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
-----------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                28-APR-2020 15:04:30
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/app/oracle/diag/tnslsnr/oracle-db-19c/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle-db-19c.onitroad.com)(PORT=1521)))
The listener supports no services
The command completed successfully

使用以下命令创建 Oracle 19c Multitenant 数据库。

[oracle@oracle-db-19c ~]$ dbca -silent -createDatabase \
> -templateName General_Purpose.dbc \
> -gdbname ${ORACLE_SID} -sid  ${ORACLE_SID} \
> -responseFile NO_VALUE \
> -characterSet AL32UTF8 \
> -sysPassword V3ryStr@ng \
> -systemPassword V3ryStr@ng \
> -createAsContainerDatabase true \
> -numberOfPDBs 1 \
> -pdbName ${PDB_NAME} \
> -pdbAdminPassword V3ryStr@ng \
> -databaseType MULTIPURPOSE \
> -automaticMemoryManagement false \
> -totalMemory 800 \
> -storageType FS \
> -datafileDestination "${DATA_DIR}" \
> -redoLogFileSize 50 \
> -emConfiguration NONE \
> -ignorePreReqs
Prepare for db operation
8% complete
Copying database files
31% complete
Creating and starting Oracle instance
32% complete
36% complete
40% complete
43% complete
46% complete
Completing Database Creation
51% complete
53% complete
54% complete
Creating Pluggable Databases
58% complete
77% complete
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the logfiles at:
 /u01/app/oracle/cfgtoollogs/dbca/cdb1.
Database Information:
Global Database Name:cdb1
System Identifier(SID):cdb1
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/cdb1/cdb1.log" for further details.

以 root 用户身份连接并执行以下命令以启用 Oracle 数据库的自动启动。

[oracle@oracle-db-19c ~]$ su 
Password:
Last login: Tue Apr 28 15:01:17 PKT 2020 on pts/2
[root@oracle-db-19c ~]# sed -i 's/:N$/:Y/g' /etc/oratab

使用 sqlplus 命令连接到 SQL Shell。

[oracle@oracle-db-19c ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Tue Apr 28 15:57:06 2020
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL>

启用 Oracle Managed File (OMF) 以简化数据库和数据库文件的创建。

SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST='/u02/oradata' SCOPE=BOTH;
System altered.

在启动容器数据库时启用可插拔数据库的自动启动。

SQL> ALTER PLUGGABLE DATABASE PDB1 SAVE STATE;
Pluggable database altered.
on  it road.com

在 CentOS 8 中配置 SELinux 模式

持续将 SELinux 模式设置为 permissive。

[root@oracle-db-19c ~]# sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/sysconfig/selinux
[root@oracle-db-19c ~]# setenforce permissive

在 CentOS 8 中配置本地 DNS 解析器

在 CentOS 8 以及其他 Linux 发行版上安装 Oracle Database 19c 之前,有必要配置正确的名称解析。

如果网络使用 DNS 服务器,那么我们可以在 DNS 服务器中配置名称解析,否则我们可以使用本地 DNS 解析器对 Oracle 数据库服务器进行名称解析。

在本地 DNS 解析器 (/etc/hosts) 文件中添加所需的名称解析指令。

[root@oracle-db-19c ~]# echo "192.168.1.206 oracle-db-19c.onitroad.com oracle-db-19c" >> /etc/hosts

在 CentOS 8 上安装 Oracle Database 19c 的必备软件包

Oracle Database 19c 需要一些软件包,因此,我们在继续之前安装这些软件包。

我们可以使用 dnf 命令安装 Oracle Database 19c 准备工作。

[root@oracle-db-19c ~]# dnf install -y bc \
> binutils \
> elfutils-libelf \
> elfutils-libelf-devel \
> fontconfig-devel \
> glibc \
> glibc-devel \
> ksh \
> libaio \
> libaio-devel \
> libXrender \
> libXrender-devel \
> libX11 \
> libXau \
> libXi \
> libXtst \
> libgcc \
> librdmacm-devel \
> libstdc++ \
> libstdc++-devel \
> libxcb \
> make \
> net-tools \
> smartmontools \
> sysstat \
> unzip \
> libnsl \
> libnsl2

为 Oracle Database 19c 创建目录

要安装 Oracle Database 19c 软件,请创建必要的目录并调整这些目录的所有权和权限。

[root@oracle-db-19c ~]# mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1
[root@oracle-db-19c ~]# mkdir -p /u02/oradata
[root@oracle-db-19c ~]# chown -R oracle:oinstall /u01 /u02
[root@oracle-db-19c ~]# chmod -R 775 /u01 /u02

在这里,我们创建了两个目录,用于 Oracle RDBMS 的 /u01 和用于 Oracle 数据库的 /u02.

在 CentOS 8 上安装 Oracle Database 19c

Oracle Database 19c 是 Oracle 开发的多模型数据库。

Oracle Database 19c 通常用于 OLTP(在线事务处理)、DW(数据仓库)和混合 (OLTP + DW) 数据库工作负载。
Oracle Database 19c 在专有许可下分发,但可以从 Oracle 网站免费下载。

Oracle Database 19c 也可用于各种平台(包括 Linux 和 Microsoft Windows)的公共和私有云、exadata 和本地系统。

在本文中,我们将学习如何以静默模式在 CentOS 8 本地服务器上安装 Oracle Database 19c 并在该服务器上创建多租户数据库。

日期:2020-09-17 00:11:36 来源:oir作者:oir