ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Linux服务器安装Oracle全流程指南:从系统准备到数据库建库

Linux服务器安装Oracle全流程指南:从系统准备到数据库建库

在Linux服务器上安装Oracle,永远是数据库运维和系统管理员绕不开的一道坎。这东西没法像普通应用那样yum一下或者rpm -ivh一把梭,涉及系统内核参数、用户权限、文件布局、环境变量、图形界面或静默配置……每一步都有讲究。我最早接触Oracle是在某高校实验室的模拟项目X里,那时候用的还是老版本,装一台测试库折腾了两整天,踩坑踩到怀疑人生。后来在公司的某跨平台系统上线前,又陆陆续续给开发、测试、预发环境装了好几套,逐渐才把整个流程吃透。这篇博文把我在Linux环境下安装Oracle的全过程做个梳理,从系统准备、安装包解压、静默安装,到监听器配置和建库,最后是验证与常见坑位排查,全文基于我在实际生产环境中反复验证过的方案。适合刚接手Linux运维、或者公司要搭Oracle测试环境但DBA还没到位的朋友参考;如果你只是装来自己学SQL,同样可以照这个流程操作,把内存参数调小一点就行。

1. 项目整体设计与安装思路拆解

安装Oracle最忌讳的事情,就是下载完安装包直接开始跑runInstaller。这个软件对操作系统的环境要求极其严格,前期缺一个依赖包、少一条内核参数,后面就可能报一个让人摸不着头脑的错误。整个项目如果拆开来看,大致能分成四个阶段:操作系统准备与参数调优、软件包安装与账号规划、数据库配置与实例创建、安装后验证。四个阶段环环相扣,一步错步步错。

我实验室项目X里第一次安装,就是没看官方文档里对操作系统版本的兼容性要求,直接用了内核过于精简的发行版,结果Oracle的安装程序检测环境时直接抛错退出。安装之前,先想清楚你的发行版版本和内核是否在Oracle的支持列表里。Oracle官方对Red Hat系、SUSE系的某些小版本支持比较明确;如果你的系统不在列表里,不代表不能装,但需要额外设置一个忽略校验的环境变量,同时你要自己承担可能出现的兼容性问题。

另外一个值得提前决策的事情是:用图形界面安装,还是用静默模式安装?

服务器环境通常没有显示器,你可能也不方便配置X11转发,那么静默模式就是最理想的选择。静默模式通过响应文件(response file)把安装参数一次性喂给安装程序,不需要任何人机交互,跑完即可。虽然少了图形界面的直观感,但好处也非常明显——可脚本化、可重复执行、不会因为多点了某个按钮导致配置不一致。我在后来的某跨平台系统部署中,全部采用静默安装方式,同一个响应文件改几个路径参数就能复用到多台服务器,效率非常高。

安装之前还需要确认:你的磁盘空间余量是否足够,/tmp目录有没有单独分区且空间够用。Oracle安装包解压之后容易出现/tmp空间不足的情况。如果你的/tmp是独立分区且容量偏小,建议用df -h /tmp看余量,不够的话去/etc/fstab里临时挂载一个更大的分区,或者至少清理干净没用的垃圾文件。

Oracle安装本质上是在Linux系统里创建一个独立运行的“数据库王国”。它有自己的操作系统用户,有自己的环境变量体系,有专门的数据文件目录结构。你在安装中做的所有事情,都是为了给这个“王国”划好地盘,然后把它安顿进去。

2. 安装前的服务器环境准备

这一步几乎是整个安装过程中耗时最长、也最容易出状况的部分。很多安装失败并不是Oracle本身的问题,而是系统环境不满足最低要求或者参数未调整到位。下面挨个说。

2.1 操作系统与内核参数调优

建议在一台干净的系统上开始操作。我实际用得最多的是Red Hat Enterprise Linux 7或8,以及对应的兼容发行版。安装之前,先检查系统版本和内核:

cat /etc/redhat-release uname -r

如果发行版版本太低,比如还是RHEL 6,跑新版本Oracle可能会遇到glibc版本过旧的问题,在安装阶段就直接被拦截。

接下来是内核参数的调整。Oracle对共享内存、信号量、进程数、文件句柄数都有明确要求。这些参数涉及系统全局资源,需要在/etc/sysctl.conf中设置。

典型的配置大致如下:

fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 1073741824 kernel.shmmax = 4398046511104 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.shmmax是单个共享内存段的最大字节数,Oracle的SGA就建立在共享内存上;如果这个值设得太小,SGA无法一次分配到足够空间,数据库实例启动时会报错。kernel.sem四个值依次表示信号量组上限、系统范围信号量数上限、每个信号量的操作数上限、信号量组数上限,Oracle的各个后台进程之间大量使用信号量做同步。net.ipv4.ip_local_port_range控制对外连接的本地端口范围,客户端连接数多、数据库向外建立数据库链接时,端口范围太窄会导致无法分配新端口。

修改之后用sysctl -p让配置立即生效:

sysctl -p

另外,/etc/security/limits.conf里面要为Oracle用户设置资源限制。Oracle官方推荐将nofile(文件描述符)、nproc(用户进程数)、stack(栈大小)都适当调高:

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

直接在limits.conf里写死* soft nofile 65536这种全局配置看起来省事,但可能影响到其他应用,我建议按用户精确设置。另外还要打开PAM模块对limits的生效支持,确认/etc/pam.d/login和/etc/pam.d/sshd中包含pam_limits.so的调用,否则SSH登录时limit不生效。

内核参数选型上,我踩过一个比较麻烦的坑:某次把kernel.shmall设成默认未调整,Oracle的ASM实例在启动时报ORA-27140共享内存相关错误,后来排查出就是共享内存页数不够。所以建议即使是测试环境,也不要跳过内核参数调整这一步。

2.2 依赖包检查和安装

Oracle安装程序会在预检阶段检查一系列系统依赖包和库文件。如果缺少,通常可以在日志中看到提示,但更稳妥的做法是提前装齐。对于RHEL 7系,常见依赖包括:

binutils compat-libcap1 compat-libstdc++ gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXext libXtst libX11 libXau libXi make openmotif sysstat unixODBC unixODBC-devel

安装命令可以直接写成一长串:

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

如果你的发行版比较精简,可能还会缺失libnsl这类老库。新版本Oracle某些组件仍然依赖它,我遇到过在最小化安装环境里缺libnsl.so.1导致安装程序直接报“无法加载共享库”的情况,补上即可。

对于版本8或更高版本,依赖包可能略有变化,比如compat-libstdc++在较新系统上不一定存在,需要确认它是否仍在支持列表中。如果某个包装不上,检查一下已经安装的包版本,有时候是版本过新而不是缺包,那就可以考虑跳过或者用兼容模式。

2.3 用户、目录和权限规划

Oracle不允许直接用root用户运行安装程序,因为数据库进程需要普通用户权限来保证运行安全。需要创建一个专门的用户和用户组。

我习惯一次性创建两个组,一个用于安装(oinstall),一个用于数据库管理员(dba),这样后续把别的开发者加入dba组时,不需要重新授权OSDBA组对应的权限:

groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle

然后设置口令:

passwd oracle

再规划安装目录和数据文件目录。这里有一个重要原则:安装目录与数据文件目录最好分开。我推荐建以下基础目录结构:

mkdir -p /u01/app/oracle/product/19c/db_1 # Oracle软件目录 mkdir -p /u02/oradata # 数据文件目录 mkdir -p /u03/archive # 归档日志目录,若需要 chown -R oracle:oinstall /u01 /u02 /u03 chmod -R 775 /u01 /u02 /u03

如果不追求精细分工,最简单的方式是把Oracle软件也放在/u01/app/oracle下,数据目录单独用/u02。为什么推荐分开?因为软件目录和数据目录混在一起,做备份和使用LVM快照时会纠缠不清,而且将来磁盘扩容也会互相影响。物理上分开后,磁盘满了只扩对应的挂载点,逻辑清晰得多。

2.4 设置ORACLE用户的环境变量

安装之前,还需要给oracle用户配置环境变量。这一步极其关键,因为Oracle安装程序和后面的数据库工具都会读取这些变量。切换到oracle用户后编辑~/.bash_profile:

export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/19c/db_1 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

这里重点说两个很多人容易忽视的变量。ORACLE_SID是实例名,后续创建数据库时默认实例也靠它识别,如果环境变量里不写,后面sqlplus登录时每次都得手动export ORACLE_SID=xxx,容易搞混。NLS_LANG控制客户端的字符集和语言;如果服务器端数据库字符集是AL32UTF8,客户端NLS_LANG不匹配,可能出现中文乱码。建议统一设为AMERICAN_AMERICA.AL32UTF8。

环境变量设置好后,执行source ~/.bash_profile使其生效,然后echo $ORACLE_HOME检查是否输出正确路径。这里也常见到一种问题:用户明明设置了ORACLE_HOME,但运行sqlplus时报“command not found”,通常是因为PATH里没有加入$ORACLE_HOME/bin或者环境变量没有真正生效。

一个实用的技巧是:在/home/oracle/.bashrc里一并加上这些导出语句,因为非交互式Shell(比如通过SSH执行远程命令)默认读的是.bashrc不是.bash_profile。我在公司用自动化脚本批量安装时,就遇到过远程执行命令时环境变量丢失的情况,后来统一在.bashrc里补齐才解决。

3. 安装包解压与runInstaller执行

环境准备完成后,终于可以接触到安装包。这一节重点讲解压技巧、静默安装响应文件的写法,以及安装过程中日志怎么看。很多人卡在这一步,明明命令没报错,但安装就是失败了,原因往往出在解压参数、响应文件格式或者没有以正确用户身份启动安装程序。

3.1 解压安装包的正确姿势

Oracle的安装包通常是一个大型zip压缩包,文件名可能是LINUX.X64_193000_db_home.zip这类。不建议直接unzip到任意目录,而是把它解压到目标ORACLE_HOME路径下。为什么这么做?因为Oracle的安装程序会检测当前所在的目录是否为有效的ORACLE_HOME,如果目录不对,安装过程可能产生多余的子目录,导致ORACLE_HOME路径混乱。

我推荐的操作顺序是:

mkdir -p /u01/app/oracle/product/19c/db_1 cd /u01/app/oracle/product/19c/db_1 unzip -q /path/to/LINUX.X64_193000_db_home.zip chown -R oracle:oinstall /u01/app/oracle/product/19c/db_1

注意unzip -q静默解压,避免刷屏。解压之后确认runInstaller文件存在且赋予可执行权限,然后切换到oracle用户:

su - oracle cd /u01/app/oracle/product/19c/db_1

从这里开始,后续的安装操作全部以oracle用户身份执行,绝对不要再返回到root下跑安装程序。

3.2 响应文件的配置与静默安装

Oracle提供了三种安装方式:图形交互(runInstaller直接启动)、静默安装(通过-silent参数配合响应文件)、以及模板安装(-responseFile配合自定义模板)。在无图形界面的服务器上,静默安装是最实用的。安装前需要准备一个响应文件,响应文件里有完整的安装配置参数。

可以在解压目录中找到模板文件,比如db_install.rsp.tmpl,一般位于response/子目录下。复制一份出来编辑:

cp /u01/app/oracle/product/19c/db_1/response/db_install.rsp.tmpl /home/oracle/db_install.rsp

我平时会先grep -v '^#'过滤一下注释,只保留实际配置行,这样看起来清爽,也方便检查参数是否写对。核心参数包括:

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=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 oracle.install.db.operatingMode=INSTALL_DB_SWONLY oracle.install.db.installEdition=EE DECLINE_SECURITY_UPDATES=true

这里解释几个需要注意的选项。oracle.install.option=INSTALL_DB_SWONLY表示只安装数据库软件,不创建数据库实例;创建实例的步骤后续用dbca单独完成。这样分步做的好处是安装过程更清晰,出问题时也容易定位。DECLINE_SECURITY_UPDATES=true是跳过Oracle官方安全更新配置的选项,如果不设置,安装程序可能会尝试从网络获取配置而卡住。安装选项oracle.install.db.OperatingMode在某些版本中不存在,如果响应文件里写了,安装程序可能报无法识别参数的警告。我建议以实际模板文件里的参数名为准,不要凭空添加。

静默安装命令:

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

-ignorePrereqFailure的意思是忽略OS预检查失败的警告项。这个参数能让你跳过一些小问题继续安装,但不要滥用。只有在你明确知道缺失项不影响安装的时候才加它;如果是依赖包缺失导致关键库文件不存在,跳过检查后安装可能在中途报错。

安装过程会输出日志。在日志中寻找关键信息,比如:

Successfully Setup Software

看到这个字样,软件安装阶段基本就宣告完成了。此时终端会提示需要用root权限执行两个脚本:oraInventory目录下的orainstRoot.sh和ORACLE_HOME下的root.sh。切换为root用户执行:

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

这两个脚本的作用是创建Inventory目录的权限配置,以及修改一些操作系统级别的文件属性和链接设置。如果跳过不执行,后续dbca或sqlplus可能遇到各种权限问题。

3.3 安装常见错误和应对

静默安装并不是百分百一次成功。我遇到过的典型错误有以下几类,在这里提前说,帮你省点排查时间。

ins_ctx.mk报错是Oracle 19c安装时比较有名的“坑”。错误描述通常是Error in invoking target 'install' of makefile '/u01/app/oracle/product/19c/db_1/ctx/lib/ins_ctx.mk'。这个问题多半是缺少系统依赖包libstdc++-devel或者gcc版本不一致。解决办法是先补依赖包,然后重新安装;如果不方便重新安装整个软件,有一种临时方案是编辑对应的Makefile注释掉出错的行,但我不推荐这招,治标不治本,容易留下隐患。

另一个常见错误是ORA-27154或者semget相关失败。这通常是内核参数kernel.sem设置过小导致的,检查/proc/sys/kernel/sem实际值是否与配置一致。修改sysctl.conf之后注意执行sysctl -p,并且确认oracle用户重新登录后生效。

还有一种是提示“Swap space不足”。Oracle要求至少2GB交换空间,或者内存的两倍(取较小值)。如果你的服务器内存较大但没配swap,安装程序可能在预检阶段直接退出。临时解决办法是创建swap文件:

fallocate -l 4G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile

但这只能撑过安装,生产环境还是建议在系统层面规划好合理的swap分区。

4. 监听器配置与数据库实例创建

软件安装完成并不代表数据库就能用了,你还需要配置网络监听器并创建数据库实例。如果没有监听器,客户端根本找不到数据库服务;如果没有实例,数据库等于空壳。这一节详细介绍监听器配置和dbca建库流程。

4.1 监听器配置

监听器是Oracle数据库对外提供服务的“门卫”,客户端连接数据库的第一步就是先连上监听器。配置监听器可以使用是netca命令,它也有静默模式:

$ORACLE_HOME/bin/netca -silent -responsefile $ORACLE_HOME/assistants/netca/netca.rsp

如果你不想用响应文件,也可以在图形界面下直接执行netca,它会弹出配置向导。静默模式执行的逻辑是:读取默认配置,在$ORACLE_HOME/network/admin下生成listener.ora和sqlnet.ora。

监听器的默认端口是1521。如果你的服务器上1521端口被其他进程占用,需要修改监听端口。比较稳妥的做法是安装完成后手动编辑listener.ora,修改端口号,例如改成1522:

LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname)(PORT = 1522)) ) )

修改后需要重启监听器才能生效:

lsnrctl stop lsnrctl start

我遇到过一种情况:lsnrctl start启动成功,但是客户端连接依然失败。排查后发现是防火墙没放行1521端口。在RHEL系上执行:

firewall-cmd --permanent --add-port=1521/tcp firewall-cmd --reload

或者直接临时关闭防火墙测试(不建议用于生产环境)。这种“看起来正常但连不上”的问题,网络层面的排查永远是优先事项。

4.2 使用dbca创建数据库实例

创建数据库实例通常用Oracle的数据库配置助手dbca。同样支持静默模式。这里我直接给一个典型的静默建库命令:

dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbName orcl \ -sid orcl \ -sysPassword Oracle12345 \ -systemPassword Oracle12345 \ -emConfiguration NONE \ -memoryPercentage 40 \ -datafileDestination /u02/oradata \ -recoveryAreaDestination /u03/archive \ -characterSet AL32UTF8 \ -totalMemory 4096

逐项说明参数含义:templateName指定建库模板,General_Purpose.dbc适合通用场景;gdbName和sid是全局数据库名和实例名;sysPassword、systemPassword是超级管理员口令,注意生产环境一定要用强密码;emConfiguration NONE表示不配置企业管理器,节省资源;memoryPercentage 40表示使用物理内存的40%作为Oracle内存目标;datafileDestination指定数据文件位置,对应我之前的/u02/oradata;recoveryAreaDestination是快速恢复区路径,对应/u03/archive;characterSet建议直接选AL32UTF8,避免后续出现中文乱码等字符集棘手的转换问题。

totalMemory和memoryPercentage同时指定会有冲突,实际以totalMemory为准。如果服务器内存较小,比如8GB,建议把totalMemory设为2048或3072;如果内存大,可以给数据库更多内存,但不要超过物理内存的60%,否则操作系统本身要用的内存会被挤占。我在某次项目中加载超过2万条业务数据时,就是因为SGA给得太小而频繁触发内存排序到磁盘,性能一落千丈;后来重建实例加大内存参数,问题才缓解。

执行dbca之后,终端会打出一长串建库日志。看到类似:

Database creation complete. Look at the log file...

说明建库成功。此时可以测试一下能否正常登录:

sqlplus / as sysdba SQL> select status from v$instance;

或者用监听器测试:

lsnrctl status

如果看到服务orcl已经注册到监听器,那就说明整个安装流程已经完成。

4.3 初始化参数与建库后快速调优

数据库建好后,有一些初始化参数建议早点调整。最基础的是processes参数,默认值通常是几百,对于并发连接数较高的应用来说不够。查看当前值:

show parameter processes;

如果连接数会超过默认值,可以调整:

alter system set processes=800 scope=spfile;

注意修改processes参数后必须重启数据库才生效,因为进程数上限在实例启动时就已经分配了。还要确认open_cursors、sessions等参数是否与应用规模匹配。新手容易忽略的一个参数是db_block_size,它通常在建库时定型,改起来非常麻烦;如果建库时没手动指定,一般用默认8KB,对于绝大多数业务系统已经足够。

另一个需要尽早做的是开启归档模式。如果你不希望数据库在出现故障时丢失数据,归档日志是保证可恢复性的核心手段。开启方法:

shutdown immediate; startup mount; alter database archivelog; alter database open;

归档日志目录在之前的建库参数recoveryAreaDestination中配置。如果生产环境有DBA或者运维制度要求,这一步几乎是必须项。

5. 安装验证与常见问题排查实录

到这里,Oracle数据库已经能跑起来了,但“能跑”离“可靠运行”还有一段距离。这一节整理我实际运维中遇到的高频问题和排查手段,有的适合刚装完的验证阶段,有的适合上线后稳定运行阶段。

5.1 安装成功的验证清单

我建议不要只看到sqlplus / as sysdba能登录就算成功,按下面的清单逐项确认一遍,心里才有底。

第一项,检查Oracle进程是否完整。正常情况下,实例启动后会有pmon、smon、dbwr、lgwr、ckpt等后台进程:

ps -ef | grep ora_ | grep -v grep

如果只有一两个进程,说明实例可能没有完全启动,需要查看告警日志。

第二项,查看告警日志有没有异常。告警日志路径通常在$ORACLE_BASE/diag/rdbms/orcl/orcl/trace/alert_orcl.log。执行:

tail -50 $ORACLE_BASE/diag/rdbms/orcl/orcl/trace/alert_orcl.log

重点关注ORA-错误。刚安装完如果日志里出现ORA-00600这类内部错误,多半是版本兼容性问题,需要重点排查。

第三项,验证监听器端口和数据库服务注册情况。执行lsnrctl status,应能看到实例名称和端口处于READY状态。如果服务没有注册,可能是实例参数local_listener没有正确设置,或者监听器启动时间早于数据库实例启动时间,导致服务没有动态注册。这种情况下最简单粗暴的办法是重启监听器;或者执行一下alter system register;让实例立即向监听器注册。

第四项,使用远程客户端测试连接。如果服务器开了防火墙,本地连接成功但远程连接失败的情况非常常见。测试命令:

sqlplus system/密码@服务器IP:1521/orcl

如果这里失败,排查顺序是:先确认监听器状态,再确认防火墙,再从客户端本机用telnet 服务器IP 1521测试端口通不通。

5.2 典型问题排查速查实录

问题一:ORA-12514: TNS listener does not currently know of service。这个报错很典型,表示监听器不知道所请求的服务名。排查思路是:先lsnrctl services看监听器实际注册了哪些服务,如果服务名不是预期的 orcl,检查客户端的连接串是不是写错了服务名;如果监听器里没有任何服务,说明实例没有动态注册成功,执行alter system register;手动注册。

问题二:ORA-01034: ORACLE not available/ORA-27101: shared memory realm does not exist。看到这两个错误几乎可以断定实例没有启动,或者$ORACLE_SID环境变量和实际实例名不一致。先echo $ORACLE_SID确认环境变量,再用sqlplus / as sysdba执行startup。如果启动时报ORA-27102: out of memory,那是内核参数kernel.shmall或kernel.shmmax设置过小,回到前面的内核参数章节重新调整。

问题三:安装完成后lsnrctl命令找不到。这多半是PATH环境变量没生效。检查$ORACLE_HOME/bin是否在PATH中。特别注意:用su - oracle与su oracle登录时所加载的环境变量文件不同,前者加载完整登录环境,后者保留上一用户的部分设置,容易导致环境变量不完整。排查时用which lsnrctl即可快速定位。

问题四:中文乱码。主要原因是字符集不匹配。数据库字符集在建库时定义,客户端字符集由NLS_LANG定义。如果数据库使用ZHS16GBK而客户端是AL32UTF8,或者反过来,都容易出现乱码。确保两端统一,或者统一指定为AMERICAN_AMERICA.AL32UTF8。如果实在需要在不同字符集之间转换,数据导出导入时也要指定NLS_LANG。

问题五:启动数据库时出现ORA-00845: MEMORY_TARGET not supported on this system。这个错误和/dev/shm大小有关。Oracle的内存自动管理依赖共享内存文件系统,默认/dev/shm只有物理内存的一半甚至更少。解决办法是重新挂载更大的tmpfs:

mount -o remount,size=8G /dev/shm

同时写入/etc/fstab保证重启后依然生效。

5.3 日常运维的小避坑经验

安装完成只是数据库生命周期的起点。按照我的经验,有几个操作习惯值得从一开始就养成,能避开很多坑。

备份配置信息和关键文件。$ORACLE_HOME/network/admin下的listener.ora、tnsnames.ora、sqlnet.ora,以及$ORACLE_BASE/diag下的告警日志,都是排障时的第一手资料。建议把这些文件纳入配置管理,任何变更都先备份再操作。

记录当前的内存参数和SGA/PGA分配情况。用以下命令随时确认:

show sga; show parameter pga_aggregate_target; show parameter memory_target;

如果服务器物理内存发生变化,需要同步调整内存参数,否则数据库可能出现性能问题。

日志文件的清理也很重要。数据库运行时间长了,各目录下会产生大量trace文件和日志文件,尤其是$ORACLE_BASE/diag目录。建议定期清理或配置自动清理策略,防止日志目录把/u01占满。我遇到过某台测试服务器因为归档日志和trace文件疯长,磁盘被写满,数据库直接挂掉的情况。这个问题在测试环境最容易发生,因为没人天天盯着,一旦/u01满了,整个数据库目录会有不可预估的损坏风险。

还有一点:除非有充分理由,否则不要在Oracle服务器上随意运行第三方安全扫描或者卸载系统组件。这些操作可能意外删掉Oracle运行所依赖的系统库文件,导致下次启动时疯报错。如果需要做安全加固,先复制一台同样的测试环境验证兼容性,再在正式环境操作。

6. 扩展:从单机到主备的升级认识

如果你装好了单机版Oracle,并且准备把它用在更关键的场景,不妨提前了解一点主备架构的内容。比如最简单的Data Guard物理备库方案,就是让一个备用数据库通过归档日志保持与主库的同步。这个方向要求你在安装时已经做好了归档配置,所以我把这个扩展感想放在最后说。

在使用Data Guard之前,主库必须具备三个条件:开启归档模式、设置db_unique_name、配置好网络服务名。备库端则需要一份主库的数据文件备份或者用RMAN恢复出来的数据文件。对于刚入门的人来说,直接上手Data Guard可能有点门槛,但理解它的核心依赖是件好事:没有归档日志,一切增量同步都是空谈。

很多团队测试环境装完Oracle就直接进入开发流程,归档模式根本没开,等真要做备份恢复或者准备上备库时,才发现一切都得重来。因此我每次装完都会顺手把归档开启,哪怕测试环境磁盘不大也尽量给个几GB的恢复区。这个习惯在后续工作中帮我省了很多返工时间。

如果你平时也在Linux环境下装Oracle,欢迎在评论区交流你遇到的报错信息和你总结的奇葩问题。我虽然没有在文章里贴出每一步的截图,但每个关键步骤我都尽量解释了背后的原因和可能出现的问题。希望这份梳理对你的安装过程有帮助,也祝你一次跑通,少走弯路。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进