数据库教程FGMT02‑生产环境Linux+Oracle19c安装配置与项目实战
## 前言
Oracle19c作为LTS长期支持版本,是当前企业生产环境部署最多的单机关系型数据库版本。Linux平台下Oracle19c标准化部署是DBA核心基础能力,部署过程涉及操作系统内核调优、用户权限管理、存储规划、软件部署、数据库创建、监听配置、初始化校验等完整流程。部署环节任何参数、权限、目录配置错误,都会引发数据库启动异常、性能劣化、业务连接故障等生产事故。风哥 itpux‑com
风哥本文面向数据库运维工程师、DBA、IT实施人员,聚焦Linux环境Oracle19c单机生产标准化实施,区分部署理论规范与完整实操步骤,全部路径统一调整为`/oracle`,数据库实例名、数据库名、业务用户名统一使用`fgedudb`。内容包含软硬件规划、操作系统前置理论、OFA灵活架构原理、静默安装部署、数据库创建、监听配置、环境校验、开机自启、生产初始化检查,大量可直接复用的Shell与SQL命令,为后续备份恢复、容灾、调优打下基础。
**内容大纲:**
1. Oracle19c生产部署软硬件与存储规划理论
2. OFA灵活架构、操作系统内核、资源限制、用户组权限原理
3. Oracle19c软件安装两种模式:图形化、静默模式适用场景
4. 数据库实例、监听、字符集、归档模式生产配置规范
5. 完整实战:操作系统预处理、目录创建、依赖包部署、内核参数、用户环境变量、软件解压、静默安装、建库、监听配置、实例启停、生产环境校验
6. 开机自启配置、数据库基础参数调整、连接测试
7. 全文总结,生产实施风险提示与最佳实践
## 一、风哥Linux下Oracle19c部署基础理论
### 1.1 生产环境软硬件规划理论
Oracle19c企业版单机部署对Linux服务器存在明确软硬件认证要求,主流支持操作系统包含Oracle Linux7/8、RHEL7/8,不建议使用未经过Oracle官方认证的操作系统版本用于核心业务。风哥教程 itpux_com
硬件层面,生产服务器CPU、内存、存储需要结合业务TPS、并发连接数、数据总量做规划。内存最小生产建议不低于16GB;SGA与PGA总和不宜超过物理内存70%,预留操作系统内存。存储层面必须做物理磁盘隔离:数据库软件目录、数据文件目录、归档日志目录、快速恢复区FRA目录分开挂载至独立磁盘,避免IO资源争抢;生产禁止将全部数据部署在系统盘。
本文统一标准化目录规划:
|目录路径|用途说明|
|—|—|
|`/fgedudb/app`|Oracle Base根目录|
|`/fgedudb/app/product/19.0.0/dbhome_1`|Oracle Home数据库软件家目录|
|`/fgedudb/app/oraInventory`|Oracle软件清单目录,记录所有Oracle软件安装信息|
|`/fgedudb/oradata/fgedudb`|数据文件存放路径|
|`/fgedudb/arch/fgedudb`|归档日志存储路径|
|`/fgedudb/fra/fgedudb`|快速恢复区,备份、控制文件自动备份存放位置|
|`/fgedudb/soft`|安装介质、补丁包存放目录|
数据库标准化业务信息:
– 全局数据库名:`fgedudb`
– 实例SID:`fgedudb`
– 业务用户名:`fgedu`
– 字符集:`AL32UTF8`
– 国家字符集:`AL16UTF16`
– 监听端口:1521
– 生产强制开启归档模式`ARCHIVELOG`
### 1.2 OFA最优灵活架构原理
OFA(Optimal Flexible Architecture)是Oracle官方定义的目录规范,标准化目录命名、文件存放位置。遵循OFA规范,便于多实例共存、软件升级、故障排查、数据迁移。核心原则:Oracle Base存放软件公共配置、日志;Oracle Home为一套版本软件独立目录;数据文件、redo日志、归档日志、FRA快速恢复区物理路径相互分离;不同实例数据文件目录做隔离,防止多实例之间文件误覆盖。风哥数据库 itpux‑com
### 1.3 Linux操作系统内核与资源限制理论
Oracle数据库运行依赖操作系统共享内存、信号量、文件句柄、网络端口资源,内核参数配置错误会出现数据库无法启动、连接数上限不足、进程创建失败等问题。`/etc/sysctl.conf`定义系统内核参数;`/etc/security/limits.conf`定义oracle操作系统用户软硬资源限制,包含最大打开文件数、进程数、栈大小。
关键内核参数说明:
1. `kernel.shmmax`:单块共享内存段最大字节,建议不超过物理内存80%,SGA会申请该共享内存段。
2. `kernel.shmall`:系统允许共享内存总页数。
3. `kernel.sem`:信号量四元组,控制Oracle后台进程信号资源。
4. `fs.file‑max`:系统全局最大打开文件句柄,数据库大量数据文件、连接会话会消耗句柄。
5. `net.ipv4.ip_local_port_range`:操作系统可用临时端口范围,大量业务连接需要扩大端口池。
资源限制参数:oracle用户nofile(最大打开文件)、nproc(最大进程数),生产环境需要调大,不能使用系统默认值。
### 1.4 用户与用户组权限理论
Oracle部署遵循最小权限原则,创建两组用户组:`oinstall`为软件清单属组,管理Oracle全部软件安装信息;`dba`为DBA管理组,拥有操作系统认证登录数据库sysdba权限。操作系统用户`oracle`归属`oinstall`主组,附属组为`dba`。root用户负责操作系统层面配置,数据库软件运行全部使用oracle用户,禁止使用root运行Oracle进程。
### 1.5 Oracle19c软件安装模式理论
Oracle19c单机部署分为两种安装模式:
1. **图形化OUI安装**:需要服务器具备图形桌面或者VNC图形转发,适合测试环境,交互向导完成软件部署;生产机房服务器大多无图形环境,很少使用。
2. **静默silent安装**:依靠response响应文件配置全部安装参数,无需图形界面,适合机房无显示器服务器,可脚本化批量部署,为生产环境标准实施方案。
> 注意:Oracle19c安装介质为zip压缩包,解压直接得到OUI安装文件,不再提供传统的runInstaller介质光盘。
### 1.6 数据库创建与初始化理论
软件安装完成不等于数据库实例已经创建。软件是二进制执行程序,数据库是数据文件、控制文件、redo日志集合。可以使用dbca工具完成建库,dbca也支持图形模式与静默模式。生产建库需要重点确认:字符集、内存管理模式AMM、归档模式开启、控制文件多路复用、redo日志大小与组数、FRA快速恢复区配置。生产环境必须开启归档,控制文件至少两份放置不同磁盘,redo日志组至少3组,每组日志文件大小建议1‑4GB,根据业务负载评估。
### 1.7 监听服务基础原理
Oracle监听程序接收外部客户端TCP连接请求,转发到数据库实例。监听属于独立进程,运行在oracle用户下,配置文件`listener.ora`、`tnsnames.ora`存放在`$ORACLE_HOME/network/admin`。单机环境静态注册、动态注册两种模式,生产优先使用PMON动态注册;监听故障会出现数据库实例正常,但是业务无法远程连接的典型现象。
## 二、风哥生产环境完整实战操作
> 说明:操作系统RHEL7,全部命令生产执行前务必在测试环境验证;所有路径替换为`/fgedudb`;数据库SID、DB_NAME统一`fgedudb`,业务用户`fgedu`;root执行操作系统配置,oracle用户执行Oracle软件相关操作。
### 2.1 操作系统基础预处理(root用户执行)
#### 2.1.1 主机名与/etc/hosts配置
“`bash
#设置主机名
hostnamectl set-hostname ora‑fgedudb
#写入hosts,IP替换为本机实际业务IP
cat >> /etc/hosts << EOF
10.10.10.100 ora‑fgedudb
EOF
“`
#### 2.1.2 防火墙与SELinux配置
生产环境如果内网隔离,可以关闭防火墙;如需要开启防火墙,开放1521端口。SELinux生产建议设置为permissive宽容模式。
“`bash
systemctl stop firewalld
systemctl disable firewalld
#SELinux设置宽容模式
setenforce 0
sed -i ‘s/^SELINUX=enforcing/SELINUX=permissive/’ /etc/selinux/config
“`
#### 2.1.3 安装操作系统依赖包
RHEL7环境安装Oracle19c必须依赖软件包,可以使用yum源安装。
“`bash
yum install -y binutils compat‑libcap‑devel gcc gcc‑c++ glibc glibc‑devel ksh libaio libaio‑devel libgcc libstdc++ libstdc++‑devel libXi libXtst make sysstat unzip libnsl
“`
#### 2.1.4 创建操作系统用户与用户组
“`bash
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
#设置oracle用户密码
echo “Oracle@123″ | passwd –stdin oracle
“`
#### 2.1.5 创建全部生产目录,授权属主
“`bash
mkdir -p /fgedudb/app
mkdir -p /fgedudb/app/product/19.0.0/dbhome_1
mkdir -p /fgedudb/app/oraInventory
mkdir -p /fgedudb/oradata/fgedudb
mkdir -p /fgedudb/arch/fgedudb
mkdir -p /fgedudb/fra/fgedudb
mkdir -p /fgedudb/soft
chown -R oracle:oinstall /fgedudb
chmod -R 775 /fgedudb
“`
#### 2.1.6 修改内核参数sysctl.conf
编辑`/etc/sysctl.conf`写入如下参数:
“`ini
kernel.shmmax=8589934592
kernel.shmall=2097152
kernel.sem=250 32000 100 128
fs.file‑max=6815744
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
“`
生效内核参数:
“`bash
sysctl -p
“`
#### 2.1.7 修改oracle用户资源限制 limits.conf
编辑`/etc/security/limits.conf`,追加:
“`ini
oracle soft nofile 10240
oracle hard nofile 65535
oracle soft nproc 8192
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
“`
### 2.2 oracle用户环境变量配置
切换oracle用户,编辑`~/.bash_profile`
“`bash
su – oracle
vi ~/.bash_profile
“`
写入环境变量内容:
“`bash
export ORACLE_BASE=/fgedudb/app
export ORACLE_HOME=/fgedudb/app/product/19.0.0/dbhome_1
export ORACLE_SID=fgedudb
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
“`
生效环境变量:
“`bash
source ~/.bash_profile
#校验变量输出
echo $ORACLE_HOME
echo $ORACLE_SID
“`
### 2.3 Oracle19c介质解压(oracle用户)
将安装包`LINUX.X64_193000_db_home.zip`上传到`/fgedudb/soft`目录,解压至`ORACLE_HOME`路径。
“`bash
cd /fgedudb/soft
unzip LINUX.X64_193000_db_home.zip -d $ORACLE_HOME
chmod -R 755 $ORACLE_HOME
“`
### 2.4 静默安装Oracle软件(软件仅安装,不建库)
复制响应文件模板到oracle家目录:
“`bash
cp $ORACLE_HOME/install/response/db_install.rsp ~/db_install.rsp
“`
修改rsp响应文件关键参数,这里给出核心配置项:
“`ini
oracle.install.responseFileVersion=/fgedudb/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/fgedudb/app/oraInventory
ORACLE_HOME=/fgedudb/app/product/19.0.0/dbhome_1
ORACLE_BASE=/fgedudb/app
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oinstall
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
“`
执行静默安装命令:
“`bash
$ORACLE_HOME/runInstaller -silent -responseFile ~/db_install.rsp
“`
安装结束后,根据屏幕提示,使用root执行两个脚本:
“`bash
su – root
/fgedudb/app/oraInventory/orainstRoot.sh
/fgedudb/app/product/19.0.0/dbhome_1/root.sh
“`
### 2.5 使用dbca静默创建数据库fgedudb
> 生产dbca静默建库,开启归档,配置多路控制文件,设置字符集AL32UTF8。
“`bash
dbca -silent -createDatabase \
‑templateName General_Purpose.dbc \
‑gdbName fgedudb \
‑sid fgedudb \
‑responseFile NO_VALUE \
‑characterSet AL32UTF8 \
‑nationalCharacterSet AL16UTF16 \
‑sysPassword Sys@Fgedu123 \
‑systemPassword Sys@Fgedu123 \
‑createAsContainerDatabase false \
‑datafileDestination /fgedudb/oradata/fgedudb \
‑recoveryAreaDestination /fgedudb/fra/fgedudb \
‑storageType FS \
‑redoLogFileSize 2048 \
‑initParams audit_trail=db,memory_target=8G,db_recovery_file_dest_size=15G \
‑enableArchive true \
‑archiveLogDest /fgedudb/arch/fgedudb
“`
执行完成后,数据库实例`fgedudb`创建完毕,自动启动open状态。
### 2.6 监听程序静默配置netca
“`bash
netca -silent -responseFile $ORACLE_HOME/network/admin/netca.rsp
“`
验证监听状态:
“`bash
lsnrctl status
lsnrctl start
lsnrctl stop
“`
### 2.7 数据库登录与生产基础校验
登录sysdba:
“`bash
sqlplus / as sysdba
“`
#### 2.7.1 查看数据库实例、名称、归档模式
“`sql
SELECT instance_name,status FROM v$instance;
SELECT name,dbid,log_mode,open_mode FROM v$database;
“`
确认`log_mode`为`ARCHIVELOG`。
#### 2.7.2 查看控制文件多路复用
“`sql
SELECT name FROM v$controlfile;
“`
生产环境必须输出至少两个不同路径控制文件。
#### 2.7.3 查看数据文件、redo日志路径
“`sql
SELECT file_name,tablespace_name FROM dba_data_files;
SELECT group#,member FROM v$logfile;
“`
#### 2.7.4 创建业务用户fgedu
“`sql
CREATE USER fgedu IDENTIFIED BY Fgedu@123 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
GRANT connect,resource,create view TO fgedu;
–测试业务用户连接
CONNECT fgedu/Fgedu@123;
SELECT * FROM dual;
“`
### 2.8 Linux系统配置Oracle开机自启(root操作)
Oracle19c使用`/etc/oratab`控制实例开机标记。编辑`/etc/oratab`,修改实例行末尾`N`改为`Y`:
“`
fgedudb:/fgedudb/app/product/19.0.0/dbhome_1:Y
“`
编写systemd服务单元文件`/etc/systemd/system/fgedudb‑fgedudb.service`
“`ini
[Unit]
Description=Oracle19c fgedudb Database Service
After=network.target
[Service]
Type=forking
User=oracle
Group=oinstall
Environment=”ORACLE_BASE=/fgedudb/app”
Environment=”ORACLE_HOME=/fgedudb/app/product/19.0.0/dbhome_1″
Environment=”ORACLE_SID=fgedudb”
ExecStart=/fgedudb/app/product/19.0.0/dbhome_1/bin/dbstart $ORACLE_HOME
ExecStop=/fgedudb/app/product/19.0.0/dbhome_1/bin/dbshut $ORACLE_HOME
Restart=no
[Install]
WantedBy=multi‑user.target
“`
生效systemd配置,设置开机自启:
“`bash
systemctl daemon‑reload
systemctl enable oracle‑fgedudb.service
“`
### 2.9 数据库启停完整操作演示
oracle用户执行:
“`bash
#停止数据库与监听
lsnrctl stop
sqlplus / as sysdba <<EOF
SHUTDOWN IMMEDIATE;
EOF
#启动数据库与监听
sqlplus / as sysdba <<EOF
STARTUP;
EOF
lsnrctl start
“`
### 2.10 生产部署完成后的综合巡检脚本
“`bash
#操作系统层面检查
id oracle
cat /etc/oratab
ulimit -n
ipcs -lm
#数据库层面巡检
sqlplus / as sysdba <<EOF
SELECT version FROM v$instance;
SELECT name,log_mode FROM v$database;
SELECT tablespace_name,block_size FROM dba_tablespaces;
SHOW PARAMETER memory_target;
SHOW PARAMETER db_recovery_file_dest;
EOF
#监听检查
lsnrctl status
tnsping fgedudb
“`
## 三、风哥总结
Linux平台Oracle19c单机生产部署,并不是简单执行安装程序,整套实施流程是一套标准化工程体系,操作系统内核参数、用户权限、存储目录规划属于部署前置根基,任何一项配置疏漏,后续运行阶段都会暴露出稳定性隐患。风哥数据库 itpux‑com
本文遵循OFA架构规范,统一全部路径至`/fgedudb`,实例SID、数据库名、业务用户名统一使用`fgedudb`,全部实战命令基于生产静默部署方案。静默安装、静默建库是机房无图形服务器的首选实施方案,可进一步封装Shell脚本,实现批量自动化部署。部署完成之后必须完成全套巡检,确认归档模式开启、控制文件多路复用、监听正常、业务用户能够正常登录,才代表部署工作真正完成。
生产实施过程中必须严格遵守变更流程,操作系统内核、资源参数修改,数据库创建参数,都需要提前文档评审;正式实施前,必须在和生产配置一致的测试环境完整跑通全部部署流程,验证启停、重启开机自启、业务用户访问。Oracle19c软件部署完成只是DBA工作起点,后续数据库参数调优、备份恢复策略配置、日志轮转、补丁升级、监控接入,都需要在此套部署环境之上继续落地。DBA需要理解每一条命令背后原理,而不是机械复制执行脚本,才能处理部署中出现的各类异常报错。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
