oracle数据库有个比较很抓瞎的事情,不同的版本搭建的大致流程是一样的,但是在实操细节上会有不同,比如操作的脚本位置和配置项等等,这些会变,所以需要时常积累不同版本的文档
这里有一点要说明,之所以使用静默安装,除了它的安装成功率高之外,还有一个最根本的原因是图形化以及命令行非静默安装时需要你的服务器和系统支持11X图像协议,这个东西很麻烦!很麻烦!没有的话oracle不会报错,但是会自己终止按照进程,并提示你DISPLAY not set. Please set the DISPLAY and try again
本次安装的需要的环境如下
CentOS 7 X86 64位
LINUX.X64_193000_db_home.zip (19c的安装包下载好就叫这个名字)
配置好静态ip
关闭防火墙
关闭SELinux
下载链接:https://pan.baidu.com/s/1R3auWmGDfuNvvBGzgf1D8Q?pwd=vwwg
或者去官网下载
第一步:配置合适的yum源,一般用阿里源就行,随后安装需要的yum环境
yum install -y unzip bc binutils compat-libcap1 compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst libXrender libXrender-devel libgcc libstdc++ libstdc++-devel libxcb make smartmontools sysstat net-tools gcc gcc-c++ gcc-info gcc-locale gcc48 gcc48-info gcc48-locale gcc48-c++ libXp
第二步:准备oracle用户和组
groupadd oracle
groupadd dba
useradd -g oracle -G dba oracle
passwd oracle
设置密码
第三步:修改内核参数
vi /etc/sysctl.conf
追加:
#系统异步I/O (AIO) 请求的最大数量
fs.aio-max-nr = 1048576
#整个linux系统全局最大可使用文件句柄数
fs.file-max = 6815744
#共享内存最大总页数,页(Page) 为单位,通常一页大小为 4KB
kernel.shmall = 2097152
#单个共享内存段的最大大小
#kernel.shmmax 一般设置成服务器内存的一半,单位为字节
kernel.shmmax = 1073741824
#共享内存段的最大数量
kernel.shmmni = 4096
#配置信号量参数(格式:SEMMSL SEMMNS SEMOPM SEMMNI)。防止数据库因信号量不足导致进程阻塞
#SEMMSL:每个信号量集合的最大信号量数(250)。
#SEMMNS:系统总信号量数(32000)。
#SEMOPM:单次操作可处理的信号量数(100)。
#SEMMNI:信号量集合的最大数量(128)。
kernel.sem = 250 32000 100 128
#本地TCP/UDP端口的可用范围
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
# 执行生效
sysctl -p
第四步:修改用户限制
vi /etc/security/limits.conf
追加
#用户操作的线程数到达多少后给警告
oracle soft nproc 2047
#用户操作的线程数到达多少后不在允许新增线程
oracle hard nproc 16384
#下面两个是可操作的文件句柄个数限制
oracle soft nofile 1024
oracle hard nofile 65536
#栈空间软限制10M
oracle soft stack 10240
#下面两个是允许生成的核心转储文件大小,unlimited是不限制
#oracle soft core unlimited
#oracle hard core unlimited
#允许最多占用多少物理内存,单位:KB
oracle soft memlock 50000000
oracle hard memlock 50000000
第五步:修改用户登录认证
vi /etc/pam.d/login
追加:
session required /lib64/security/pam_limits.so
session required pam_limits.so
系统环境变量中加入下面内容
vi /etc/profile
追加:
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
生效环境变量
source /etc/profile
第六步:创建安装目录,把它赋予oracle,并切换oracle用户操作后续的步骤,这里要注意19c的安装路径,也就是ORACLE_HOME,就是安装包解压的那个路径,不要改变,所以这里建的啥,你后面就解压到哪里就行。在我之前的11g安装方法里,之所以我只动了响应文件而安装包放在另外一个地方也能安装,是因为使用命令忽略了检查信息,但是一般情况安装完之后,安装包解压路径下的东西一般没有人删除,除非是确定真的没有用了,释放资源才会删掉,而且放在一个统一的路径下,也方便好找需要的资源,当然如果你有释放资源的需求你可以去参考我发的11g安装怎么用的命令
mkdir -p /opt/oracleData/oracle19c
mkdir /opt/oracleData/inventory
chown -R oracle:oracle /opt/oracleData
chmod -R 775 /opt/oracleData
su oracle
第七步:更改oracle用户的环境变量文件
vi .bash_profile
追加:
ORACLE_BASE=/opt/oracleData
ORACLE_HOME=$ORACLE_BASE/oracle19c
ORACLE_SID=orcl
LD_LIBRARY_PATH=$ORACLE_HOME/lib
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH PATH
source .bash_profile
第八步:将19c的安装包上传到/opt/oracleData
目录,并确保安装包的所有权是oracle用户,一定要确保所有权,在11g版本的时候只需要单独操作响应文件就行,但是19c整个包不在一起会出现问题
通过lrzsz 或者 scp都行,上传方式自己决定
解压:
unzip LINUX.zip -d /opt/oracleData/oracle19c
第九步:19c的静默安装需要的文件在解压路径/install
下,进入其中修改对应的配置文件
cd /opt/oracleData/oracle19c/install/response
vi db_install.rsp
按照你准备的路径和用户,更改如下内容
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oracle
INVENTORY_LOCATION=/opt/oracleData/inventory
ORACLE_HOME=/opt/oracleData/oracle19c
ORACLE_BASE=/opt/oracleData
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=dba
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.SID=orcl
第十步:回到解压目录下,运行静默安装
cd /opt/oracleData/oracle19c
./runInstaller -silent -responseFile /opt/oracleData/oracle19c/install/response/db_install.rsp -ignorePrereq
出现如下输出则服务安装成功
第十一步:按照上面的提示,切换到root
用户,执行上面的两个脚本
第十二步:同样使用静默方式,配置监听
在root用户下安装nc
yum install -y nc
切换回oracle用户,从新生效一下环境变量,因为前面配置的时候还没有安装,有些东西可能会加载不上
source .bash_profile
oracle19c的监听,有个很无奈的事情,就是初始化监听用到的响应文件,并没有直接在response
目录下提供,而是在$ORACLE_HOME/network/install/netca_clt.rsp
,而且文件中只有最基本的一些配置项,初始化后不会像11g那样自动启动,需要手动启监听
/opt/oracleData/oracle19c/bin/netca /silent /responseFile /opt/oracleData/oracle19c/network/install/netca_clt.rsp
上面的初始化完成之后,手动启动的命令在ORACLE_HOME/bin/lsnrctl
/opt/oracleData/oracle19c/bin/lsnrctl start LISTENER
然后就可以用nc工具查看到监听进程了
[oracle@node3 samples]$ netstat -tnulp | grep 1521
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 :::1521 :::* LISTEN 8408/tnslsnr
第十三步:初始化数据库实例
和监听用的响应文件一样,19c并没有和11g那样在安装包中给你预留好初始化数据库实例用的响应文件,因此需要自己搞一个。注意从12c开始oracle引进了基于容器的多租户可插拔数据库(CBD),可以通俗的理解为在一个基础数据库架构(CBD)上运行多租户模式的容器数据库(PDB),我们个人自己使用不需要用这个,因为它的运维很复杂,个人使用也用不到,如果未来你要使用21以上的就必须考虑CDB的搭建方式了,因为可能会在未来仅支持容器化的数据库
自己在一个目录下建一个dbca.rsp
文件,注意文件名别改,并写入如下内容
gdbName=orcl.test
sid=orcl
createAsContainerDatabase=false
templateName=General_Purpose.dbc
sysPassword=123456
systemPassword=123456
characterSet=AL32UTF8
totalmemory=1680
然后用这个响应文件去初始化数据库
/opt/oracleData/oracle19c/bin/dbca -silent -createDatabase -responseFile /opt/oracleData/oracle19c/install/response/dbca.rsp
初始化进程结束后,查询一下已有的实例进程
[oracle@node3 response]$ ps -ef | grep ora_ | grep -v grep
oracle 7721 1 0 22:55 ? 00:00:00 ora_pmon_orcl
oracle 7723 1 0 22:55 ? 00:00:00 ora_clmn_orcl
oracle 7725 1 0 22:55 ? 00:00:00 ora_psp0_orcl
oracle 7728 1 0 22:55 ? 00:00:04 ora_vktm_orcl
oracle 7732 1 0 22:55 ? 00:00:00 ora_gen0_orcl
oracle 7734 1 0 22:55 ? 00:00:00 ora_mman_orcl
oracle 7738 1 0 22:55 ? 00:00:00 ora_gen1_orcl
oracle 7741 1 0 22:55 ? 00:00:00 ora_diag_orcl
oracle 7743 1 0 22:55 ? 00:00:00 ora_ofsd_orcl
oracle 7746 1 0 22:55 ? 00:00:00 ora_dbrm_orcl
oracle 7748 1 0 22:55 ? 00:00:00 ora_vkrm_orcl
oracle 7750 1 0 22:55 ? 00:00:00 ora_svcb_orcl
oracle 7752 1 0 22:55 ? 00:00:00 ora_pman_orcl
oracle 7754 1 0 22:55 ? 00:00:00 ora_dia0_orcl
oracle 7756 1 0 22:55 ? 00:00:00 ora_dbw0_orcl
oracle 7758 1 0 22:55 ? 00:00:00 ora_lgwr_orcl
oracle 7760 1 0 22:55 ? 00:00:00 ora_ckpt_orcl
oracle 7762 1 0 22:55 ? 00:00:00 ora_lg00_orcl
oracle 7764 1 0 22:55 ? 00:00:00 ora_smon_orcl
oracle 7766 1 0 22:55 ? 00:00:00 ora_lg01_orcl
oracle 7768 1 0 22:55 ? 00:00:00 ora_smco_orcl
oracle 7770 1 0 22:55 ? 00:00:00 ora_reco_orcl
oracle 7772 1 0 22:55 ? 00:00:00 ora_w000_orcl
oracle 7774 1 0 22:55 ? 00:00:00 ora_lreg_orcl
oracle 7776 1 0 22:55 ? 00:00:00 ora_w001_orcl
oracle 7778 1 0 22:55 ? 00:00:00 ora_pxmn_orcl
oracle 7782 1 0 22:55 ? 00:00:00 ora_mmon_orcl
oracle 7784 1 0 22:55 ? 00:00:00 ora_mmnl_orcl
oracle 7786 1 0 22:55 ? 00:00:00 ora_d000_orcl
oracle 7788 1 0 22:55 ? 00:00:00 ora_s000_orcl
oracle 7790 1 0 22:55 ? 00:00:00 ora_tmon_orcl
oracle 7796 1 0 22:55 ? 00:00:00 ora_m000_orcl
oracle 7798 1 0 22:55 ? 00:00:00 ora_m001_orcl
oracle 7804 1 0 22:55 ? 00:00:00 ora_tt00_orcl
oracle 7806 1 0 22:55 ? 00:00:00 ora_tt01_orcl
oracle 7808 1 0 22:55 ? 00:00:00 ora_tt02_orcl
oracle 7810 1 0 22:55 ? 00:00:00 ora_aqpc_orcl
oracle 7812 1 0 22:55 ? 00:00:00 ora_cjq0_orcl
oracle 7819 1 0 22:55 ? 00:00:00 ora_p000_orcl
oracle 7821 1 0 22:55 ? 00:00:00 ora_p001_orcl
oracle 7823 1 0 22:55 ? 00:00:00 ora_p002_orcl
oracle 7825 1 0 22:55 ? 00:00:00 ora_p003_orcl
oracle 7827 1 0 22:55 ? 00:00:00 ora_p004_orcl
oracle 7829 1 0 22:55 ? 00:00:00 ora_p005_orcl
oracle 7831 1 0 22:55 ? 00:00:00 ora_p006_orcl
oracle 7833 1 0 22:55 ? 00:00:00 ora_p007_orcl
oracle 7835 1 0 22:55 ? 00:00:00 ora_p008_orcl
oracle 7837 1 0 22:55 ? 00:00:00 ora_p009_orcl
oracle 7839 1 0 22:55 ? 00:00:00 ora_p00a_orcl
oracle 7841 1 0 22:55 ? 00:00:00 ora_p00b_orcl
oracle 8021 1 0 22:55 ? 00:00:00 ora_w002_orcl
oracle 8023 1 0 22:55 ? 00:00:00 ora_m002_orcl
oracle 8069 1 0 22:55 ? 00:00:00 ora_w003_orcl
oracle 8075 1 0 22:55 ? 00:00:00 ora_w004_orcl
oracle 8079 1 0 22:55 ? 00:00:00 ora_qm02_orcl
oracle 8083 1 0 22:55 ? 00:00:00 ora_q002_orcl
oracle 8085 1 0 22:55 ? 00:00:00 ora_q003_orcl
oracle 8127 1 0 22:56 ? 00:00:00 ora_m003_orcl
再检查一下监听状态
[oracle@node3 response]$ /opt/oracleData/oracle19c/bin/lsnrctl status
最后进入oracle,执行一条sql,正常输出结果,而不是提示oracle未初始化就搭建成功了
[oracle@node3 response]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Apr 19 23:09:55 2025
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> select status from v$instance;
STATUS
------------
OPEN
SQL>
对于19c,在这里要重点说一下,实例化用到的响应文件能自己写是因为templateName=General_Purpose.dbc
指定了一个oracle自带的模板,只需要指定其他必须修改的东西就行,比如密码和字符集。所以不要自己上手去直接写监听的响应文件,当然你可以尝试对比11g的,或者网上自己找找研究一下监听能改哪些东西
至于oracle启动和关闭,已经一些需要知道的基本常识,见我之前写的11g搭建文档-》oracle 11g 搭建文档