当前位置: 首页 > news >正文

Linux环境下Oracle 19c ZIP包静默部署全攻略

1. 环境准备:打好地基才能盖高楼

第一次在Linux上部署Oracle 19c时,我踩了不少坑。最惨的一次是装到一半才发现系统参数没调好,只能全部重来。从那以后我就养成了"先检查再动手"的习惯。下面这些准备工作看似繁琐,但能让你后续安装过程顺利十倍。

首先确保你的Linux系统是Oracle官方认证的版本。我推荐用CentOS 7.x或RHEL 7.x,这些版本兼容性最好。内存建议至少4GB,硬盘空间不能少于50GB(实际生产环境需要更大)。曾经有个同事在虚拟机里只分配了20GB空间,结果数据库创建到一半就报空间不足,那场面相当尴尬。

关闭防火墙和SELinux是必须的,否则安装过程中各种奇怪的权限问题能让你怀疑人生:

systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

安装依赖包时有个小技巧:先创建一个本地yum源。我在内网环境部署时就遇到过依赖包下载慢的问题,后来把常用包都做成了本地仓库。下面是必须安装的依赖包列表:

yum -y install binutils compat-libcap1 gcc-c++ ksh libaio-devel yum -y install libstdc++-devel make sysstat unixODBC-devel yum -y install elfutils-libelf-devel libXext libXtst libX11 libXau yum -y install libxcb libXi smartmontools glibc-devel

验证安装是否成功时,我习惯用这个命令检查关键包:

rpm -q binutils gcc glibc ksh libaio make sysstat | grep "not installed"

如果有输出就说明还有包没装好。遇到过最坑的情况是系统自带的老版本gcc导致安装失败,所以一定要确认gcc版本在4.8.5以上。

2. 用户与目录配置:给Oracle安个家

Oracle对权限和目录结构的要求相当严格。我见过有人直接用root安装,结果后面各种权限问题不断。正确的做法是创建专门的oracle用户和组。

创建用户组时要注意顺序,先创建组再创建用户:

groupadd -g 54321 oinstall groupadd -g 54322 dba useradd -u 54321 -g oinstall -G dba oracle passwd oracle # 建议设置复杂密码

目录结构我推荐按照OFA(Optimal Flexible Architecture)标准来配置。这是我常用的目录方案:

/u01 ├── app │ ├── oracle │ │ ├── product │ │ │ └── 19.3.0 │ │ │ └── dbhome_1 # ORACLE_HOME │ ├── oraInventory /home/oracle/scripts # 存放自定义脚本

设置目录权限时要特别注意:

mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1 chown -R oracle:oinstall /u01 chmod -R 775 /u01

环境变量配置是新手最容易出错的地方。建议先在测试机验证.bash_profile配置:

export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export TMP=/tmp export TMPDIR=$TMP

3. 系统参数调优:让Oracle飞起来

内核参数配置直接影响数据库性能。有一次生产环境频繁出现内存不足,就是因为shmmax设置太小。下面这些参数是我经过多次实践验证的推荐值:

编辑/etc/sysctl.conf添加:

fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 内存的75%(8GB内存设为6GB) 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

执行sysctl -p生效后,建议用以下命令验证:

sysctl -a | grep shm sysctl -a | grep sem

用户资源限制也很重要,特别是生产环境。编辑/etc/security/limits.conf:

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

有个坑要注意:如果/etc/pam.d/login里没有加载pam_limits.so,上面的配置不会生效。确保有以下内容:

session required pam_limits.so

4. 静默安装实战:无交互一键部署

静默安装的核心是response file(响应文件)。我建议先备份原始文件再修改:

cp $ORACLE_HOME/install/response/db_install.rsp /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.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.config.starterdb.type=GENERAL_PURPOSE oracle.install.db.config.starterdb.SID=orcl

开始安装前建议先做预检查:

cd $ORACLE_HOME ./runInstaller -executePrereqs -silent -responseFile /home/oracle/db_install.rsp

正式安装命令:

./runInstaller -silent -responseFile /home/oracle/db_install.rsp -ignorePrereq

安装完成后需要用root执行两个脚本:

/u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/19.3.0/dbhome_1/root.sh

5. 数据库创建与监听配置

静默建库需要修改dbca.rsp文件。我建议先创建测试库熟悉流程:

responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v19.0.0 gdbName=orcl sid=orcl templateName=General_Purpose.dbc sysPassword=你的密码 systemPassword=你的密码 characterSet=AL32UTF8 memoryPercentage=40 enableArchive=true archiveLogFormat=%t_%s_%r.dbf

执行建库命令:

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

监听配置也有静默模式。先准备netca.rsp:

RESPONSEFILE_VERSION="19.0" INSTALL_TYPE=""custom"" LISTENER_NAME="LISTENER" LISTENER_PORT=1521 LISTENER_PROTOCOLS={"TCP"}

配置监听:

netca -silent -responseFile /home/oracle/netca.rsp

启动监听后建议测试连接:

sqlplus sys/你的密码@orcl as sysdba

6. 开机自启与服务管理

生产环境必须配置开机自启。我整理了一套可靠的方案:

首先修改/etc/oratab:

orcl:/u01/app/oracle/product/19.3.0/dbhome_1:Y

创建服务脚本/etc/init.d/oracle:

#!/bin/bash ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1 ORACLE_USER=oracle case "$1" in start) su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl start" su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME" ;; stop) su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop" su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME" ;; restart) $0 stop $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac

设置权限并启用服务:

chmod 755 /etc/init.d/oracle chkconfig --add oracle chkconfig oracle on

测试服务控制:

service oracle start # 启动 service oracle stop # 停止 service oracle status # 查看状态

7. 常见问题排查指南

安装过程中难免会遇到问题,这里分享几个我遇到的典型问题及解决方法:

问题1:安装时提示"pdksh包缺失"

  • 原因:Oracle 19c需要ksh而不是pdksh
  • 解决:yum install ksh

问题2:dbca建库时报内存不足

  • 检查:free -m查看可用内存
  • 解决:调整dbca.rsp中的memoryPercentage参数

问题3:监听启动失败

  • 检查:lsnrctl status
  • 解决:检查$ORACLE_HOME/network/admin/listener.ora配置

问题4:sqlplus连接时报"ORA-12541"

  • 检查:netstat -tulnp | grep 1521
  • 解决:确认监听是否启动,防火墙是否关闭

问题5:安装日志查看位置

  • 安装日志:$ORACLE_HOME/install/logs
  • 建库日志:$ORACLE_BASE/cfgtoollogs/dbca

8. 性能优化建议

安装完成后,我通常会做这些优化调整:

  1. 内存调整
ALTER SYSTEM SET sga_target=4G SCOPE=spfile; ALTER SYSTEM SET pga_aggregate_target=2G SCOPE=spfile;
  1. 表空间优化
CREATE TEMPORARY TABLESPACE temp2 TEMPFILE '/u01/app/oracle/oradata/orcl/temp02.dbf' SIZE 2G; ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;
  1. 归档日志配置
ALTER SYSTEM SET log_archive_dest_1='location=/u01/app/oracle/archivelog' SCOPE=spfile; ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=spfile;
  1. 连接数调整
ALTER SYSTEM SET processes=500 SCOPE=spfile; ALTER SYSTEM SET sessions=555 SCOPE=spfile;
  1. 定时任务配置
# 每天凌晨3点自动备份 0 3 * * * /home/oracle/scripts/rman_backup.sh

这套部署方案已经在我的多个生产环境稳定运行超过两年。记得第一次成功部署时的成就感,现在虽然已经轻车熟路,但每次安装还是会仔细检查每个步骤。Oracle安装就像做手术,准备越充分,过程越顺利。

http://www.jsqmd.com/news/501497/

相关文章:

  • 深入解析Android sharedUserId:实现跨应用数据共享与系统权限获取
  • Compose | UI组件(十五) | Navigation-Args - 类型安全导航参数实践
  • 数据安全保护:加密存储与脱敏处理的技术方案
  • Navigating the Future: How Diffusion Transformers Revolutionize Visual Path Planning
  • 从HWSDv2.0到应用:利用Python与ArcGIS Pro构建全球土壤理化性质栅格图
  • 测试员的道德边界:当漏洞扫描成为犯罪帮凶
  • 信道估计准则演进:从LS、MMSE到LMMSE的工程权衡
  • 从零到一:在VMware Ubuntu上构建你的第一个HFish蜜罐防御体系
  • uniapp新手必看:swiper组件高度自适应踩坑指南
  • Hali硬件安全实战:从RS232/485/422到CAN总线的工业协议抓包与逆向分析
  • Pixel 4 专属:从零编译 AOSP Android 10 完整指南(附驱动配置避坑)
  • [RDK X5] MJPG硬件编解码优化实战:从性能瓶颈分析到OpenWanderary跨语言封装
  • 开发者降维收割:教广场舞大妈用区块链记账——软件测试视角的专业解析
  • OpenCode在团队协作中的应用:如何建立统一代码标准与审查流程
  • 深入解析Unity粒子系统Particle System:生命周期控制模块实战指南
  • iOS 15.6 Beta用户必看:TrollStore安装微信双开保姆级教程(附IPA资源)
  • 快速优化IDEA插件下载体验:国内节点加速与hosts配置实战
  • CTF实战:5种LCG算法题型破解全攻略(附Python代码)
  • 实战避坑:UniApp蓝牙打印从连接到断开的完整流程与疑难解析
  • ESP32 Bootloader改造实战:如何用GPIO和IIC驱动实现硬件自检(附完整代码)
  • 技术人灰色理财:用压力测试原理做空小型币种
  • 监控系统集成避坑指南:ONVIF协议对接常见的5大错误及解决方法(附AS-V1000实测)
  • Simulink新手入门:从零开始搭建你的第一个动态系统模型
  • 黑产防护系统:软件测试从业者的冒险与挑战
  • HDLbits实战解析:从组合逻辑到算术电路与卡诺图化简的进阶之路
  • 图解GAT:从蛋白质折叠到社交推荐,5个案例看懂注意力机制如何改变图神经网络
  • 创龙T113 SDK编译实战:从环境搭建到疑难排错
  • 避坑指南:ZCU111开发板VADJ_FMC电压修改后重启失效的解决方案
  • TLS测评漏洞问题
  • 数据库SM4和pg_rewind冲突导致HGHAC备库时间线不同步