三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Oracle 19c Linux静默安装实战:从系统调优到建库配置全解析

Oracle 19c Linux静默安装实战:从系统调优到建库配置全解析

1. 从零到一:为什么选择Oracle 19c,以及安装前你必须知道的几件事

如果你正在看这篇文章,大概率是接到了一个新项目,或者公司的基础架构升级,需要部署一套Oracle数据库。面对“Oracle 19c安装”这个任务,很多人的第一反应可能是去网上找一篇“保姆级教程”,然后跟着一步步点下一步。但作为一个在数据库领域摸爬滚打多年的老手,我必须告诉你,这种“无脑”安装法,往往是后续无数运维噩梦的开始。Oracle,尤其是企业级的19c版本,它的安装从来不是简单的“下一步、下一步、完成”,而是一个需要精心规划的系统工程。

首先,我们得搞清楚Oracle 19c是什么,以及为什么是它。Oracle Database 19c是Oracle 12c/18c系列长期支持版本(Long Term Release)的最终版,你可以把它理解为这一代技术架构的“完全体”和“稳定版”。对于生产环境来说,稳定性和长期支持远比追求最新特性重要。19c提供了长达数年的 premier support 和 extended support,这意味着你能获得官方的补丁、安全更新和技术支持,这对于企业核心系统至关重要。相比之下,那些更早期的版本(如11g)已经或即将停止支持,而更新的21c/23c属于创新版本,更适合测试和尝鲜。所以,当你需要搭建一个未来几年都要稳定运行的生产库时,19c几乎是当前最稳妥、最主流的选择。

那么,安装它之前,我们需要做什么?绝对不是马上去下载那个巨大的安装包。你需要像一个架构师一样思考,先回答几个核心问题:这台服务器是做什么用的?是开发测试、准生产,还是核心交易库?不同的用途决定了完全不同的安装配置策略。它的硬件资源(CPU、内存、存储)是怎样的?Oracle是个“资源大户”,配置不足会直接导致性能低下甚至安装失败。你对高可用、备份恢复有什么要求?这些在安装初期就需要规划,比如是否要配置Data Guard,归档模式是否开启等。最后,你选择哪个操作系统?虽然Oracle支持多种平台,但Linux(特别是Oracle Linux、Red Hat或CentOS)是绝对的主流和首选,其稳定性和与Oracle软件的深度优化是Windows无法比拟的。本教程将基于Linux环境展开,这也是绝大多数生产环境的标准选择。

在心理和知识上,也要做好准备。Oracle安装过程涉及操作系统参数调整、用户组创建、目录规划、响应文件配置等一系列底层操作,它要求你不仅懂数据库,还要对操作系统有一定的掌控力。别怕,跟着下面的步骤,我会把这些看似复杂的操作拆解成清晰的逻辑和可执行的命令。

2. 战前准备:构建坚如磐石的Linux基础环境

安装Oracle数据库,七分靠准备,三分靠执行。一个配置得当的基础环境,是安装成功和未来稳定运行的基石。这里我们假设你使用的是一台干净的CentOS 7.x 或 Oracle Linux 7.x/8.x 服务器。我将详细解释每一个准备步骤背后的原因,而不仅仅是给你命令。

2.1 操作系统层面的精细调优

Oracle数据库对操作系统内核参数有明确要求,这些参数影响着数据库的进程数、内存分配、网络连接和I/O性能。盲目使用网上流传的“万能参数”是危险的,我们需要理解其含义并进行适当调整。

首先,关闭不必要的安全策略和防火墙(仅用于实验环境,生产环境需结合网络安全策略规划)。SELinux和Firewalld可能会阻止Oracle的端口监听和进程间通信。

# 临时关闭SELinux(重启后失效) setenforce 0 # 永久关闭SELinux,编辑 /etc/selinux/config,设置 SELINUX=disabled # 停止并禁用防火墙(安装阶段,后续可根据需要开放1521等端口) systemctl stop firewalld systemctl disable firewalld

接下来是重头戏:内核参数调整。编辑/etc/sysctl.conf文件,添加或修改以下参数。这些值是基于一台拥有8GB以上内存的服务器给出的通用建议,你需要根据实际硬件进行调整。

fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 # 共享内存总页数。计算公式:物理内存(GB)*1024*1024 / 4K页大小。例如8GB内存:8*1024*1024/4 = 2097152 kernel.shmmax = 4294967295 # 单个共享内存段的最大字节数,建议设置为物理内存的一半或更多,但不超过内核限制。 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

注意kernel.shmmaxkernel.shmall是关键。shmmax应小于或等于物理内存。如果服务器内存巨大(如256GB),你可能需要设置一个更大的值,但通常4GB(4294967295字节)对于初始安装和中小型库足够。修改后执行sysctl -p使配置生效。

然后,配置用户资源限制。编辑/etc/security/limits.conf,在文件末尾为oracle用户添加:

oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768

这些限制确保了oracle用户能启动足够的进程、打开足够多的文件句柄,这对于数据库运行期间处理大量并发连接和SQL操作是必要的。

2.2 创建专属的Oracle用户与目录结构

永远不要用root用户直接安装和运行Oracle!这是一个基本的安全和权限隔离原则。我们需要创建一个专门的用户和组。

# 创建主要的oinstall组和管理员的dba组 groupadd oinstall groupadd dba # 创建oracle用户,主组为oinstall,附加组为dba,并指定家目录 useradd -g oinstall -G dba -m -d /home/oracle oracle # 为oracle用户设置密码 passwd oracle

目录规划同样重要。混乱的目录结构会给未来的备份、迁移和运维带来巨大麻烦。我推荐以下结构,清晰且符合Oracle最佳实践:

mkdir -p /u01/app/oracle # ORACLE_BASE:所有Oracle软件的根目录 mkdir -p /u01/app/oracle/product/19c # ORACLE_HOME:19c数据库软件的家目录 mkdir -p /u01/app/oracle/oradata # 数据文件、控制文件、重做日志存放地 mkdir -p /u01/app/oracle/fast_recovery_area # 快速恢复区,用于归档日志和备份 mkdir -p /u01/app/oracle/scripts # 自定义脚本目录 chown -R oracle:oinstall /u01 chmod -R 775 /u01

/u01挂载到一个独立、高性能、容量充足的存储卷或分区上,这是生产环境的强制要求。不要把数据库文件放在根分区下。

2.3 安装包的获取与依赖项的精准安装

前往Oracle官网下载19c的安装包。对于Linux x86-64系统,你需要两个主要的ZIP文件:LINUX.X64_193000_db_home.zip(数据库软件)和p35940989_190000_Linux-x86-64.zip(最新的RU补丁,推荐安装)。下载需要Oracle账户。

将下载的安装包上传到服务器的某个临时目录,例如/tmp。然后以root身份安装必需的软件包。不同Linux发行版的包名略有差异,以下以CentOS 7为例:

yum install -y binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel

实操心得libaio(异步IO库)和compat-libstdc++是极其关键的依赖,缺少它们会导致安装程序静默失败或数据库实例无法启动。使用yum list installed | grep 包名来确认是否安装成功。如果是在内网环境,你需要提前搭建一个本地YUM源。

3. 核心安装流程:图形化与静默安装的抉择与实战

环境准备好后,我们进入安装环节。Oracle提供了图形化(GUI)和静默(Silent)两种安装方式。对于新手或在有图形界面的测试机上,GUI安装更直观。但对于绝大多数生产服务器(通常只有命令行),静默安装是唯一且更高效的选择。我将重点讲解静默安装,因为它才是真正的“实战技能”。

3.1 解压与响应文件配置:安装的“自动驾驶仪”

首先,切换到oracle用户,并设置必要的环境变量。编辑/home/oracle/.bash_profile,添加以下行:

export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/19c export ORACLE_SID=orcl # 你的数据库实例名,可自定义 export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 # 设置字符集,非常重要!

执行source ~/.bash_profile使环境变量生效。

接下来,解压数据库软件包到ORACLE_HOME目录:

su - oracle cd /tmp unzip LINUX.X64_193000_db_home.zip -d $ORACLE_HOME

静默安装的核心是一个叫“响应文件”的配置文件。Oracle在安装包中提供了模板。我们复制并修改它:

cd $ORACLE_HOME/response cp db_install.rsp /home/oracle/db_install_my.rsp

现在,用vi或nano编辑这个响应文件。以下是关键参数的详解与设置:

oracle.install.option=INSTALL_DB_SWONLY # 只安装数据库软件,这是最干净的方式。先装软件,再建库,逻辑清晰。 UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/app/oraInventory # 指定清单目录,记录所有Oracle软件的安装信息。 ORACLE_HOME=/u01/app/oracle/product/19c ORACLE_BASE=/u01/app/oracle # 必须与我们之前创建的目录一致。 oracle.install.db.InstallEdition=EE # 安装企业版。注意:企业版需要License。 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 # 将各个管理权限组都赋给dba组,简化管理。 DECLINE_SECURITY_UPDATES=true # 非常重要!必须设置为true,否则安装程序会因无法连接Oracle更新服务器而等待超时。

响应文件配置好后,就进入了安装执行阶段。

3.2 执行静默安装与错误排查

运行以下命令开始安装:

cd $ORACLE_HOME ./runInstaller -silent -responseFile /home/oracle/db_install_my.rsp -ignorePrereqFailure

-ignorePrereqFailure参数用于忽略一些非致命的先决条件检查(如某些包版本稍低),但严重的缺失(如缺少libaio)仍会报错。

安装过程会输出日志到终端,更详细的日志在$ORACLE_BASE/oraInventory/logs目录下。这是一个需要耐心等待的过程,可能持续20到40分钟。

安装的最后,屏幕上会提示你需要以root身份执行两个脚本:

/u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/19c/root.sh

你必须切换到另一个终端,用root用户依次执行这两个脚本orainstRoot.sh用于创建清单目录的权限,root.sh会执行一系列需要root权限的操作,比如创建/etc/oratab文件,配置/usr/local/bin下的符号链接等。这是安装成功的关键一步,不可跳过。

踩坑实录:执行root.sh时,最常见的错误是提示/etc/oratab不存在或权限问题。这通常是因为/etc目录下没有该文件,脚本会尝试创建。如果失败,可以手动创建一个空的/etc/oratab文件,并赋予oracle:oinstall权限,再重新执行root.sh。另一个常见坑是环境变量ORACLE_HOME在root用户下未设置,导致脚本找不到路径。可以在root用户下临时导出export ORACLE_HOME=/u01/app/oracle/product/19c再执行。

3.3 数据库创建:DBCA的静默魔法

软件安装成功后,我们的ORACLE_HOME里就有了可执行文件,但还没有数据库实例。接下来使用“数据库配置助手”(DBCA)在静默模式下创建数据库。

同样,先准备一个DBCA的响应文件模板:

cp $ORACLE_HOME/assistants/dbca/dbca.rsp /home/oracle/dbca_my.rsp

编辑此文件,关键配置如下:

responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v19.0.0 gdbName=orcl.world # 全局数据库名,格式通常为<实例名>.<域名>。 sid=orcl # 数据库实例名,与ORACLE_SID环境变量一致。 templateName=General_Purpose.dbc # 使用通用目的模板。生产环境建议根据负载选择“数据仓库”或“事务处理”模板。 sysPassword=YourSysPassword123 systemPassword=YourSystemPassword123 # 为SYS和SYSTEM用户设置强密码。这是安全底线。 datafileDestination=/u01/app/oracle/oradata recoveryAreaDestination=/u01/app/oracle/fast_recovery_area storageType=FS # 文件系统存储。如果是ASM或其它存储,此处配置不同。 characterSet=AL32UTF8 # 字符集强烈推荐AL32UTF8,支持多语言,避免乱码问题。 nationalCharacterSet=AL16UTF16 # 国家字符集。 createAsContainerDatabase=false # 是否创建为可插拔数据库(CDB)。对于传统架构,设为false创建非CDB。19c默认是CDB,但很多老应用仍需要非CDB,这里根据需求选择。 totalMemory=2048 # 为数据库实例分配的内存(MB)。这是一个自动内存管理的起点值,应根据系统总内存合理分配,通常为物理内存的40%-70%。

保存后,运行DBCA创建数据库:

dbca -silent -createDatabase -responseFile /home/oracle/dbca_my.rsp

这个过程会比安装软件更久,因为它要创建控制文件、数据文件、系统表空间,并运行一系列建库后的脚本。期间会在当前终端输出进度。成功后会提示“Database creation complete”。

4. 安装后的关键配置与初次连接验证

数据库创建完成,并不意味着可以高枕无忧了。以下几个步骤是确保数据库可用、可管理、可运维的关键。

4.1 配置监听器与网络服务

监听器是客户端连接数据库的桥梁。使用NetCA(网络配置助手)静默创建监听器:

netca -silent -responseFile $ORACLE_HOME/assistants/netca/netca.rsp

通常,这会创建一个名为LISTENER的监听器,运行在1521端口。你可以通过lsnrctl status命令检查监听器状态。

为了让客户端能通过服务名轻松连接,我们需要配置一个网络服务名(TNS)。编辑$ORACLE_HOME/network/admin/tnsnames.ora文件(如果不存在则创建):

ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_server_hostname_or_ip)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) # 如果是CDB,这里可能是 orcl 或 orclpdb(PDB的服务名) ) )

HOST替换为你的服务器主机名或IP地址。配置完成后,可以用tnsping orcl测试网络连通性。

4.2 设置开机自启动与基础运维脚本

我们希望数据库和监听器能随操作系统自动启动。最可靠的方式是创建系统服务。以root身份创建文件/etc/systemd/system/oracle-19c.service

[Unit] Description=Oracle Database 19c After=network.target [Service] Type=forking Environment=ORACLE_HOME=/u01/app/oracle/product/19c Environment=ORACLE_SID=orcl ExecStart=/bin/bash -c '$ORACLE_HOME/bin/dbstart $ORACLE_HOME' ExecStop=/bin/bash -c '$ORACLE_HOME/bin/dbshut $ORACLE_HOME' User=oracle Group=oinstall [Install] WantedBy=multi-user.target

同样,为监听器创建/etc/systemd/system/oracle-listener.service。然后启用并启动服务:

systemctl daemon-reload systemctl enable oracle-19c systemctl enable oracle-listener systemctl start oracle-19c systemctl start oracle-listener

此外,建议在/u01/app/oracle/scripts下创建一些简单的启停脚本,方便手动操作。

4.3 首次连接与基础健康检查

现在,让我们以DBA身份登录,进行最终验证:

su - oracle sqlplus / as sysdba

成功进入SQL提示符后,执行几个关键命令检查数据库状态:

-- 查看数据库名称、创建时间、日志模式等 SELECT name, created, log_mode, open_mode FROM v$database; -- 查看实例状态 SELECT instance_name, status, database_status FROM v$instance; -- 查看表空间使用情况(确保SYSTEM, SYSAUX, UNDO, TEMP等状态正常) SELECT tablespace_name, status, contents FROM dba_tablespaces; -- 查看数据文件位置,确认是否在我们规划的/oradata下 SELECT name FROM v$datafile;

如果一切正常,你会看到数据库状态为OPEN,日志模式可能是NOARCHIVELOG(默认)。对于生产环境,你接下来需要做的关键操作包括:开启归档模式ALTER DATABASE ARCHIVELOG;),以支持在线热备和基于时间的恢复;修改默认用户密码配置定期的RMAN备份策略;以及根据应用需求创建业务用户和表空间,而不是所有对象都建在默认的USERS表空间下。

至此,一个完整的Oracle Database 19c单实例数据库就已经在你的Linux服务器上安装、创建并运行起来了。回顾整个过程,从系统调优、用户规划,到静默安装、建库配置,每一步都蕴含着对Oracle体系结构的理解。记住,安装只是起点,后续的监控、备份、优化和故障处理,才是DBA工作的真正核心。这套清晰的安装动作为你打下了一个稳定、规范的基础,让你在后续的运维中能更加得心应手。

← 返回列表