外观
Oracle 在 Linux 上安装
Oracle 数据库在 Linux 环境下的安装是 DBA 日常工作中的重要任务。本文档详细介绍了 Oracle 数据库在 Linux 系统上的安装步骤,包括系统准备、安装前配置、安装过程和安装后配置。
系统准备
支持的 Linux 发行版
Oracle 支持多种 Linux 发行版,主要包括:
- Red Hat Enterprise Linux (RHEL) 7.x, 8.x, 9.x
- Oracle Linux (OEL) 7.x, 8.x, 9.x
- CentOS 7.x, 8.x, 9.x
- SUSE Linux Enterprise Server (SLES) 12.x, 15.x
硬件要求
| 配置项 | 最小值 | 推荐值 |
|---|---|---|
| CPU 核心数 | 2 | 4+ |
| 内存 | 2GB | 8GB+ |
| 交换空间 | 4GB | 16GB+ |
| 磁盘空间(软件) | 10GB | 20GB+ |
| 磁盘空间(数据) | 10GB | 50GB+ |
| 临时空间 | 1GB | 2GB+ |
软件要求
- 操作系统版本:符合 Oracle 官方支持的版本
- 内核版本:符合 Oracle 官方支持的内核版本
- 依赖包:安装所需的依赖包
- 图形界面:可选,用于图形化安装
安装前配置
1. 检查系统架构
bash
# 检查系统架构
uname -m
# 检查操作系统版本
cat /etc/redhat-release
# 检查内核版本
uname -r2. 配置主机名和 IP 地址
bash
# 配置主机名
hostnamectl set-hostname oracle-server
# 配置 /etc/hosts 文件
cat >> /etc/hosts << EOF
192.168.1.100 oracle-server oracle-server.example.com
EOF
# 验证主机名
hostname
ping -c 3 $(hostname)3. 配置防火墙
bash
# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙(推荐在安装期间关闭,安装后根据需要配置)
systemctl stop firewalld
systemctl disable firewalld
# 或者开放必要的端口
firewall-cmd --permanent --add-port=1521/tcp
firewall-cmd --permanent --add-port=5500/tcp
firewall-cmd --reload4. 配置 SELinux
bash
# 查看 SELinux 状态
getenforce
# 临时关闭 SELinux
setenforce 0
# 永久关闭 SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config5. 创建 Oracle 用户和组
bash
# 创建组
groupadd -g 54321 oinstall
groupadd -g 54322 dba
groupadd -g 54323 oper
groupadd -g 54324 backupdba
groupadd -g 54325 dgdba
groupadd -g 54326 kmdba
groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin
# 创建用户
useradd -u 54321 -g oinstall -G dba,oper,backupdba,dgdba,kmdba,asmdba oracle
# 设置密码
passwd oracle6. 配置内核参数
bash
# 编辑 /etc/sysctl.conf 文件
cat >> /etc/sysctl.conf << EOF
# Oracle 19c 内核参数
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 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
EOF
# 应用内核参数
sysctl -p7. 配置用户资源限制
bash
# 编辑 /etc/security/limits.conf 文件
cat >> /etc/security/limits.conf << EOF
# Oracle 19c 用户限制
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
# 编辑 /etc/pam.d/login 文件
cat >> /etc/pam.d/login << EOF
# Oracle 19c PAM 配置
session required pam_limits.so
EOF8. 创建安装目录
bash
# 创建安装目录
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
mkdir -p /u01/app/oraInventory
mkdir -p /u02/oradata
mkdir -p /u03/fast_recovery_area
# 设置权限
chown -R oracle:oinstall /u01 /u02 /u03
chmod -R 775 /u01 /u02 /u039. 配置 Oracle 环境变量
bash
# 编辑 oracle 用户的 .bash_profile 文件
cat >> /home/oracle/.bash_profile << EOF
# Oracle 19c 环境变量
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=ORCL
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export DISPLAY=:0.0
EOF
# 应用环境变量
source /home/oracle/.bash_profile10. 安装依赖包
bash
# RHEL 7.x / CentOS 7.x
yum install -y binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXrender libXrender-devel libXtst make sysstat xorg-x11-xauth xorg-x11-utils xorg-x11-apps
# RHEL 8.x / CentOS 8.x / Oracle Linux 8.x
dnf install -y bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libnsl libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXrender libXrender-devel libXtst make nfs-utils net-tools python3 python3-configshell python3-rtslib python3-six smartmontools sysstat targetcli xorg-x11-xauth xorg-x11-utils xorg-x11-apps
# RHEL 9.x / Oracle Linux 9.x
dnf install -y bc binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libnsl2 libstdc++ libstdc++-devel libxcb libX11 libXau libXi libXrender libXrender-devel libXtst make nfs-utils net-tools python3 python3-configshell python3-rtslib python3-six smartmontools sysstat targetcli xorg-x11-xauth xorg-x11-utils xorg-x11-apps11. 禁用透明大页(Transparent HugePages)
bash
# 查看透明大页状态
cat /sys/kernel/mm/transparent_hugepage/enabled
# 临时禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 永久禁用透明大页
cat >> /etc/default/grub << EOF
# 禁用透明大页
transparent_hugepage=never
EOF
# 重新生成 grub 配置
# RHEL 7.x / CentOS 7.x
grub2-mkconfig -o /boot/grub2/grub.cfg
# RHEL 8.x / CentOS 8.x / RHEL 9.x / Oracle Linux 9.x
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg12. 禁用 NUMA(非统一内存访问)
bash
# 查看 NUMA 状态
numactl --hardware
# 临时禁用 NUMA
echo 0 > /proc/sys/kernel/numa_balancing
# 永久禁用 NUMA
cat >> /etc/sysctl.conf << EOF
# 禁用 NUMA
kernel.numa_balancing = 0
EOF
# 应用内核参数
sysctl -pOracle 软件安装
1. 下载 Oracle 安装介质
- 从 Oracle 官方网站下载对应版本的 Oracle 数据库安装介质
- 例如:LINUX.X64_193000_db_home.zip
- 将下载的安装介质上传到服务器的 /tmp 目录
2. 解压安装介质
bash
# 切换到 oracle 用户
su - oracle
# 解压安装介质
cd /tmp
unzip LINUX.X64_193000_db_home.zip -d $ORACLE_HOME3. 图形化安装
bash
# 确保 X11 转发正常
# 在本地终端执行(Windows 使用 Xming,macOS 使用 XQuartz)
# ssh -X oracle@oracle-server
# 启动 Oracle 安装向导
cd $ORACLE_HOME
./runInstaller安装向导步骤
- 配置安全更新:取消勾选 "I wish to receive security updates via My Oracle Support",点击 "Next"
- 安装选项:选择 "Create and configure a single instance database",点击 "Next"
- 系统类:选择 "Server Class",点击 "Next"
- 数据库安装选项:选择 "Single instance database installation",点击 "Next"
- 数据库版本:选择 "Enterprise Edition",点击 "Next"
- 安装位置:验证 Oracle Base 和 Oracle Home 路径,点击 "Next"
- 操作系统组:验证操作系统组,点击 "Next"
- 配置类型:选择 "General Purpose/Transaction Processing",点击 "Next"
- 数据库标识符:输入全局数据库名和 SID,点击 "Next"
- 配置选项:
- 字符集:选择 "Use Unicode (AL32UTF8)"
- 内存:根据服务器内存调整,推荐 40-60%
- 进程数:根据需要调整
- 点击 "Next"
- 管理选项:配置 Enterprise Manager Database Express,点击 "Next"
- 存储选项:
- 选择 "Use Oracle-Managed Files"
- 输入数据库文件位置:/u02/oradata
- 输入快速恢复区位置:/u03/fast_recovery_area
- 点击 "Next"
- 数据库加密:根据需要配置,点击 "Next"
- 数据库用户密码:设置 SYS 和 SYSTEM 用户密码,点击 "Next"
- 配置助手:选择 "Create database",点击 "Next"
- 概要:查看安装概要,点击 "Install"
- 安装过程:等待安装完成
- 执行配置脚本:根据提示在 root 用户下执行配置脚本bash
# 执行配置脚本 /u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/19.0.0/dbhome_1/root.sh - 完成:点击 "Close" 完成安装
4. 静默安装
创建响应文件
bash
# 复制模板响应文件
cp $ORACLE_HOME/install/response/db_install.rsp /home/oracle/
# 编辑响应文件
vi /home/oracle/db_install.rsp
# 主要配置项
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSDGDBA_GROUP=dgdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=dba执行静默安装
bash
# 执行静默安装
cd $ORACLE_HOME
./runInstaller -silent -responseFile /home/oracle/db_install.rsp -ignorePrereqFailure
# 执行配置脚本
# 在 root 用户下执行
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh创建数据库
1. 使用 DBCA 图形化创建
bash
# 启动 DBCA
$ORACLE_HOME/bin/dbcaDBCA 步骤
- 欢迎:点击 "Next"
- 创建数据库:选择 "Create a Database",点击 "Next"
- 数据库模板:选择 "General Purpose or Transaction Processing",点击 "Next"
- 数据库标识符:输入全局数据库名和 SID,点击 "Next"
- 管理选项:配置 Enterprise Manager Database Express,点击 "Next"
- 数据库凭据:设置 SYS 和 SYSTEM 用户密码,点击 "Next"
- 存储选项:
- 选择 "Use Oracle-Managed Files"
- 输入数据库文件位置:/u02/oradata
- 输入快速恢复区位置:/u03/fast_recovery_area
- 点击 "Next"
- 数据库选项:根据需要配置,点击 "Next"
- 初始化参数:
- 内存:根据服务器内存调整
- 字符集:选择 "AL32UTF8"
- 点击 "Next"
- 创建选项:选择 "Create Database",点击 "Next"
- 概要:查看概要,点击 "Finish"
- 创建过程:等待数据库创建完成
- 完成:点击 "Close" 完成创建
2. 使用 DBCA 静默创建
创建响应文件
bash
# 复制模板响应文件
cp $ORACLE_HOME/assistants/dbca/dbca.rsp /home/oracle/
# 编辑响应文件
vi /home/oracle/dbca.rsp
# 主要配置项
gdbName=ORCL
sid=ORCL
responseFileVersion=19.0.0.0.0
createAsContainerDatabase=false
numberOfPDBs=0
useLocalUndoForPDBs=true
pdbAdminPassword=
templateName=General_Purpose.dbc
emExpressPort=5500
omsPort=
characterSet=AL32UTF8
memoryPercentage=40
automaticMemoryManagement=true
totalMemory=0
databaseType=MULTIPURPOSE
storageType=FS
datafileDestination=/u02/oradata
recoveryAreaDestination=/u03/fast_recovery_area
storageSize=0
recoveryAreaSize=0
redoLogFileSize=0
emConfiguration=DBEXPRESS
runCVUChecks=false
copyDB=false
sourceDB=
sourceDBWalletLocation=
# 密码配置
sysPassword=Password123
systemPassword=Password123
dbsnmpPassword=
# 安装选项
sampleSchema=false
lockAccounts=false执行静默创建
bash
# 执行静默创建
dbca -silent -createDatabase -responseFile /home/oracle/dbca.rsp安装后配置
1. 验证数据库状态
bash
# 连接数据库
sqlplus / as sysdba
# 查看数据库状态
SELECT status FROM v$instance;
SELECT name, open_mode FROM v$database;
# 查看监听状态
lsnrctl status2. 配置监听
bash
# 启动监听
lsnrctl start
# 停止监听
lsnrctl stop
# 重启监听
lsnrctl restart
# 查看监听配置
cat $ORACLE_HOME/network/admin/listener.ora3. 配置 TNS 名称
bash
# 编辑 tnsnames.ora 文件
cat >> $ORACLE_HOME/network/admin/tnsnames.ora << EOF
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracle-server.example.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
EOF4. 配置自动启动和关闭
bash
# 创建启动脚本
cat > /etc/init.d/oracle << EOF
#!/bin/bash
# Oracle 19c 自动启动脚本
# chkconfig: 345 99 10
# description: Oracle 19c Database Server
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
ORACLE_SID=ORCL
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
case "$1" in
'start')
echo "Starting Oracle Database..."
su - oracle -c "lsnrctl start"
su - oracle -c "sqlplus / as sysdba << EOF
STARTUP
EXIT
EOF"
echo "Oracle Database started."
;;
'stop')
echo "Stopping Oracle Database..."
su - oracle -c "sqlplus / as sysdba << EOF
SHUTDOWN IMMEDIATE
EXIT
EOF"
su - oracle -c "lsnrctl stop"
echo "Oracle Database stopped."
;;
'restart')
$0 stop
$0 start
;;
'status')
echo "Checking Oracle Database status..."
su - oracle -c "lsnrctl status"
su - oracle -c "sqlplus -s / as sysdba << EOF
SELECT status FROM v\$instance;
EXIT
EOF"
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0
EOF
# 设置权限
chmod +x /etc/init.d/oracle
# 添加到系统服务
chkconfig --add oracle
chkconfig oracle on
# 查看服务状态
systemctl status oracle5. 配置定时备份
bash
# 创建备份脚本
cat > /home/oracle/backup.sh << EOF
#!/bin/bash
# Oracle 19c 自动备份脚本
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
ORACLE_SID=ORCL
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
# 全量备份
rman target / << EOF
BACKUP DATABASE PLUS ARCHIVELOG;
DELETE OBSOLETE;
EXIT;
EOF
EOF
# 设置权限
chmod +x /home/oracle/backup.sh
# 添加到定时任务
crontab -e
# 添加以下内容(每天凌晨 2 点执行备份)
0 2 * * * /home/oracle/backup.sh > /home/oracle/backup.log 2>&16. 安装补丁
bash
# 下载最新补丁
# 从 Oracle 官方网站下载最新的 PSU 或 RU 补丁
# 解压补丁
unzip p34133642_190000_Linux-x86-64.zip -d /tmp
# 安装补丁
cd /tmp/34133642
opatch apply
# 验证补丁
opatch lsinventory常见问题与解决方案
1. 图形化安装时 X11 转发失败
问题:启动安装向导时出现 "DISPLAY not set" 或 "Can't open display" 错误
解决方案:
- 确保本地终端已安装 X11 服务器(Windows 使用 Xming,macOS 使用 XQuartz)
- 确保 SSH 连接启用了 X11 转发(使用
-X参数) - 检查
DISPLAY环境变量是否正确设置bashexport DISPLAY=:0.0 xhost +
2. 安装过程中依赖包缺失
问题:安装过程中出现依赖包缺失错误
解决方案:
- 安装缺失的依赖包bash
yum install -y <missing_package> # 或 dnf install -y <missing_package> - 如果官方源中没有,可以从其他源或 Oracle 官方网站下载并安装
3. 数据库创建失败
问题:数据库创建过程中失败
解决方案:
- 查看日志文件:
/u01/app/oracle/cfgtoollogs/dbca/ORCL/ORCL.log - 根据日志中的错误信息进行排查
- 常见错误包括:磁盘空间不足、权限问题、内核参数配置错误等
4. 监听无法启动
问题:启动监听时出现错误
解决方案:
- 查看监听日志:
$ORACLE_HOME/network/log/listener.log - 检查
listener.ora文件配置是否正确 - 检查端口是否被占用bash
netstat -tuln | grep 1521
5. 数据库无法启动
问题:启动数据库时出现错误
解决方案:
- 查看告警日志:
$ORACLE_BASE/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log - 检查数据文件是否存在且可访问
- 检查控制文件是否存在且可访问
- 检查 redo log 文件是否存在且可访问
最佳实践
1. 系统配置最佳实践
- 使用推荐的 Linux 发行版和内核版本
- 配置足够的内存和交换空间
- 禁用透明大页和 NUMA
- 配置合理的内核参数和用户资源限制
- 使用独立的磁盘存储数据文件、日志文件和备份文件
2. 安装最佳实践
- 使用图形化安装或静默安装,根据实际情况选择
- 合理规划 Oracle 目录结构
- 配置自动启动和关闭
- 安装最新的补丁
- 配置定时备份
3. 安全最佳实践
- 为 SYS 和 SYSTEM 用户设置强密码
- 定期更改数据库用户密码
- 配置防火墙,只开放必要的端口
- 启用审计功能
- 定期检查数据库安全漏洞
4. 性能最佳实践
- 合理配置内存和进程数
- 使用自动内存管理
- 配置合理的表空间和数据文件大小
- 使用 ASM(自动存储管理)管理存储
- 定期收集统计信息
版本差异
| 版本 | 安装特性 |
|---|---|
| Oracle 11g | 传统安装方式,支持 RHEL 6.x / CentOS 6.x |
| Oracle 12c | 引入多租户架构,支持 RHEL 7.x / CentOS 7.x |
| Oracle 18c | 简化安装过程,支持 RHEL 7.x / CentOS 7.x |
| Oracle 19c | 长期支持版本,支持 RHEL 7.x / 8.x / 9.x |
| Oracle 23c | 引入新的安装方式,支持更多 Linux 发行版 |
相关命令速查
| 命令 | 用途 |
|---|---|
./runInstaller | 启动 Oracle 安装向导 |
dbca | 数据库配置助手 |
netca | 网络配置助手 |
sqlplus / as sysdba | 以 SYS 用户连接数据库 |
lsnrctl status | 查看监听状态 |
lsnrctl start | 启动监听 |
lsnrctl stop | 停止监听 |
opatch lsinventory | 查看已安装的补丁 |
opatch apply | 安装补丁 |
rman target / | 连接 RMAN |
chkconfig --add oracle | 添加 Oracle 服务 |
systemctl status oracle | 查看 Oracle 服务状态 |
总结
Oracle 数据库在 Linux 环境下的安装是一个复杂的过程,需要进行详细的系统准备和配置。DBA 应该根据 Oracle 官方文档和最佳实践进行安装,确保数据库的稳定和安全。安装完成后,还需要进行一系列的配置和优化,如自动启动、定时备份、安装补丁等,以确保数据库的长期稳定运行。通过遵循本文档的步骤和最佳实践,DBA 可以顺利完成 Oracle 数据库在 Linux 环境下的安装和配置。
