在 CentOS 7 中调整 SELinux 模式
将 SELinux 设置为 Permissive 模式。
[root@oracle-01 ~]# sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/sysconfig/selinux [root@oracle-01 ~]# setenforce permissive
为 Oracle Database 18c 创建目录
我们使用以下两个目录,一个用于 RDBMS 软件,另一个用于 Oracle 数据库。
[root@oracle-01 ~]# mkdir -p /u01/app/oracle/product/18.3.0/dbhome_1 [root@oracle-01 ~]# mkdir -p /u02/oradata [root@oracle-01 ~]# chown -R oracle:oinstall /u01 /u02 [root@oracle-01 ~]# chmod -R 775 /u01 /u02
在 CentOS 7 上以静默模式安装 Oracle Database 18c
我们已经从 Oracle 网站下载了适用于 Linux 的 Oracle Database 18c (18.3),并使用 WinSCP 将 zip 文件传输到我们的 CentOS 7 虚拟机。
切换到 oracle 用户并解压下载的 zip 文件。
[root@oracle-01 ~]# su - oracle [oracle@oracle-01 ~]# unzip LINUX.X64_180000_db_home.zip -d $ORACLE_HOME
以静默模式启动 Oracle Database 18c 安装。
[oracle@oracle-01 ~]$ cd $ORACLE_HOME [oracle@oracle-01 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... [WARNING] [INS-13014] Target environment does not meet some optional requirements. CAUSE: Some of the optional prerequisites are not met. See logs for details. installActions2019-03-20_10-26-13PM.log ACTION: Identify the list of failed prerequisite checks from the log: installActions2019-03-20_10-26-13PM.log. Then either from the log file or from installation manual find the appropriate configuration to meet the prerequisites and fix it manually. The response file for this session can be found at: /u01/app/oracle/product/18.3.0/dbhome_1/install/response/db_2019-03-20_10-26-13PM.rsp You can find the log of this install session at: /tmp/InstallActions2019-03-20_10-26-13PM/installActions2019-03-20_10-26-13PM.log As a root user, execute the following script(s): 1. /u01/app/oraInventory/orainstRoot.sh 2. /u01/app/oracle/product/18.3.0/dbhome_1/root.sh Execute /u01/app/oraInventory/orainstRoot.sh on the following nodes: [oracle-01] Execute /u01/app/oracle/product/18.3.0/dbhome_1/root.sh on the following nodes: [oracle-01] Successfully Setup Software with warning(s). Moved the install session logs to: /u01/app/oraInventory/logs/InstallActions2019-03-20_10-26-13PM
Oracle Universal Installer 发出警告,因为我们在具有 2 GB 内存 的系统上进行安装,而 Oracle 建议至少 8 GB 内存 用于 Oracle Database 18c 安装。
因此,我们可以放心地忽略此警告。
已安装 Oracle 数据库 18c。
现在以 root 用户身份连接并执行安装后脚本。
[root@oracle-01 ~]# /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-01 ~]# /u01/app/oracle/product/18.3.0/dbhome_1/root.sh Check /u01/app/oracle/product/18.3.0/dbhome_1/install/root_oracle-01.onitroad.com_2019-03-20_22-42-29-680074976.log for the output of root script
在 CentOS 7 上安装 Oracle Database 18c 必备包
使用 yum 命令安装必备软件包。
[root@oracle-01 ~]# yum install -y bc binutils compat-libcap1 compat-libstdc++-33 glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst libXrender-devel libXrender libgcc libstdc++ libstdc++-devel libxcb make smartmontools sysstat net-tools nfs-utils gcc-c++
Oracle Database 18c 是 Oracle 关系数据库管理系统或者 RDBMS 的最新版本,是一个多模型数据库。
Oracle 数据库常用于在线事务处理/OLTP 和数据仓库/DW 环境。
Oracle Database 18c 也可用于公共和私有云、Exadata 和本地系统。
在本文中,我们将以静默模式在 CentOS 7 本地服务器上安装 Oracle Database 18c。
在 CentOS 7 中为 Oracle 用户设置安全限制
执行以下命令为 oracle 用户设置安全限制。
[root@oracle-01 ~]# cat >> /etc/security/limits.d/30-oracle.conf << EOF > 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 > EOF
在 CentOS 7 中设置环境变量
使用以下命令为 oracle 用户设置环境变量。
[root@oracle-01 ~]# su - oracle [oracle@oracle-01 ~]$ cat >> ~/.bash_profile << EOF > # Oracle Settings > export TMP=/tmp > export TMPDIR=$TMP > > export ORACLE_HOSTNAME=oracle-01.onitroad.com > export ORACLE_UNQNAME=cdb1 > export ORACLE_BASE=/u01/app/oracle > export ORACLE_HOME=$ORACLE_BASE/product/18.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 > EOF
在静默模式下创建 Oracle 18c 多租户数据库
手动启动默认的 Oracle 监听器。
[oracle@oracle-01 ~]$ lsnrctl start LSNRCTL for Linux: Version 18.0.0.0.0 - Production on 20-MAR-2019 22:47:53 Copyright (c) 1991, 2018, Oracle. All rights reserved. Starting /u01/app/oracle/product/18.3.0/dbhome_1/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 18.0.0.0.0 - Production Log messages written to /u01/app/oracle/diag/tnslsnr/oracle-01/listener/alert/log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle-01.onitroad.com)(PORT=1521))) Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) STATUS of the LISTENER ----------------------- Alias LISTENER Version TNSLSNR for Linux: Version 18.0.0.0.0 - Production Start Date 20-MAR-2019 22:47:53 Uptime 0 days 0 hr. 0 min. 1 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Log File /u01/app/oracle/diag/tnslsnr/oracle-01/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle-01.onitroad.com)(PORT=1521))) The listener supports no services The command completed successfully
在静默模式下创建一个 Oracle 18c 多租户数据库,如下所示。
[oracle@oracle-01 ~]$ dbca -silent -createDatabase \ > -templateName General_Purpose.dbc \ > -gdbname ${ORACLE_SID} -sid ${ORACLE_SID} \ > -responseFile NO_VALUE \ > -characterSet AL32UTF8 \ > -sysPassword 123 \ > -systemPassword 123 \ > -createAsContainerDatabase true \ > -numberOfPDBs 1 \ > -pdbName ${PDB_NAME} \ > -pdbAdminPassword 123 \ > -databaseType MULTIPURPOSE \ > -automaticMemoryManagement false \ > -totalMemory 800 \ > -storageType FS \ > -datafileDestination "${DATA_DIR}" \ > -redoLogFileSize 50 \ > -emConfiguration NONE \ > -ignorePreReqs [WARNING] [DBT-06208] The 'SYS' password entered does not conform to the Oracle recommended standards. CAUSE: a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 doirt [0-9]. b.The password entered is a keyword that Oracle does not recommend to be used as password ACTION: Specify a strong password. If required refer Oracle documentation for guidelines. [WARNING] [DBT-06208] The 'SYSTEM' password entered does not conform to the Oracle recommended standards. CAUSE: a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 doirt [0-9]. b.The password entered is a keyword that Oracle does not recommend to be used as password ACTION: Specify a strong password. If required refer Oracle documentation for guidelines. [WARNING] [DBT-06208] The 'PDBADMIN' password entered does not conform to the Oracle recommended standards. CAUSE: a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 doirt [0-9]. b.The password entered is a keyword that Oracle does not recommend to be used as password ACTION: Specify a strong password. If required refer Oracle documentation for guidelines. 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.
我们设置了一个简单的密码,因此 dbca 向我们发出警告。
以 root 身份连接并执行以下命令以启用 CDB1 数据库的自动重启。
[root@oracle-01 ~]# sed -i 's/:N$/:Y/g' /etc/oratab
使用 sqlplus 连接到 CDB1 并启用 Oracle Managed Files (OMF)。
[oracle@oracle-01 ~]$ sqlplus / as sysdba SQL*Plus: Release 18.0.0.0.0 - Production on Wed Mar 20 23:56:25 2019 Version 18.3.0.0.0 Copyright (c) 1982, 2018, Oracle. All rights reserved. Connected to: Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production Version 18.3.0.0.0 SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST='/u02/oradata' SCOPE=BOTH; System altered.
更改PDB1,使其在CDB1 Database 的数据库启动时自动打开。
SQL> ALTER PLUGGABLE DATABASE PDB1 SAVE STATE; Pluggable database altered.
在 CentOS 7 中调整内核参数
根据 Oracle Database 18c 的要求设置以下内核参数。
[root@oracle-01 ~]# cat >> /etc/sysctl.d/98-oracle.conf << EOF > 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 > EOF [root@oracle-01 ~]# sysctl -p
在 CentOS 7 中禁用透明大页面(Transparent Hugepages )
透明大页面可能会导致运行时内存分配延迟。
因此,为避免性能问题,Oracle 建议在开始安装之前禁用透明大页面。
Oracle 建议我们改用 Standard Hugepages 以提高性能。
验证我们的 CentOS 7 服务器上是否启用了透明大页面。
[root@oracle-01 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never
[always] 标志表明我们的 CentOS 7 服务器正在使用 Transparent Hugepages。
要禁用透明大页面,我们必须编辑 GRUB 配置。
[root@oracle-01 ~]# vi /etc/default/grub
查找 GRUB_CMDLINE_LINUX 并在最后添加 transparent_hugepage=never。
编辑此指令后应如下所示。
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never"
使用修改后的配置生成 /etc/grub.cfg 文件。
[root@oracle-01 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-07fcd178406f4b3ca09084082364afba Found initrd image: /boot/initramfs-0-rescue-07fcd178406f4b3ca09084082364afba.img done
重新启动机器以验证配置。
[root@oracle-01 ~]# systemctl reboot
重新启动后,再次检查 Transparent HugePages 的状态。
[root@oracle-01 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never]
透明 Hugepages 已被禁用。
创建 Oracle Database 18c 用户和组
根据 Oracle Database 18c 的要求创建 OS 用户和组。
[root@oracle-01 ~]# groupadd -g 1501 oinstall [root@oracle-01 ~]# groupadd -g 1502 dba [root@oracle-01 ~]# groupadd -g 1503 oper [root@oracle-01 ~]# groupadd -g 1504 backupdba [root@oracle-01 ~]# groupadd -g 1505 dgdba [root@oracle-01 ~]# groupadd -g 1506 kmdba [root@oracle-01 ~]# groupadd -g 1507 racdba [root@oracle-01 ~]# useradd -u 1501 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba oracle [root@oracle-01 ~]# echo "oracle" | passwd oracle --stdin Changing password for user oracle. passwd: all authentication tokens updated successfully.
在 CentOS 7 中配置本地 DNS 解析器
要配置名称解析,我们可以使用中央 DNS 服务器,也可以使用本地 DNS 解析器。
为简单起见,我们为我们的服务器使用本地 DNS 解析器。
以 root 用户身份使用 ssh 连接到 oracle-01.onitroad.com 并执行以下命令。
[root@oracle-01 ~]# cat >> /etc/hosts << EOF > 192.168.1.148 oracle-01.onitroad.com oracle-01 > EOF
使用 ping 命令验证名称解析。
[root@oracle-01 ~]# ping oracle-01.onitroad.com PING oracle-01.onitroad.com (192.168.1.148) 56(84) bytes of data. 64 bytes from oracle-01.onitroad.com (192.168.1.148): icmp_seq=1 ttl=64 time=0.053 ms 64 bytes from oracle-01.onitroad.com (192.168.1.148): icmp_seq=2 ttl=64 time=0.068 ms
CentOS 7 防火墙中的开放服务端口
在 Linux 防火墙中允许 Oracle SQL* Net Listener 端口 1521/tcp。
[root@oracle-01 ~]# firewall-cmd --permanent --add-port=1521/tcp success [root@oracle-01 ~]# firewall-cmd --reload success
在 CentOS 7 中自动启动 Oracle 18c 数据库和监听器
要自动启动 Oracle 18c 数据库和监听器,我们必须创建一个 systemd 服务,如下所示:
[root@oracle-01 ~]# vi /usr/lib/systemd/system/dbora.service
并其中添加以下指令。
[Unit] Description=Oracle Database Service After=network.target [Service] Type=forking ExecStart=/u01/app/oracle/product/18.3.0/dbhome_1/bin/dbstart /u01/app/oracle/product/18.3.0/dbhome_1 ExecStop=/u01/app/oracle/product/18.3.0/dbhome_1/bin/dbshut /u01/app/oracle/product/18.3.0/dbhome_1 User=oracle TimeoutSec=300s [Install] WantedBy=multi-user.target
启动并启用 dbora.service。
[root@oracle-01 ~]# systemctl daemon-reload [root@oracle-01 ~]# systemctl enable dbora.service Created symlink from /etc/systemd/system/multi-user.target.wants/dbora.service to /usr/lib/systemd/system/dbora.service. [root@oracle-01 ~]# systemctl start dbora.service [root@oracle-01 ~]# systemctl status dbora.service -> dbora.service - Oracle Database Service Loaded: loaded (/usr/lib/systemd/system/dbora.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2019-03-21 09:13:28 PKT; 1min 31s ago Process: 12004 ExecStart=/u01/app/oracle/product/18.3.0/dbhome_1/bin/dbstart /u01/app/oracle/product/18.3.0/dbhome_1 (code=exited, status=0/SUCCESS) Main PID: 10315 (code=exited, status=0/SUCCESS) CGroup: /system.slice/dbora.service ->->12017 /u01/app/oracle/product/18.3.0/dbhome_1/bin/tnslsnr LISTEN... ->->12128 ora_pmon_cdb1 Mar 21 09:13:28 oracle-01.onitroad.com systemd[1]: Started Oracle Database Ser... Hint: Some lines were ellipsized, use -l to show in full.
我们已经在 CentOS 7 服务器上成功安装了 Oracle Database 18c。