装数据库这事,说难不难,说简单也真容易翻车。这套环境到我手里的时候,机器上已经放好了 Linux10 的系统镜像和 Oracle 26ai 的安装包,版本号看起来挺新,我第一反应是去查一下兼容性文档,确认一下这套组合的安装路径和之前的 23ai 有没有本质区别。结果一查才发现,26ai 不只是版本号往上跳了一级——整个 AI 功能从“可选模块”变成了“核心组件”,安装流程、初始化参数、依赖关系都有不少变化。这篇就把我从裸机准备、依赖配置、静默安装到实例跑通的完整过程写出来,包括踩过的坑和绕过的路,给需要在这套环境上做部署的同学一份能直接抄的作业。
1. 方案审视:为什么是这个组合、需要什么基础
1.1 从 23ai 到 26ai:Oracle 的 AI 化演进路径
Oracle 的 AI 化推进节奏其实从 23ai 就很明显了,当时主打的是 AI Vector Search 和 JSON 关系二元性视图,把数据库从“存数据的地方”往“跑模型的地方”推了一大步。到了 26ai,这一代的核心变化在于 AI 能力不再是锦上添花的插件,而是渗透到了安装器、实例初始化、优化器以及日常运维的各个环节。比如安装介质里直接内置了 vector 索引的模板配置,DBCA 建库时会出现专门的 AI Workload 类型选项,初始化参数里也多了几个和向量内存池、模型推理进程相关的默认值。
这给部署带来的直接影响是:你不能再像以前装 11g、12c 那样“装完就行”了,必须在安装阶段就想清楚这个实例到底要承担什么角色——是纯 OLTP、分析型为主,还是要把 AI Vector Search 作为核心卖点。选择不同,内存分配、数据文件布局、PGA 和 SGA 的初始比例都会有差异。我在这次部署前专门花了一晚上把 26ai 的 Release Notes 和安装指南里关于“engineered for AI”的部分过了一遍,强烈建议你也不要跳过这一步。
另外特别要注意的是许可证和功能开关。26ai 和 23ai 一样,AI Vector Search 这类功能并不是默认全开的,部分特性需要显式启用,部分则包含在标准版里。安装前跟业务方确认清楚实际要用的功能范围,能省掉后面不少配参数的功夫。
1.2 Linux10 环境评估与硬件配置核对
先看硬件,这是所有问题的基础。Oracle 官方建议的安装底线是 2 核 CPU、8GB 内存,但那是“能装”的底线,不是“能用”的底线。这台机器配的是 16 核、64GB 内存,SSD 阵列做数据盘,我评估下来跑 26ai 的 AI 工作负载是比较舒服的。如果你手上的机器内存低于 16GB,建议要么加内存,要么在安装时把 AI 相关的初始化参数调小,否则实例起来后极容易出现内存分配失败。
磁盘规划上,26ai 的安装包比 23ai 又大了一圈,解压后光安装介质就要 15GB 左右。加上数据库软件本体、数据文件、闪回区、重做日志,我给 /u01 划了 200GB,给 /opt 划了 50GB 用于 staging 目录。这里有个经验:staging 目录最好不要和 ORACLE_BASE 放在同一个文件系统上,因为安装过程会把介质文件循环读取,结束后还要手动清理,万一空间被占满,会影响数据库的正常运行。
操作系统层面,用cat /etc/os-release先确认一下发行版和内核版本。Linux10 的内核版本号看上去是在 6.x 的后续演进版本上,Oracle 官方兼容性矩阵里对内核版本有明确的最低要求。装之前我还跑了uname -a和df -h,确认主机名能正常解析——这一步看着基础,但主机名解析问题引发的安装失败案例我见过太多了。
1.3 安装路径决策:全新部署还是升级
如果机器上已经跑着 23ai,理论上可以走升级路径,官方提供了dbua升级工具和手工升级脚本两种方式。但我的建议是:除非有非常强的不停机诉求,否则新环境一律走全新安装,然后把旧库的数据用 expdp/impdp 或者 Data Guard 的方式迁移过去。理由很简单,26ai 对初始化参数的默认值改动很多,升级路径虽然能保留现有配置,但也可能把旧版本遗留的坑带到新版本,排查起来反而更麻烦。
这次部署因为是从零开始的干净环境,直接选择了全新安装。这也让后面的安装过程少了很多变数——没有旧的 ORACLE_HOME 干扰,没有残留的监听配置,所有东西都是白纸一张。我个人的经验是,能够在干净环境里装新版本,就别折腾升级,省下的时间足够你做两轮数据校验。
2. 环境准备:操作系统层面的前期工作
2.1 依赖包清单与内核参数配置
Oracle 安装对系统依赖包的要求从来都是“多而全”,26ai 也不例外。安装器虽然在预检查阶段会列出缺失的包,但提前装好能节省大量时间。我在 Linux10 上用 dnf 一次性装齐了主要依赖,这里贴一下常用清单:
dnf install -y binutils compat-libcap1 compat-libstdc++-33 \ gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel \ libX11-devel libXrender libXrender-devel libgcc libstdc++ \ libstdc++-devel libxcb make net-tools nfs-utils \ policycoreutils python3 python3-pip sysstat smartmontools注意两点。第一,compat-libstdc++-33 这种老包在较新的发行版里可能已经不在默认源里了,需要确认源是否包含兼容仓库。第二,26ai 的安装器对 python3 的版本有要求,建议装完确认一下python3 --version是否满足 3.9 以上。
内核参数这块,Oracle 官方在安装文档里给了标准的 sysctl 配置,我结合这台机器的内存规模做了一点调整。核心参数和说明如下:
# /etc/sysctl.conf 中追加 fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 1073741824 kernel.shmmax = 4398046511104 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 vm.max_map_count = 1048576 vm.dirty_ratio = 30 vm.dirty_background_ratio = 3kernel.shmmax 和 kernel.shmall 这两个参数决定共享内存的上限,26ai 的 SGA 默认分配策略比以前激进,特别是启用了 AI Vector 内存池之后,共享内存不足会直接导致实例启动失败。vm.max_map_count 也要特别注意,向量索引通常会产生大量内存映射段,这个值太小会报 ORA-27100 或相关的内存映射错误。
配置完记得sysctl -p使其生效,然后用ipcs -lm检查共享内存限制是否真的更新了。这一步虽然基础,但很多人容易忽略验证环节,结果到建库时才报错。
2.2 用户、目录与权限规划
Oracle 的安装规范是创建独立的操作系统用户,不允许用 root 直接装。这次我按标准分组方案来:
groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle目录规划上,Orale 的 OFA(Optimal Flexible Architecture)标准我还是继续沿用的,虽然看起来有点老派,但它最大的好处是路径规则统一,后续做备份脚本、监控脚本都方便:
mkdir -p /u01/app/oracle mkdir -p /u01/app/oraInventory chown -R oracle:oinstall /u01/app/oracle chown -R oracle:oinstall /u01/app/oraInventory chmod -R 775 /u01/app除了这几个目录,还有两个地方容易忽略。一个是/tmp空间,安装器解压和运行临时文件都会往这里写,建议至少预留 2GB 以上;另一个是/dev/shm,这是 Oracle 实例使用共享内存的重要载体,默认大小通常只有物理内存的一半,如果机器内存是 64GB,/dev/shm默认只有 32GB,对 26ai 这种内存大户来说可能不够。修改方式是在/etc/fstab里给/dev/shm加挂载参数,把大小调整为物理内存的 80% 左右:
tmpfs /dev/shm tmpfs defaults,size=51g 0 0改完之后mount -o remount /dev/shm生效并用df -h /dev/shm验证。
2.3 Oracle 环境变量与 umask 设置
oracle 用户的~/.bash_profile是安装前必配的一项。我的配置如下:
export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=/u01/app/oracle/product/26ai/dbhome_1 export ORACLE_SID=orcl26 export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 umask 022这里有一个非常容易踩的坑:umask 没有设置成 022 的话,安装过程中生成的配置文件权限会很奇怪,导致后续sqlplus或者监听启动时没有权限读取文件。另一个坑是 ORACLE_HOME 路径里的版本号别写错,这一次安装器的默认路径是/u01/app/oracle/product/26ai/dbhome_1,如果你之前装过 23ai,习惯了写23ai这个路径,这里很容易惯性写错。
环境变量配完之后,记得source ~/.bash_profile生效,然后用env | grep ORACLE确认变量都正确加载了。
3. 核心实操:Oracle 26ai 安装全流程
3.1 安装介质获取与校验
企业内网环境一般会有官方的软件分发渠道,拿到的是 ZIP 压缩包。26ai 的安装包拆成了两个 ZIP,一定要全部下载完整再解压,否则安装到一半会报文件缺失。我在解压前先做了 SHA-256 校验:
sha256sum V26ai_Linux_x64_1of2.zip V26ai_Linux_x64_2of2.zip把校验结果和官网给的 checksum 文件比对一致后,再按顺序解压到一个干净的 staging 目录:
mkdir -p /opt/oracle_stage unzip -q V26ai_Linux_x64_1of2.zip -d /opt/oracle_stage unzip -q V26ai_Linux_x64_2of2.zip -d /opt/oracle_stage解压完成后,确认/opt/oracle_stage/Database目录下有runInstaller这个可执行文件。这里提醒一句:staging 目录的所有者建议改成 oracle,否则安装器在读取文件时可能会因为权限问题卡住。用chown -R oracle:oinstall /opt/oracle_stage一把搞定。
3.2 静默安装 vs 图形安装:参数模板与选择
图形安装界面在本地有显示器的环境里用起来最直观,但如果是远程服务器,配置 X11 转发或者 VNC 都是一堆额外的事。考虑到生产环境通常没有图形界面,也为了后续批量部署可以复用配置,我这次直接用静默安装。
26ai 的静默安装依然是经典的 response file 方式,安装介质里有模板文件。先把模板复制出来再改:
cp /opt/oracle_stage/Database/response/install_oracle26ai.rsp /home/oracle/install26ai.rsp chown oracle:oinstall /home/oracle/install26ai.rsp关键参数我按下述调整:
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v26_0 oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/app/oraInventory ORACLE_BASE=/u01/app/oracle oracle.install.db.ORACLE_HOME=/u01/app/oracle/product/26ai/dbhome_1 oracle.install.db.ORACLE_HOME_NAME=OraDB26Home1 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.OSRACDBA_GROUP=dba oracle.install.db.rootconfig.executeRootScript=false oracle.install.db.CONFIG_NAME=orcl26 SECURITY_UPDATES_VIA_MYORACLESUPPORT=false DECLINE_SECURITY_UPDATES=true注意InstallEdition=EE,26ai 的企业版才包含完整的 AI Vector 和 SELECT AI 功能,标准版虽然能装,但后续有些特性会被禁用。rootconfig.executeRootScript先设为 false,原因是安装器会在最后阶段提示需要 root 权限执行脚本,我们把它放到安装完成后手动执行。
准备工作做好后,切换到 oracle 用户执行安装:
su - oracle cd /opt/oracle_stage/Database ./runInstaller -silent -responseFile /home/oracle/install26ai.rsp安装过程中日志输出到/tmp/oraInstall2026-*.log,如果中途想确认进度,可以开另一个终端 tail 这个日志。安装成功后会提示“Successfully Setup Software”,然后让你用 root 执行两个脚本:
/u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/26ai/dbhome_1/root.sh这两个脚本分别初始化 inventory 目录和设置软件所有者权限,必须执行,否则后续启动会报权限错误。
3.3 监听配置与数据库实例创建
软件装完后,接下来就是配置监听和建库。监听用 netca 静默创建一个默认的LISTENER,端口标准是 1521:
netca -silent -responsefile /opt/oracle_stage/Database/response/netca.rsp如果你不想记这个命令,也可以直接用netca -silent -port 1521 -listenertype LISTENER -name LISTENER这种简化方式,只要版本支持就行。监听起来后用lsnrctl status确认状态,这一步能帮你排除端口被占用、主机名解析失败等问题。
建库部分我用的是 dbca 静默模式。26ai 的 dbca 在模板上增加了一个 AI Workload 的建库选项,模板文件在$ORACLE_HOME/assistants/dbca/templates下。我这次选择的是General_Purpose_for_AI.dbc模板,它会在建库时自动把向量内存池相关的初始化参数配好,省去手工调整的麻烦。
dbca -silent -createDatabase \ -templateName General_Purpose_for_AI.dbc \ -sid orcl26 \ -gdbName orcl26 \ -sysPassword YourSysPass123 \ -systemPassword YourSystemPass123 \ -datafileDestination /u01/app/oracle/oradata \ -storageType FS \ -characterSet AL32UTF8 \ -memoryMgmtType AUTO_SGA \ -totalMemory 32768这里有几个参数要说明。-totalMemory 32768表示给实例分配 32GB 内存,这个值根据机器内存情况调整,一般建议不超过物理内存的 60%,要给操作系统和未来可能增加的实例留出余量。-memoryMgmtType AUTO_SGA启用自动共享内存管理,26ai 的向量内存池会在这个基础上自动扩展,不用手工指定具体的 pool 大小。
建库过程大概持续 20 到 40 分钟,取决于磁盘性能和模板复杂度。执行完后看到 “Database creation complete” 就说明库已经建好了,可以试着登录验证:
sqlplus / as sysdba SQL> select status from v$instance;3.4 AI 特性初始化与验证
实例起来后,验证 26ai 的核心特性是否可用。首先确认数据库版本和 AI 相关功能:
SELECT version FROM v$instance; -- 期望看到 26.0.x 版本信息 SELECT value FROM v$parameter WHERE name LIKE '%vector%';如果上面查到的 vector 相关参数没有值,需要手动开启:
ALTER SYSTEM SET vector_memory_size=4G SCOPE=SPFILE; ALTER SYSTEM SET enable_ai_vector_search=TRUE SCOPE=BOTH;vector_memory_size表示用于向量索引的内存池大小,我在这台 64GB 的机器上先给了 4GB,后续可以根据实际向量数据量再调大。
接下来做一个最简单的向量数据读写验证:
CREATE TABLE demo_vectors (id NUMBER, embedding VECTOR(3)); INSERT INTO demo_vectors VALUES (1, '[1.0, 2.0, 3.0]'); INSERT INTO demo_vectors VALUES (2, '[4.0, 5.0, 6.0]'); SELECT id, embedding FROM demo_vectors;再验证一下向量距离计算的语法是否正常工作:
SELECT id, vector_distance(embedding, '[1.0, 2.0, 3.0]', EUCLIDEAN) AS dist FROM demo_vectors ORDER BY dist;能正确返回距离值,就说明 26ai 的向量存储与检索链路是通的。SELECT AI 这类自然语言转 SQL 的功能还需要额外配置 LLM 服务的连接信息,我在这次部署中暂时没有接入外部大模型,如果你确实要用,建议按官方文档把模型服务和数据库之间的网络安全策略梳理清楚再启用。
4. 问题排查与调试实录
4.1 内存与共享内存配置问题
这次安装过程中遇到的最典型问题是共享内存配置不当。第一次尝试启动实例时报了 ORA-00845: MEMORY_TARGET not supported on this system,原因就是/dev/shm太小。这个问题在 26ai 上更容易触发,因为默认的 MEMORY_TARGET 比 23ai 更激进。
解决方式就是前面说的,修改/etc/fstab中的/dev/shm挂载大小:
tmpfs /dev/shm tmpfs defaults,size=51g 0 0 mount -o remount /dev/shm df -h /dev/shm改完之后重启数据库进程。这里有个细节:改/dev/shm只对之后启动的进程生效,所以你必须在重启数据库实例之前完成修改,否则还是报同样的错误。
另一个相关的报错是 ORA-27102: out of memory,这通常是 kernel.shmmax 设得太小,把/etc/sysctl.conf里的kernel.shmmax改成比 SGA 目标值大即可。我一般习惯把 shmmax 设置为物理内存的一半以上,比如 64GB 的机器就设为 4398046511104(约 4TB),这个值设置得大一些不会消耗实际内存,只是上限。
4.2 图形界面无法启动的替代方案
最开始我尝试过在本地工作站上用 X11 转发跑图形安装器,结果在 Linux10 上遇到了 GTK 库版本不兼容的问题,界面起不来。这也是我转而采用静默安装的直接原因。如果你也执着于图形界面,可以试试 VNC 到服务器上操作,但要注意两点:一是 VNC 会话里跑的安装器有时候颜色深度不对,界面显示异常;二是必须全程以 oracle 用户身份操作,不要在 VNC 里用 root 启动安装器再切换用户。
如果只是想快速解决,我的建议就是老老实实用 response file 做静默安装。静默安装的日志输出其实非常详细,安装到哪一步、缺什么包、哪里权限不对,都会明确写到日志里,排查起来并不比图形界面慢。
4.3 数据库启动失败的日志分析
有次执行startup时数据库一直停留在 mounted 状态,无法 open。这种问题第一反应是查 alert log,位置在:
/u01/app/oracle/diag/rdbms/orcl26/orcl26/trace/alert_orcl26.log这次查到的原因是系统表空间自动扩展失败,数据文件所在的文件系统剩余空间不足 500MB。Oracle 在 open 阶段需要为系统表空间分配额外的段,空间不够就卡住了。清理了一部分日志文件后问题解决。
另外要留意 listener 日志,位置在:
/u01/app/oracle/diag/tnslsnr/<主机名>/listener/alert/log.xml如果客户端连接时报 ORA-12514: TNS listener does not currently know of service,多半是 tnsnames.ora 里的服务名和实际注册的服务名不一致。可以用lsnrctl services查看监听实际注册的服务名,再回去比对客户端的连接串,十有八九是大小写或多了.world域名后缀导致的。
4.4 常见问题速查表
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| ORA-00845 启动失败 | /dev/shm 空间不足 | 修改 /etc/fstab 调大 tmpfs 挂载大小 |
| ORA-27102 内存不足 | kernel.shmmax 设置偏小 | 增大 kernel.shmmax 并 sysctl -p |
| 安装器提示缺依赖包 | 系统源缺少 compat 包 | 安装全部官方依赖清单,启用兼容仓库 |
| 远程界面起不来 | X11 转发或 GTK 版本问题 | 改用静默安装,日志排查更快 |
| ORA-12514 连接失败 | 服务名不匹配 | lsnrctl services 核对真实服务名 |
| 向量表创建报无权限 | AI Vector 功能未启用 | ALTER SYSTEM SET enable_ai_vector_search=TRUE |
| 数据库 open 卡住 | 数据文件空间不足 | 检查文件系统剩余空间,扩大或清理文件 |
5. 安装后的优化与经验总结
5.1 性能参数调整建议
实例建好之后,我习惯先跑一周基础监控再动参数。26ai 的内存管理虽然宣称全自动,但 AI 工作负载的场景下有几个参数值得手工关注。
vector_memory_size是最重要的一个。如果你打算把向量索引作为核心业务使用,建议根据向量表的数据量算一下:假设一张表有 100 万行、每行 128 维 float 向量,索引占用的内存大约在几百 MB 到 2GB 之间。公式不好一概而论,我的经验是先给 4GB,跑几个典型的 AI 查询看命中率和响应时间,再决定加还是减。
SGA 内部的shared_pool_size和db_cache_size在 26ai 里依然建议使用自动管理,但pga_aggregate_limit要注意设一个明确的上限,防止并行查询或 AI 批处理任务把内存吃穿。我在这次部署里设置pga_aggregate_limit=8G,配合 32GB 的 SGA,整体内存占用稳定在 40GB 左右,给操作系统留了足够的缓冲。
5.2 备份策略与安全加固
新库上线,第一件事是确认备份方案。我用的是最简单的 RMAN 本地备份,先做一次全备验证链路是否通:
rman target / RMAN> backup database plus archivelog;如果后续要接远程容灾,建议配置 Data Guard,26ai 的 Data Guard 在 AI Vector 数据的同步上做得比较完善,不需要额外手工处理向量表。备份策略上,每天增量、每周全备的节奏对于大多数场景都够用。
安全加固方面,几个基础动作别偷懒:远程连接账号设置强密码策略;listener.ora里加ADR_BASE和访问控制列表,限制只有业务网段能连 1521 端口;清理安装过程中遗留的默认密码和示例用户。26ai 安装时会自动创建一些演示账号,如果不需要,直接锁掉或者删掉。
5.3 个人实操心得
这次部署最大的感受是,26ai 已经不是“传统数据库加个 AI 插件”这么简单了,它从安装理念、模板设计到参数默认值都在向 AI 优先的方向倾斜。对于 DBA 来说,这意味着你需要了解向量索引怎么组织、内存池怎么划分、模型服务的对接怎么加密,这些在未来两三年内会成为 Oracle 数据库运维的常态技能。
如果只让我说一条经验,那就是别跳过安装前的环境检查。Linux10 搭配 26ai 的组合虽然顺利跑通了,但中途那次/dev/shm的问题就是典型的“环境没准备好就急着装”的代价。把内核参数、文件系统、用户权限这些基础打牢,剩下的安装过程其实只是按部就班。
最后再分享一个小技巧:安装日志别急着删。/tmp/oraInstall2026-*.log和 alert log 在数据库运行后遇到奇怪问题时,往往是定位历史变更的唯一线索,保留至少一个季度再清理,排查问题时你会感谢自己当初留了这些日志。