尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Oracle 19c部署合规性指南:操作系统、存储与CDB架构三重契约

Oracle 19c部署合规性指南:操作系统、存储与CDB架构三重契约 1. 这不是“装个软件”那么简单Oracle 19c安装的本质是构建一个生产级数据库底座很多人点开“Oracle 19c安装教程”时心里想的是“下载、解压、双击setup.exe、一路下一步”结果卡在第3步——监听器启动失败第5步——数据库实例创建报错ORA-01034第7步——EM Express打不开。我带过十几支运维团队每年新入职的DBA里至少有三分之一在第一次独立部署19c时在Windows Server 2019或CentOS 7.9上折腾超过8小时。这不是他们能力不行而是Oracle 19c的安装从来就不是“安装软件”而是一次完整的数据库运行环境契约签署你承诺提供符合要求的内核参数、内存分配策略、文件系统权限、网络端口规划、用户组隔离机制Oracle才愿意把它的核心进程交给你托管。核心关键词“Oracle19c”背后实际捆绑着三重技术契约第一重是操作系统层契约——它要求Linux必须关闭透明大页THPWindows必须禁用快速启动和休眠第二重是存储层契约——它默认启用ASM自动存储管理作为推荐存储方案但绝大多数初学者直接用普通文件系统导致后续RMAN备份路径混乱、归档日志写入失败第三重是架构层契约——19c强制引入CDB/PDB容器化模型哪怕你只建一个数据库底层也已是多租户结构sysaux表空间膨胀、pdb$seed模板库异常、cdb$root与pdb之间服务名映射错误全由此引发。那些热搜词里“如何卸载oracle19c注册表”“oracle19c夸克网盘下载”恰恰暴露了大量用户把Oracle当成普通桌面软件对待——而真实场景中一次不规范的卸载会残留注册表项、服务名冲突、监听器端口占用、甚至导致后续版本无法共存。我见过最典型的案例某金融客户在测试机上反复安装/卸载19c达7次最终发现Windows服务列表里还挂着名为“OracleServiceORCL19C_7”的僵尸服务它不启动但占着1521端口新实例始终无法监听。所以这篇内容不叫“Oracle19c安装教程”它是一份19c部署合规性检查清单故障预判手册。它不教你怎么点下一步而是告诉你每一步操作背后Oracle在验证什么、拒绝什么、容忍什么边界它不承诺“10分钟装完”但能让你在点击“Finish”前就知道接下来30分钟会不会报错它不回避“sysaux占用率高”这种进阶问题因为那根本不是安装后才出现的——那是你在创建数据库时没为SYSAUX表空间指定足够初始大小、没关闭不必要的组件如XML DB、Spatial埋下的伏笔。适合谁适合刚接手Oracle运维的中级DBA适合需要交付Oracle环境的实施工程师也适合正在做技术选型、评估19c落地成本的架构师。如果你只是想临时跑个demo建议直接用Docker版Oracle Database 19c官方镜像本文内容对你而言过于厚重但如果你要把它放进生产系统哪怕只是开发测试环境这篇就是你该花2小时精读的部署宪法。2. 安装前的“三道安检门”为什么90%的失败源于跳过这一步Oracle 19c安装失败表面看是setup.exe报错深层原因90%出在安装前的环境校验环节。Oracle Universal InstallerOUI不是傻瓜式向导它内置了一套严格的“预检引擎”但这个引擎的错误提示极其晦涩——比如显示“PRVF-0001: Failed to check prerequisites”你根本不知道它具体卡在哪。我把它拆解成三道必须人工核查的“安检门”每一道都对应一个真实踩坑现场。2.1 操作系统层安检不只是版本号更是内核行为契约很多人查到“Oracle 19c支持CentOS 7.6”就以为装上CentOS 7.9就能跑。错。真正关键的是内核参数和系统服务状态。以CentOS为例必须执行以下四步硬性检查透明大页THP必须永久禁用Oracle官方文档明确警告“启用透明大页会导致严重性能下降和实例崩溃”。但很多云服务器默认开启。验证命令cat /sys/kernel/mm/transparent_hugepage/enabled正确输出应为always madvise [never]方括号内为当前生效项。若显示[always]需永久禁用编辑/etc/default/grub在GRUB_CMDLINE_LINUX行末尾添加transparent_hugepagenever然后执行grub2-mkconfig -o /boot/grub2/grub.cfg reboot。提示仅用echo never /sys/kernel/mm/transparent_hugepage/enabled是临时生效重启即失效这是新手最常犯的错误。swap空间配置必须合规Oracle要求swap空间 ≥ RAM的1.5倍RAM≤8GB时或≥16GBRAM8GB时。但更重要的是swap分区类型——必须是独立swap分区不能是swap文件。因为Oracle的内存管理机制如SGA锁定依赖swap分区的底层块设备特性。用fallocate创建的swap文件在19c安装过程中会被OUI拒绝报错PRVF-0418 : Failed to verify swap space。SELinux必须设为permissive模式即使你关闭了SELinuxsetenforce 0OUI仍可能因策略残留报错。正确做法是编辑/etc/selinux/config将SELINUXenforcing改为SELINUXpermissive并重启。permissive模式下SELinux仍记录日志但不拦截比完全关闭更利于后续排错。NTP服务必须运行且时间偏差10秒Oracle集群件即使单机也含部分集群组件对时间同步极其敏感。用ntpq -p检查NTP状态若显示*号未出现在任何server前说明未同步。必须执行systemctl start chronyd systemctl enable chronydCentOS 7或systemctl start ntpd systemctl enable ntpdCentOS 6。Windows平台同样严格必须关闭“快速启动”电源选项→选择电源按钮的功能→更改当前不可用的设置→取消勾选“启用快速启动”否则Oracle服务无法正常注册必须禁用“休眠”以管理员身份运行powercfg /h off否则安装后监听器服务启动失败。2.2 用户与权限安检不是“用Administrator登录就行”Oracle 19c强制要求使用独立的操作系统用户组而非直接用root或Administrator。这是安全基线也是后续升级、补丁安装的前提。Linux下必须创建两个组oinstall所有Oracle软件属主组和dba数据库管理员组。创建命令groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle关键细节oracle用户不能是root用户其家目录如/home/oracle必须有755权限且/tmp目录必须有1777权限chmod 1777 /tmp。OUI会校验/tmp的sticky bit缺失则报错PRVF-0001。Windows下必须创建本地用户如ora19c并将其加入Administrators和ORA_DBA组。注意ORA_DBA组是Oracle安装程序自动创建的但若之前装过旧版本该组可能残留旧SID需手动删除重建。验证方法以ora19c用户登录打开CMD执行sqlplus / as sysdba若提示ORA-01031: insufficient privileges说明ORA_DBA组权限未生效——此时需注销当前用户重新登录。注意很多教程说“用Administrator账户安装最省事”这是严重误导。用Administrator安装后所有Oracle进程监听器、数据库实例均以SYSTEM权限运行后续无法用普通DBA账号管理且违反等保三级“最小权限原则”。2.3 存储与网络安检端口、磁盘、DNS一个都不能少这道安检门最容易被忽略却导致最多“安装成功但无法连接”的假成功。端口冲突检查Oracle 19c默认监听1521端口但OUI还会尝试占用5500EM Express、1522备用监听、2030Oracle Wallet Manager。必须提前检查netstat -tuln | grep -E :(1521|5500|1522|2030)若有进程占用要么杀掉kill -9 PID要么在安装时自定义端口。特别提醒某些国产杀毒软件如360、腾讯电脑管家会劫持1521端口伪装成“Oracle服务”实际是恶意进程必须先卸载杀软再安装。磁盘空间检查不只是“剩余空间10GB”这么简单。Oracle 19c安装包解压后约8GB但安装过程会产生临时文件/tmp/OraInstall*且数据库创建时需预留SYSTEM表空间至少1GB默认创建SYSAUX表空间至少1.5GB默认创建后续组件加载会暴涨UNDO表空间至少2GB默认自动扩展但初始大小不足易导致事务失败FRA快速恢复区至少3GB即使不启用归档OUI也会创建因此安装目录如/u01/app/oracle所在分区可用空间必须≥20GB。我曾见某客户在16GB分区安装安装完成但数据库无法open报错ORA-19802: unable to use DB_RECOVERY_FILE_DEST根源就是FRA空间不足。DNS与hosts解析检查Oracle要求主机名能被正向hostname→IP和反向IP→hostname解析。在/etc/hostsLinux或C:\Windows\System32\drivers\etc\hostsWindows中必须存在127.0.0.1 localhost 192.168.1.100 myhost.mydomain.com myhost其中myhost.mydomain.com必须与hostname -f输出完全一致包括域名小写。若不一致OUI会报错PRVF-0657 : Failed to retrieve local node name。Windows下还需禁用IPv6在网卡属性中取消勾选“Internet Protocol Version 6 (TCP/IPv6)”否则Oracle可能优先解析IPv6地址导致监听失败。3. 安装过程中的“五处暗礁”每一步背后的原理与避坑实操安装界面看似只有几步但每一步都是Oracle在执行深度环境验证和配置生成。跳过理解原理就等于蒙眼过雷区。3.1 选择安装类型为什么“服务器类”是唯一安全选项OUI提供三个选项“创建和配置数据库”、“仅安装软件”、“升级现有数据库”。新手常选第一个以为“一步到位”。但这是最大陷阱——它强制你同时完成软件安装和数据库创建一旦数据库创建失败如磁盘满、参数错整个安装回滚你得重来。正确策略是分两步走选择“仅安装软件”完成Oracle二进制文件部署、环境变量配置、监听器安装安装完成后用dbcaDatabase Configuration Assistant单独创建数据库。为什么因为dbca是独立工具有完整日志/u01/app/oracle/cfgtoollogs/dbca/报错时可精准定位到SQL脚本哪一行而OUI集成的数据库创建日志分散在多个临时目录排查极难。我处理过一个案例OUI创建数据库卡在“执行catqm.sql”阶段耗时2小时无响应。换成dbca后日志明确显示ORA-01652: unable to extend temp segment原因是TEMP表空间数据文件未自动扩展——这个参数在OUI界面根本不可见但在dbca的“Storage Options”里可手动设置。实操心得安装软件时OUI会提示“是否配置安全更新”。务必选择“No, do not set up security updates”。因为Oracle的My Oracle SupportMOS账号体系复杂国内企业多数无有效订阅强行配置会导致OUI卡在“验证MOS账号”步骤长达10分钟最后超时失败。这步跳过不影响软件功能后续补丁可通过离线方式安装。3.2 环境变量配置不只是PATH而是Oracle的“呼吸系统”安装完成后必须手动配置三个核心环境变量否则sqlplus、rman等命令无法识别export ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_BASE/product/19.0.0/dbhome_1 export PATH$ORACLE_HOME/bin:$PATH但关键细节在于ORACLE_BASE必须是空目录且oracle用户对其有读写权限。若/u01/app/oracle已存在旧版本文件OUI会报错ORA-27123: unable to attach to shared memory segment。ORACLE_HOME路径中的dbhome_1是OUI自动生成的不可修改。有些教程建议改成oracle19c会导致后续补丁安装失败。PATH中$ORACLE_HOME/bin必须放在最前面。因为Linux系统自带sqlplus属于unixODBC包若/usr/bin在PATH前面你执行sqlplus调用的是系统版本而非Oracle版本报错Error 6 initializing SQL*Plus。验证方法切换到oracle用户执行env | grep ORACLE确认变量生效再执行which sqlplus输出必须是$ORACLE_HOME/bin/sqlplus。3.3 监听器配置不是“下一步”而是网络通信的基石OUI在安装软件后会自动启动监听器Listener。但默认配置listener.ora存在致命缺陷LISTENER (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL IPC)(KEY EXTPROC1521)) (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1521)) ) )问题在于(HOST localhost)——这导致监听器只绑定127.0.0.1外部机器无法连接。必须修改为实际IP或主机名(ADDRESS (PROTOCOL TCP)(HOST myhost.mydomain.com)(PORT 1521))修改后重启监听器lsnrctl stop lsnrctl start验证lsnrctl status输出中应显示Listening Endpoints Summary... (DESCRIPTION(ADDRESS(PROTOCOLtcp)(HOSTmyhost.mydomain.com)(PORT1521)))。若仍显示localhost说明/etc/hosts中主机名解析不正确。提示监听器日志默认在$ORACLE_HOME/network/log/listener.log。若连接失败第一件事就是tail -f listener.log看是否有TNS-12541: TNS:no listener或TNS-12514: TNS:service not registered。前者是监听器没启后者是数据库实例没注册到监听器——此时需检查数据库的local_listener参数是否指向正确地址。3.4 数据库创建dbca容器数据库CDB的强制逻辑19c默认创建容器数据库CDB这是架构级变化。当你用dbca创建数据库时界面会问“Create as Container Database?”必须勾选。若取消则创建的是非容器数据库non-CDB但19c的non-CDB模式已被标记为“deprecated”未来版本将移除且许多新特性如Application Container、PDB Snapshot Copy无法使用。CDB创建后实际包含三个逻辑单元CDB$ROOT根容器存放Oracle元数据字典如SYS、SYSTEM用户PDB$SEED种子PDB作为创建新PDB的模板ORCLPDB1默认名称第一个可插拔数据库你的应用连接目标。关键认知sys用户登录时默认连接到CDB$ROOT。若要管理PDB必须先alter session set containerORCLPDB1;。而应用连接字符串中的SERVICE_NAME必须是PDB的服务名如ORCLPDB1而非CDB的服务名如ORCL。常见错误是应用连ORCL结果报错ORA-65096: invalid common user or role name——因为ORCL下没有应用用户用户只存在于PDB中。3.5 EM Express配置5500端口背后的HTTPS证书链安装完成后EM ExpressEnterprise Manager Express默认启用访问https://myhost:5500/em即可。但首次访问常遇“您的连接不是私密连接”警告。这是因为Oracle自动生成的SSL证书是自签名的浏览器不信任。解决方法不是导入证书太麻烦而是在数据库中为EM Express配置HTTP端口如5501exec DBMS_XDB.SETHTTPPORT(5501);然后访问http://myhost:5501/em注意是http非https。这样绕过证书验证且功能完全一致。EM Express虽不如OEMOracle Enterprise Manager强大但对于日常监控表空间使用率、会话数、SQL执行计划已足够。注意EM Express的HTTP端口必须在数据库open状态下配置且每次数据库重启后需重新执行该命令。若要永久生效可将命令加入数据库启动触发器CREATE OR REPLACE TRIGGER em_http_port_on_startup AFTER STARTUP ON DATABASE BEGIN DBMS_XDB.SETHTTPPORT(5501); END;4. 安装后的“四大必检项”从能用到好用的关键跃迁安装完成≠部署完成。真正的挑战在安装后24小时内——这是故障高发期也是验证部署质量的黄金窗口。4.1 SYSAUX表空间占用率不是“高”而是“失控”的预警信号热搜词“oracle19c sysaux占用率高”背后是19c默认启用的大量新组件。SYSAUX是SYSTEM表空间的“副驾”存放AWR、OEM、Oracle Text、Spatial等组件数据。安装后立即检查SELECT tablespace_name, ROUND(used_space * 100 / total_space, 2) AS Used_Pct FROM ( SELECT tablespace_name, SUM(bytes) / 1024 / 1024 AS total_space, SUM(CASE WHEN maxbytes 0 THEN bytes ELSE LEAST(bytes, maxbytes) END) / 1024 / 1024 AS used_space FROM dba_data_files WHERE tablespace_name SYSAUX GROUP BY tablespace_name );若占用率70%必须干预。根本原因不是数据量大而是组件未按需启用。例如若不用XML DB执行EXEC DBMS_XMLSTORAGE_ADMIN.DISABLE_STORAGE();若不用Spatial执行ALTER DATABASE DISABLE BACKUP OPTIMIZATION;禁用空间索引优化清理AWR快照EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(LOW_SNAP_ID 1, HIGH_SNAP_ID 1000);实操心得SYSAUX暴涨最快的是WRH$_ACTIVE_SESSION_HISTORYASH历史表。默认保留8天若业务并发高每天新增数GB。可调整为3天EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention 4320); -- 4320分钟3天4.2 备份兼容性19c备份能否在11g恢复答案是“不能”但有路可走热搜词“oracle19c的备份文件能在oracle11g上恢复出来吗”触及Oracle版本兼容性红线。答案明确不能。因为19c的备份集.bkp文件包含19c特有的数据块格式、加密算法和元数据结构11g的RMAN无法解析。但业务常有跨版本容灾需求解决方案是逻辑导出版本适配在19c上用expdp导出expdp system/password DIRECTORYdp_dir DUMPFILEorcl19c.dmp VERSION11.2VERSION11.2参数强制导出为11g兼容格式将.dmp文件拷贝至11g服务器在11g上用impdp导入impdp system/password DIRECTORYdp_dir DUMPFILEorcl19c.dmp注意VERSION参数仅保证数据结构兼容不保证功能兼容。若19c中使用了11g不支持的特性如JSON列、In-Memory Column Store导出时会报错需先在19c中转换为传统类型。4.3 注册表清理Windows下彻底卸载的唯一正确姿势“如何卸载oracle19c注册表”是高频问题根源在于Windows卸载程序不清理注册表。正确流程分三步先停服务以管理员身份运行CMD执行net stop OracleServiceORCL19C net stop OracleOraDB19Home1TNSListener删服务sc delete OracleServiceORCL19C sc delete OracleOraDB19Home1TNSListener清注册表重点运行regedit删除以下键值HKEY_LOCAL_MACHINE\SOFTWARE\Oracle整个Oracle键HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下所有以Oracle开头的服务项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall下所有Oracle相关GUID项警告手动删注册表风险极高。更安全的方法是使用Oracle官方卸载工具进入$ORACLE_HOME\deinstall目录运行deinstall.batWindows或./deinstallLinux。它会自动停服务、删注册表、清环境变量且生成详细日志deinstall.log。4.4 容器数据库与非容器数据库19c的“双模”真相热搜词“oracle19c 容器数据库与非容器数据库”常被误解为“可选模式”。事实是19c物理上只有CDB一种架构non-CDB只是CDB的一个特例——即只含CDB$ROOT不含任何PDB。但Oracle仍允许创建non-CDB只为兼容旧应用。生产环境强烈建议采用CDBPDB模式因为资源隔离每个PDB可独立设置内存memory_target、CPUcpu_count限额快速克隆CREATE PLUGGABLE DATABASE pdb2 FROM pdb1秒级创建新环境统一补丁对CDB打补丁所有PDB自动继承。若必须用non-CDB需在dbca中取消“Create as Container Database”但后续升级到21c时必须先转换为CDBcatcon.pl脚本否则无法升级。5. 常见问题与排查技巧实录来自237次真实部署的故障速查表以下是我在一线支持中整理的Top 10高频问题按发生频率排序并附上30秒定位法和根治方案。问题现象快速定位命令/操作根本原因永久解决方案ORA-01034: ORACLE not availableps -ef | grep pmon若无ora_pmon_ORCL进程则实例未启动数据库未startup或/etc/oratab中ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:N的N应为Y编辑/etc/oratab将N改为Y然后dbstartORA-12514: TNS:listener does not currently know of service requestedlsnrctl status检查输出中是否有你的服务名如ORCLPDB1PDB未open或local_listener参数未指向监听器sqlplus / as sysdba→alter pluggable database ORCLPDB1 open;→alter system set local_listener(ADDRESS(PROTOCOLTCP)(HOSTmyhost)(PORT1521));EM Express打不开5500端口拒绝连接curl -I http://localhost:5500若返回curl: (7) Failed to connect则EM未启用DBMS_XDB.SETHTTPPORT未执行或数据库未opensqlplus / as sysdba→select dbms_xdb.gethttpport from dual;若为0则未启用→exec DBMS_XDB.SETHTTPPORT(5500);安装时卡在“Copying files…”超10分钟查看/u01/app/oracle/cfgtoollogs/oui/下最新日志搜索SEVERE/tmp空间不足或/u01/app/oracle目录权限不对非oracle用户所有df -h /tmp若1GB则清理chown -R oracle:oinstall /u01/app/oraclesqlplus连接报错“Error 6 initializing SQL*Plus”which sqlplus若输出/usr/bin/sqlplus则是系统版本PATH中$ORACLE_HOME/bin位置靠后编辑~/.bash_profile确保export PATH$ORACLE_HOME/bin:$PATH在最前然后source ~/.bash_profilePDB无法open报错ORA-01157: cannot identify/lock data fileselect name, status from v$datafile;找status为OFFLINE的文件数据文件路径在CREATE PLUGGABLE DATABASE时写错或ASM磁盘组未mountalter database datafile /path/to/file.dbf online;若路径错则alter database move datafile重定位监听器启动报错TNS-01150: The address of the specified listener name is incorrectcat $ORACLE_HOME/network/admin/listener.ora | grep HOST检查HOST值是否为localhostlistener.ora中HOST未改为实际主机名修改listener.oraHOST myhost.mydomain.com然后lsnrctl reload备份时RMAN报错ORA-19802: unable to use DB_RECOVERY_FILE_DESTshow parameter db_recovery_file_dest_size;若为0则FRA未启用db_recovery_file_dest_size参数为0或db_recovery_file_dest路径不存在alter system set db_recovery_file_dest_size10G;→alter system set db_recovery_file_dest/u01/fast_recovery_area;卸载后重装报错“Inventory location is not writable”ls -ld /u01/app/oraInventory检查权限是否为drwxrwx---/u01/app/oraInventory目录属主不是oracle或权限不对chown -R oracle:oinstall /u01/app/oraInventory→chmod -R 770 /u01/app/oraInventoryWindows下Oracle服务启动失败事件查看器显示“错误1053”服务属性→“登录”选项卡检查“此账户”是否为.\ora19c服务登录账户密码错误或账户被禁用重置ora19c用户密码服务属性中重新输入密码勾选“允许服务与桌面交互”最后分享一个小技巧每次安装前用screen或tmux开启一个会话全程记录所有命令和输出。当问题发生时直接CtrlA[进入复制模式/ORA-搜索错误码5秒定位。我坚持这个习惯12年它让我的平均排错时间从47分钟缩短到8分钟。技术没有捷径但有可复用的经验。
返回列表