文章目录
前言
之前有个用户希望我可以远程帮忙安装一下 Oracle 数据库,当时由于沟通没到位,只了解到用户是通过 VPN 远程访问的数据库服务器,并且服务器是基于 Minimal 方式安装的系统。因为之前一直都是通过图形化安装的数据库,所以我给的建议是先把系统图形化界面安装起来,然后再安装配置数据库。
直到远程操作时才发现,用户是通过堡垒机访问的数据库服务器,并且堡垒机没有提供 VNC 以及 Xstart 这种远程操作图形化界面的工具。更尴尬的是,用户的环境没有试错机会 ~~ 没辙呀,最终我只能先在自己的实验环境中走一遍静默安装的流程,跑通流程后再去用户的环境里面部署,最后一把梭成功了。
本文就是对于这次操作的总结和记录,希望可以为有需要的朋友提供一些帮助。
1. 安装环境说明
1.1. 系统及内核版本
- 操作系统版本:CentOS Linux release 7.6.1810 (Core)
- 系统内核版本:3.10.0-957.el7.x86_64
1.2. 数据库软件版本
- 数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
- 数据库安装包:
- p13390677_112040_Linux-x86-64_1of7.zip
- p13390677_112040_Linux-x86-64_2of7.zip
1.3. 数据库目录规划
对象 | 路径 | 作用 |
---|---|---|
软件包目录 | /oradata/oratools | 用于存放数据库软件包以及安装数据库时所需要的额外依赖包。 |
应答文件转存目录 | /home/oracle/rsp_file | 用于备份数据库默认的应答文件,静默安装时需要对此目录下的文件进行修改并应用。 |
ORACLE_BASE 目录 | /oradata/app/oracle | 此为数据库基础目录,配置用户环境变量和应答文件时都需要进行指定。 |
ORACLE_HOME 目录 | /oradata/app/oracle/product/11.2.0 | 此为数据库家目录,配置用户环境变量和应答文件时同样也需要进行指定。 |
2. 系统基线配置
配置1
:统一时区和时间。
# timedatectl set-timezone Asia/Shanghai //设置时区。
# date -s "2022-04-25 10:52:00" //设置日期和时间。
# clock -w //将当前系统时间同步到硬件时钟。
配置2
:修改主机名。
# hostnamectl set-hostname <要修改成的主机名>
# bash
配置3
:配置本地 yum 源。
# mkdir /etc/yum.repos.d/repo_backup
# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo_backup/
# mkdir /iso //此目录存放系统镜像文件。
# mkdir /mnt/cdrom
# cat > /etc/yum.repos.d/local.repo << EOF //配置本地 yum 源配置文件。
> [local]
> name=local
> baseurl=file:///mnt/cdrom
> enabled=1
> gpgcheck=0
> EOF
# echo "/iso/CentOS-7.6-x86_64-DVD-1810.iso /mnt/cdrom iso9660 defaults 0 0" >> /etc/fstab //设置开机自动挂载。
# yum clean all
# yum repolist
配置4
:配置 /etc/hosts 解析。
# vi /etc/hosts //在文件末尾添加如下解析条目。
172.16.206.30 oracle11g
配置5
:关闭 firewalld 服务。
# systemctl stop firewalld.service
# systemctl disable firewalld.service
配置6
:关闭 selinux 模块。
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# reboot //重启系统使配置生效。
3. 配置数据库基础环境
Step1
:准备数据库软件包和其它依赖包。
[root@oracle11g ~]# mkdir -p /oradata/oratools
[root@oracle11g ~]# ls -lh /oradata/oratools/
total 2.4G
-rw-r--r-- 1 root root 191K Apr 25 11:02 compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm //依赖包。
-rw-r--r--. 1 root root 1.3G Apr 22 20:29 p13390677_112040_Linux-x86-64_1of7.zip //软件包分片1。
-rw-r--r--. 1 root root 1.1G Apr 22 20:32 p13390677_112040_Linux-x86-64_2of7.zip //软件包分片2。
-rw-r--r-- 1 root root 206K Apr 25 11:02 pdksh-5.2.14-37.el5_8.1.x86_64.rpm //依赖包。
Step2
:安装数据库所需要的依赖包。
本地 yum 源基本上都提供了下面所需要的依赖包:
[root@oracle11g ~]# yum -y install install binutils compat-libcap1 compat-libstdc++ gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel elfutils-libelf-devel
一般来说,此时都会提示 No package compat-libstdc++ available
,所以我们需要单独进行安装:
[root@oracle11g ~]# rpm -ivh /oradata/oratools/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm
另外,根据以往经验,在数据库进行安装前预检查时多半都会提示缺少 pdksh
依赖包,而此包与系统默认安装的 ksh
包是冲突的;因此需要先卸载 ksh
包再安装 pdksh
依赖包:
[root@oracle11g ~]# rpm -e `rpm -qa |grep ksh`
[root@oracle11g ~]# rpm -ivh /oradata/oratools/pdksh-5.2.14-37.el5_8.1.x86_64.rpm
最后,因为需要用到 vim 和 unzip 工具,所以这里也可以提前进行安装:
[root@oracle11g ~]# yum -y install unzip vim
Step3
:创建 oracle 用户和用户组。
[root@oracle11g ~]# groupadd oinstall
[root@oracle11g ~]# groupadd dba
[root@oracle11g ~]# useradd -g oinstall -G dba oracle
[root@oracle11g ~]# passwd oracle
[root@oracle11g ~]# id oracle
uid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1002(dba)
Step4
:创建 oracle 所需目录(不包含应答文件的目录配置)。
[root@oracle11g ~]# mkdir /oradata/app
[root@oracle11g ~]# chown -R oracle:oinstall /oradata/app/
[root@oracle11g ~]# chmod -R 775 /oradata/app/
[root@oracle11g ~]# ls -ld /oradata/app/
drwxrwxr-x. 2 oracle oinstall 6 Apr 22 20:25 /oradata/app/ //注意目录所属用户和组以及权限。
Step5
:设置内核参数。
特别说明: 实际生产环境里面,这些参数需要结合你分配的资源来进行设计,而不是一股脑的照搬下来。关于内核参数这块,kernel.shmmax
和 kernel.shmall
我们需要计算一下(如果是图形化安装,当因为内核参数设置不正确导致安装前检查报错,点击 Fix & Check Again
会自动修正):
- kernel.shmmax = 8GB * 1024 * 1024 * 1024 - 1 = 8589934591(服务器的分配了 8GB 内存)
- kernel.shmall = 8GB * 1024 * 1024 / 4KB = 2097152
[root@oracle11g ~]# vim /etc/sysctl.conf //添加如下配置信息。
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 8589934591
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 = 1048576
[root@oracle11g ~]# sysctl -p //使配置立即生效。
Step6
:设置软硬件资源限制
[root@oracle11g ~]# vim /etc/security/limits.conf //添加如下配置信息。
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
Step7
:配置 oracle 用户环境变量
[root@oracle11g ~]# vim /home/oracle/.bash_profile //在 “export PATH” 后面添加如下配置信息。
unset USERNAME
export ORACLE_BASE=/oradata/app/oracle
export ORACLE_HOME=/oradata/app/oracle/product/11.2.0
export ORACLE_SID=orcl
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export PATH=/usr/sbin:$PATH:$ORACLE_HOME/bin
[root@oracle11g ~]# source /home/oracle/.bash_profile //使环境变量配置立即生效。
Step8
:解压软件安装包并赋权。
[root@oracle11g ~]# cd /oradata/oratools/
[root@oracle11g oratools]# unzip p13390677_112040_Linux-x86-64_1of7.zip
[root@oracle11g oratools]# unzip p13390677_112040_Linux-x86-64_2of7.zip //这两个分片完成解压后会在当前目录下生成 database 目录。
[root@oracle11g ~]# chown -R oracle:oinstall /oradata/oratools/database/
[root@oracle11g ~]# chmod -R 775 /oradata/oratools/database/
[root@oracle11g ~]# ls -ld /oradata/oratools/database/
drwxrwxr-x 7 oracle oinstall 136 Aug 27 2013 /oradata/oratools/database/
4. 配置数据库应答文件
4.1. 备份应答文件
[root@oracle11g ~]# mkdir /home/oracle/rsp_file
[root@oracle11g ~]# cp /oradata/oratools/database/response/*.rsp /home/oracle/rsp_file/
[root@oracle11g ~]# chmod -R 775 /home/oracle/rsp_file/
[root@oracle11g ~]# chown -R oracle:oinstall /home/oracle/rsp_file/
[root@oracle11g ~]# ls -la /home/oracle/rsp_file/
total 80
drwxrwxr-x 2 oracle oinstall 61 Apr 25 14:13 .
drwx------ 3 oracle oinstall 78 Apr 25 14:12 ..
-rwxrwxr-x 1 oracle oinstall 44533 Apr 25 14:13 dbca.rsp //创建数据库所使用的应答文件
-rwxrwxr-x 1 oracle oinstall 25116 Apr 25 14:13 db_install.rsp //安装数据库所使用的应答文件。
-rwxrwxr-x 1 oracle oinstall 5871 Apr 25 14:13 netca.rsp //创建数据库监听所使用的的应答文件。
4.2. 配置 db_install.rsp 应答文件
编辑 db_install.rsp 应答文件:
[root@oracle11g ~]# vim /home/oracle/rsp_file/db_install.rsp
具体需要修改的参数项如下图所示:
关于修改的参数项说明:
oracle.install.option=INSTALL_DB_SWONLY //设置安装类型为“仅安装数据库”。
ORACLE_HOSTNAME=oracle11g //设置主机名。
UNIX_GROUP_NAME=oinstall //设置 oracle 推荐的系统用户组。
INVENTORY_LOCATION=/oradata/app/oraInventory //设置 oraInventory 目录(无需手工创建)。
SELECTED_LANGUAGES=en,zh_CN //设置产品语言。
ORACLE_HOME=/oradata/app/oracle/product/11.2.0 //设置数据库家目录。
ORACLE_BASE=/oradata/app/oracle //设置数据库基础目录。
oracle.install.db.InstallEdition=EE //设置安装“企业版”数据库。
oracle.install.db.DBA_GROUP=dba //设置 OSDBA 用户组。
oracle.install.db.OPER_GROUP=oinstall //设置 OSOPER 用户组。
oracle.install.db.isRACOneInstall=false //非 rac(非 rac 或 rac one node)。
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE //设置为“一般用途”类型。
oracle.install.db.config.starterdb.globalDBName=orcl //设置全局数据库名称。
oracle.install.db.config.starterdb.SID=orcl //设置数据库实例名称。
oracle.install.db.config.starterdb.characterSet=ZHS16GBK //设置数据库字符集。
oracle.install.db.config.starterdb.password.ALL=oracle //为所有数据库账号设置相同密码(这里建议先设置简单点,后面可以修改,原因后面安装时会提到)。
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false //结合下面的一项都表示“拒绝更新”(其实就是图形化安装时的前两个有关更新的配置)。
DECLINE_SECURITY_UPDATES=true
4.3. 配置 netca.rsp 应答文件
创建数据库监听程序的应答文件可以使用默认配置,不需要进行修改。
但需要注意的是,在创建数据库之前,一定要先配置好监听程序,否则会报错
!
4.4. 配置 dbca.rsp 应答文件
编辑 dbca.rsp 应答文件:
[root@oracle11g ~]# vim /home/oracle/rsp_file/dbca.rsp
具体需要修改的参数项如下图所示:
关于修改的参数项说明:
[root@oracle11g ~]# cat /home/oracle/rsp_file/dbca.rsp |grep -vE '^#|^$'
[GENERAL]
RESPONSEFILE_VERSION = "11.2.0" //此参数项为默认配置无需指定,即表明数据库版本。
OPERATION_TYPE = "createDatabase" //此参数项为默认配置无需指定,即表明是创建数据库的操作。
[CREATEDATABASE]
GDBNAME = "orcl" //此参数项需要我们指定,即设置全局数据库名称。
SID = "orcl" //此参数项需要我们指定,即设置数据库实例名称。
TEMPLATENAME = "General_Purpose.dbc"
[createTemplateFromDB]
SOURCEDB = "myhost:1521:orcl"
SYSDBAUSERNAME = "system"
TEMPLATENAME = "My Copy TEMPLATE"
[createCloneTemplate]
SOURCEDB = "orcl"
TEMPLATENAME = "My Clone TEMPLATE"
[DELETEDATABASE]
SOURCEDB = "orcl"
[generateScripts]
TEMPLATENAME = "New Database"
GDBNAME = "orcl" //此参数项需要我们指定,即设置全局数据库名称。
[CONFIGUREDATABASE]
[ADDINSTANCE]
DB_UNIQUE_NAME = "orcl11g.us.oracle.com"
NODELIST=
SYSDBAUSERNAME = "sys"
[DELETEINSTANCE]
DB_UNIQUE_NAME = "orcl11g.us.oracle.com"
INSTANCENAME = "orcl" //此参数项需要我们指定,即设置数据库实例名称。
SYSDBAUSERNAME = "sys"
5. 使用应答文件进行静默安装
5.1. 静默安装数据库软件
静默安装需要在 oracle 用户下执行,所以我们首先要切换到 oracle 用户环境下,然后去执行静默安装命令:
[root@oracle11g ~]# su - oracle
[oracle@oracle11g ~]$ cd /oradata/oratools/database/
[oracle@oracle11g database]$ ./runInstaller -silent -responseFile /home/oracle/rsp_file/db_install.rsp
特别说明:如果安装出现报错,可以根据日志看一下具体是哪个(些)检查项没有通过,然后删除相关目录和文件重新进行安装;或者可以结合 -ignoreSysPrereqs
参数直接忽略安装前检查,但这个建议慎用,首先我自己没有这样做过,其次安装 Oracle 数据库还是尽量保证预检查都能通过最好)。
此时我们可以使用 tail 工具实时查看执行的日志:
等待一段时间后会提示我们以 root 身份执行两个脚本,我们新开一个 shell 窗口执行即可:
[root@oracle11g ~]# sh /oradata/app/oraInventory/orainstRoot.sh
[root@oracle11g ~]# sh /oradata/app/oracle/product/11.2.0/root.sh
脚本执行完成后,回到执行安装命令的 shell 窗口,敲下 “Enter” 键结束安装:
5.2. 静默创建数据库监听
静默安装需要在 oracle 用户下执行,所以我们首先要切换到 oracle 用户环境下,然后去执行静默安装命令:
[root@oracle11g ~]# su - oracle
[oracle@oracle11g ~]$ netca -silent -responseFile /home/oracle/rsp_file/netca.rsp
5.3. 静默创建数据库
静默创建数据库需要在 oracle 用户下执行,所以我们首先要切换到 oracle 用户环境下,然后去执行命令:
[root@oracle11g ~]# su - oracle
[oracle@oracle11g ~]$ dbca -silent -responseFile /home/oracle/rsp_file/dbca.rsp
这里就可以提一下前面 4.2 章节在编辑 db_install.rsp 应答文件时,我建议说为所有用户创建相同的密码,此密码可以先设置的简单一点,其原因就是当出现清屏现象后,如果设置的密码过于复杂,可能自己输错了都不知道,导致安装失败。因此,可以先设置个简单的密码顺利完成安装,然后再登录到数据库修改成自己需要的密码。
在输入两次密码以后,就可以看到数据库创建的进度,直到 100% 完成创建:
至此,我们就成功安装并创建了 Oracle 数据库。
6. 数据库状态检查
6.1. 检查数据库版本
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
6.2. 检查数据库运行状态
检查数据库启动模式:
SQL> select open_mode from v$database;
OPEN_MODE
----------------------------------------
READ WRITE
检查实例运行状态:
SQL> select status from v$instance;
STATUS
------------------------
OPEN
6.3. 检查监听运行状态
[oracle@oracle11g ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 26-APR-2022 14:27:14
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date 26-APR-2022 11:34:16
Uptime 0 days 2 hr. 52 min. 58 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /oradata/app/oracle/product/11.2.0/network/admin/listener.ora
Listener Log File /oradata/app/oracle/diag/tnslsnr/oracle11g/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle11g)(PORT=1521)))
Services Summary...
Service "orcl" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
7. 配置数据库开机自启动
使用静默方式安装的数据库默认是无法随系统开机自启动的,我们可以将其写成系统服务脚本来实现开机自启动,也可以通过
rc.local
文件在开机后去自动执行相关启动的命令来实现开机自启动。
下面就 rc.local 这种方法来做一个说明:
Step1
:将 dbstart 启动脚本中默认的 “ORACLE_HOME_LISTNER=$1” 修改为 “ORACLE_HOME_LISTNER=$ORACLE_HOME”(此操作要在 oracle 用户下完成
)。
[root@oracle11g ~]# su - oracle
[oracle@oracle11g ~]$ sed -i 's/ORACLE_HOME_LISTNER=$1/ORACLE_HOME_LISTNER=$ORACLE_HOME/g' $ORACLE_HOME/bin/dbstart
Step2
:修改 oratab 文件允许数据库在系统开机时自启动。
[root@oracle11g ~]# sed -i "s/:N/:Y/g" /etc/oratab
Step3
:将启动命令写入 rc.local 文件中。
[root@oracle11g ~]# echo 'su - oracle -c "/oradata/app/oracle/product/11.2.0/bin/lsnrctl start"' >> /etc/rc.d/rc.local //启动监听。
[root@oracle11g ~]# echo 'su - oracle -c "/oradata/app/oracle/product/11.2.0/bin/dbstart"' >> /etc/rc.d/rc.local //启动数据库。
[root@oracle11g ~]# chmod u+x /etc/rc.d/rc.local
总结
整个静默安装在我看来需要注意的有三点:
- 务必将 oracle 需要的依赖包都安装上;
- 配置 /etc/sysctl.conf 文件时,需要注意 kernel.shmmax 和 kernel.shmall 参数的修改;
- 在修改各个应答文件时一定要细心,不要缺少关键性的参数项,更不要写错参数项。
最后,如果大家想要了解图形化安装 Oracle 数据库,可以参考我的另外一篇博客 《基于 CentOS 6.5 搭建 Oracle 11g 数据库》。
以上,如有不妥之处,欢迎指正。