ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

银河麒麟V10安装Oracle 19c实战:从环境配置到开机自启

银河麒麟V10安装Oracle 19c实战:从环境配置到开机自启 如果你正在参与政企、金融、医疗这类单位的国产化迁移项目那么“国产操作系统上跑 Oracle 19c”这一关基本绕不开。我这里说的就是银河麒麟系统V10 Server SP1一套基于 RHEL8 技术路线的服务器系统配上 Oracle 19c 这种老牌企业级数据库在信创环境里属于非常典型的组合。别觉得这就是普通 Linux 装 Oracle真做起来从依赖包到图形界面从安全中心到 /dev/shm坑一个接一个。这篇文章我不会给你贴官方文档的翻译版而是把我实际装过的完整流程、每条命令背后的原因、踩过的坑都写出来。内容覆盖安装前的环境检查、依赖与内核参数配置、runInstaller 软件安装、netca 监听创建、dbca 建单机 CDB 库以及开机自启和外围放行。适合正在做信创数据库迁移的运维、DBA、实施工程师也适合第一次在麒麟上碰 Oracle 的新手照着一步步操作。1. 装库前的环境摸底比装库本身更费时很多人拿到服务器就急着解压安装包结果跑到一半缺这缺那再回头补环境反而更慢。我习惯先把机器“摸”一遍确认系统版本、架构、资源、图形化条件都到位再动 Oracle这样后边安装基本一路顺畅。1.1 确认系统版本与CPU架构先避开第一个坑银河麒麟 V10 Server SP1 有两个大分支x86_64 和 aarch64。Oracle 19c 官方支持 x86_64 平台这是个前提。你要是拿到一台 ARM 的麒麟机器那这方案就得换思路后面所有包、补丁、参数可能都不一样。登录系统后先跑一下cat /etc/kylin-release uname -a正常会看到 Kylin V10 SP1 的字样内核版本通常是 4.18.0 系列这跟 RHEL8/CentOS8 是同源的。所以很多 CentOS8 的软件包管理方式、依赖包命名、服务管理方式在麒麟上都能直接用这是好事但别高兴太早麒麟自己有安全增强组件后边我会专门说。架构确认好以后顺便看一下磁盘分区情况df -hT free -hOracle 软件包解压后大概需要 5GB 以上空间如果还要建库数据文件、重做日志、归档、快速恢复区都是单独算的。我一般建议 /u01或单独数据盘至少预留 100GB 可用空间不然库还没建完磁盘就满了DBA 想哭都没地方哭。1.2 内存、Swap与磁盘的三项硬性检查内存是 Oracle 装得顺不顺的关键因素。官方对 19c 的最低要求是 2GB 物理内存但那是“能跑”的标准实际建库和后续运行8GB 以上才舒服。内存过小的机器最好先扩内存再装别指望 Swap 能完全兜底Oracle 对 Swap 的建议是物理内存 2GB 以下Swap 设为内存的 2 倍物理内存 2GB 到 8GBSwap 设成和内存差不多大物理内存 8GB 以上Swap 建议 4GB 到 8GB 即可检查命令很简单free -h swapon --show如果 Swap 不够可以通过临时创建 swapfile 的方式补但生产环境还是建议前期在分区规划里就把 swap 分配好。还有一个容易被忽略的点是 /dev/shm。Oracle 19c 在 DBCA 建库时如果检测到 /dev/shm 太小会直接报 ORA-00845代码是“内存目标配置错误”。我遇到过默认 /dev/shm 只有 64MB 的情况建库进行到一半直接失败。这个后边第四章我再展开讲怎么调整现在先记着检查时看一眼df -h /dev/shm1.3 图形界面与Root登录得先打通Oracle 19c 的 runInstaller、netca、dbca 本质上都是 Java 图形程序虽然支持静默模式但我个人强烈建议第一次安装时用图形界面因为中间很多提示信息在静默模式下不够直观出问题你都不知道卡在哪一步。如果服务器本身有 GNOME 或 UKUI 桌面环境直接在上面装最省事。如果是一台纯命令行服务器可以通过 X11 转发或者 VNC 打开图形界面。我在麒麟上常用的做法是装 VNCdnf install -y tigervnc-server vncserver :1 -geometry 1280x1024然后用 VNC 客户端连上去操作。注意 VNC 连接的桌面环境默认比较简陋字体可能不全Oracle 的安装界面容易出现乱码这个在 5.3 节有专门的处理方案。还有一点麒麟 V10 Server SP1 默认可能不允许 root 直接在图形界面登录但 Oracle 安装过程有些步骤需要 root 执行比如 root.sh所以我个人的习惯是用 root 在终端里操作全局配置用 oracle 用户在图形界面里跑安装程序。这样做的好处是权限分离清晰避免安装过程中因为权限不足报错。如果需要开放 root 的图形登录可以编辑 /etc/gdm/custom.conf 或通过安全中心设置但生产环境为了安全一般保持默认不可 root 登录就好没必要为了装个库把系统安全策略打开口子。2. 依赖包、内核参数与oracle用户配齐了再动手这是整个安装过程中最繁琐、也最考验耐心的一部分。很多人装 Oracle 失败十有八九是依赖包缺失或内核参数、用户限制没配好。我在这部分会尽量把“为什么要这么配”也讲清楚这样你去排查问题的时候心里才有底。2.1 依赖包RHEL8系与麒麟的差异点银河麒麟 V10 Server SP1 走的是 RHEL8 的技术路线所以官方针对 RHEL8 的依赖包清单大部分适用。但有个特别坑的点RHEL8 开始默认不再预装 libnsl而 Oracle 19c 的安装程序在预检查阶段会依赖这个库。我第一次在麒麟上装的时候runInstaller 跑到预检查直接弹窗说缺库当时一脸懵后来才定位到 libnsl 的问题。我整理了一份实用的安装命令基于麒麟的 dnf 仓库直接装dnf install -y bc binutils elfutils-libelf elfutils-libelf-devel \ fontconfig-devel glibc glibc-devel ksh libaio libaio-devel \ libX11 libX11-devel libXau libXi libXtst libXrender libXrender-devel \ libXpm libXext libXext-devel libxcb libstdc libstdc-devel \ libnsl lsof make net-tools nfs-utils python3 readline rlwrap \ sysstat unixODBC unzip xorg-x11-utils这里重点说几个libnsl 是必装的缺了它 runInstaller 根本跑不起来。fontconfig-devel、xorg-x11-utils 是图形界面显示用的不装容易出现乱码或字体异常。rlwrap 不是 Oracle 必须但装上它之后在 sqlplus 里可以用方向键上下翻历史命令对 DBA 来说体验提升巨大。compat-libcap1、compat-libstdc-33 这两个包在 RHEL8/CentOS8 官方的 19c 依赖文档里已经不算必需项了如果你的应用还依赖旧库可以考虑装但不是必须所以我的命令里没列。别在网上看到老的 11g/12c 教程就一通照搬反而装出一堆不需要的包。装完依赖之后验证一下rpm -qa | grep -E libnsl|libaio|glibc-devel2.2 内核参数与每个数值背后的含义内核参数影响的是 Oracle 运行时的共享内存、信号量、文件句柄、网络端口等核心资源。这些参数如果不配安装时可能没事但数据库一跑高并发就会出各种莫名其妙的问题。编辑 /etc/sysctl.conf追加以下内容fs.aio-max-nr 1048576 fs.file-max 6815744 kernel.sem 250 32000 100 128 kernel.shmall 1073741824 kernel.shmmax 4398046511104 net.core.rmem_default 262144 net.core.rmem_max 4194304 net.core.wmem_default 262144 net.core.wmem_max 1048576 net.ipv4.ip_local_port_range 9000 65500然后执行 sysctl -p 使其生效。简单说一下每个参数什么含义kernel.shmmax 是单个共享内存段的最大值。Oracle 的 SGA 就是通过共享内存方式分配的如果这个值小于 SGA 配置数据库实例根本起不来。官方建议值是物理内存的一半左右4TB 那个数值适合大内存机器小内存服务器可以按实际调整比如内存 32GB 的机器设成 1717986918416GB都没问题。kernel.shmall 是共享内存页总数和 shmmax 配合使用。1GB 内存大概需要 262144 个页每个页 4KB 的话所以 1073741824 这个值是给超大内存准备的。你如果内存没到 TB 级别可以按“物理内存 KB 数 ÷ 4”来算个大概值。kernel.sem 四个数字分别对应 SEMMSL、SEMMNS、SEMOPM、SEMMNI控制的是信号量。Oracle 每启动一个后台进程、每建立一个连接都可能用到信号量配小了会出现“ORA-27154: post/wait creation failed”之类的错误。fs.file-max 是系统级最大打开文件数数据量大、并发高的库文件句柄消耗非常快这个值不能省。net.ipv4.ip_local_port_range 决定了客户端连接数据库时可用的本地端口范围。默认 32768 60999 在连接数多的情况下很快会耗尽改成 9000 到 65500 能显著提升并发上限。改完用 sysctl -p 验证以后再看一眼sysctl kernel.shmmax kernel.shmall kernel.sem数字和配置一致就说明没问题。2.3 oracle用户、目录规划与环境变量Oracle 安装要求不能直接使用 root需要用专门的 oracle 用户。创建用户和组的标准流程如下groupadd oinstall groupadd dba groupadd oper useradd -u 54321 -g oinstall -G dba,oper oracle passwd oracle这里我解释一下为什么要分三个组oinstall 是 Inventory 组管理 Oracle 软件安装清单所有 Oracle 安装都属于这个组。dba 是数据库管理员组拥有 SYSDBA 权限可以执行数据库管理操作。oper 是操作员组拥有 SYSOPER 权限只能做启动、关闭数据库等基本操作是对权限更细的划分。UID 54321 不是必须但很多公司数据库账号规范里会这样定方便统一管理。目录规划方面我习惯把 Oracle 基础目录放在 /u01mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1 mkdir -p /u01/app/oraInventory chown -R oracle:oinstall /u01 chmod -R 775 /u01oracle 用户的环境变量配置在 /home/oracle/.bash_profile 里不要只配在 .bashrc 里因为通过 ssh 登录时非交互 shell 不一定加载 .bashrc容易导致 sqlplus 命令找不到。export ORACLE_BASE/u01/app/oracle export ORACLE_HOME/u01/app/oracle/product/19.3.0/dbhome_1 export ORACLE_SIDorcl19c export PATH$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH$ORACLE_HOME/lib:/usr/lib:/lib export NLS_LANGAMERICAN_AMERICA.AL32UTF8其中 NLS_LANG 的格式是“语言_地区.字符集”。AMERICAN_AMERICA.AL32UTF8 意味着数据库客户端提示用英语字符集用 AL32UTF8。如果你希望 sqlplus 提示输出中文可以改成 SIMPLIFIED CHINESE_CHINA.AL32UTF8但考虑到运维排障时英文信息更容易查资料我一般选英文。2.4 limits配置与session级验证/etc/security/limits.conf 里需要给 oracle 用户配置进程数和文件描述符上限。这个文件控制的是每次登录会话能够打开的资源上限如果没配好数据库连接多的时候会频繁报“ORA-12520”或“Too many files open”。oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768nproc 是用户可创建的进程数nofile 是最大文件打开数stack 是堆栈大小。数据库在跑的时候每个会话都有对应的服务器进程每个进程要打开一堆文件和网络连接这两个限制直接决定并发上限。还要注意现在麒麟基于 systemd 管理光改 limits.conf 还不够还需要确认 /etc/systemd/system.conf 和 /etc/systemd/user.conf 里的 DefaultLimitNOFILE 没有被设成很小。如果是通过 systemd 启动数据库服务优先读这些全局配置。改完以后用 oracle 用户重新登录执行ulimit -n ulimit -u确认输出是 65536 和 16384 就对了。如果没生效多半是 session 没重新加载或者 PAM 配置里有覆盖检查 /etc/pam.d/login、/etc/pam.d/sshd 里有没有包含 pam_limits.so。3. 安装包、runInstaller与监听走通安装主流程环境配置完毕接下来就是真正开始安装 Oracle 19c 了。这部分我会把安装包的获取方式、图形安装和静默安装的取舍、监听创建与端口冲突排查都讲一遍。3.1 19c安装包下载没有Oracle账号也能拿Oracle 官网下载 19c 需要登录 OTN 账号但实际上官网页面底部通常会有一个跳过登录的入口操作流程是打开 Oracle 官方数据库下载页面找到 Linux x86-64 的 19c 版本接受许可协议后在下载按钮那一行会出现一个带下划线的链接类似“no thanks, just start my download”直接点这个就能开始下载不需要填任何账号信息。下载好的包是一个 ZIP 文件Linux x86-64 版本大概是 2.9GB文件名是 LINUX.X64_193000_db_home.zip。下载完成后用 unzip 以 oracle 用户身份解压。这里有个 19c 特有的点它不像 12c 之前那样要先建好空目录再往里面放安装文件19c 的做法是直接把 zip 内容解压到 ORACLE_HOME 目录里ORACLE_HOME 就是它的安装目录。su - oracle cd $ORACLE_HOME unzip /tmp/LINUX.X64_193000_db_home.zip如果 zip 包比较大解压时间会比较长耐心等。解压完成后可以检查一下目录下有没有 runInstaller 文件ls -l $ORACLE_HOME/runInstaller3.2 图形安装与静默安装怎么选我个人的习惯是第一次装、环境不太熟、后续可能要排查问题用图形安装批量部署、环境已经验证过、几十台机器要装用静默安装。图形安装命令cd $ORACLE_HOME export LANGen_US.UTF-8 ./runInstaller这里特别强调一下 LANG 的设置。麒麟系统默认语言可能是中文而 Oracle 安装界面是 Java 写的在缺少中文字体的情况下中文会显示成一堆小方块根本没法操作。我在实际项目里被这个坑过好几次解决办法就是强制用英文环境启动安装程序export LANGen_US.UTF-8图形安装过程中主要注意这几点安装类型选“Install database software only”把建库的步骤留给后边的 DBCA这样各阶段出问题容易定位。数据库版本选 Enterprise Edition企业版Standard Edition 功能差很多比如分区、高级压缩这些常用特性都没有。安装目录会自动识别 ORACLE_HOME确认无误后进下一步。到 root 脚本执行步骤时会提示你另外开一个窗口用 root 身份执行两个脚本oraInventory 的 owner 脚本和 root.sh。执行完 root.sh 再回安装界面点 OK 继续程序会做最后的配置和检查看到 Successfully Setup Software 就说明装完了。静默安装则是一次性命令搞定./runInstaller -silent -ignorePrereq \ -responseFile $ORACLE_HOME/install/response/db_install.rsp \ oracle.install.optionINSTALL_DB_SWONLY \ UNIX_GROUP_NAMEoinstall \ INVENTORY_LOCATION/u01/app/oraInventory \ ORACLE_BASE/u01/app/oracle \ ORACLE_HOME/u01/app/oracle/product/19.3.0/dbhome_1 \ oracle.install.db.InstallEditionEE \ oracle.install.db.OSDBA_GROUPdba \ oracle.install.db.OSOPER_GROUPoper \ oracle.install.db.OSBACKUPDBA_GROUPdba \ oracle.install.db.OSDGDBA_GROUPdba \ oracle.install.db.OSKMDBA_GROUPdba \ oracle.install.db.OSRACDBA_GROUPdba \ DECLINE_SECURITY_UPDATEStrue2023 年之后 Oracle 19c 的补丁规则有一些变化但 19.3 基础版安装时 DECLINE_SECURITY_UPDATEStrue 这个参数依然是必需的否则安装程序会卡在你没有配置 My Oracle Support 帐号的提示上。安装完成的标志是最后会显示类似“Prepare for root script execution”的信息让你手动执行 root.sh。3.3 监听配置与1521端口占用排查软件装完下一步是创建监听。19c 里监听可以用 netca 创建su - oracle netca -silent -responsefile $ORACLE_HOME/assistants/netca/netca.rsp命令执行完以后用 lsnrctl status 检查监听状态lsnrctl status如果看到类似“The command completed successfully”的输出说明监听已经在跑了。监听默认监听 1521 端口。这个端口在麒麟系统上很容易被占因为很多中间件、调试工具都喜欢用 1521。我在一次项目中就遇到过 1521 被一个莫名其妙的 java 进程占掉导致 Oracle 监听怎么都起不来。排查端口看这几个命令ss -lnpt | grep 1521 lsof -i :1521如果确实被占有两种处理方式一种是杀掉占用进程另一种是修改监听端口。修改端口在 $ORACLE_HOME/network/admin/listener.ora 里把 PORT 改成其他值比如 1522然后重启监听lsnrctl reload另外如果本机防火墙开着即使监听起来了外部客户端也连不上。这个我在第五章专门讲先记着有这个事。4. DBCA创建单机CDB库参数逐项拆解监听建好之后数据库实例还没建。Oracle 19c 里建库的标准工具就是 DBCA。这一章我重点写单机 CDB 模式的建库过程因为这是当前最常见、也是官方推荐的架构。4.1 CDB/PDB架构与19c的选择从 12c 开始Oracle 引入 CDBContainer Database容器数据库和 PDBPluggable Database可插拔数据库架构。简单理解CDB 是一个大容器里面可以装多个 PDB每个 PDB 对外看就像一个独立的数据库。这种架构的好处是管理成本低比如打补丁只需要对 CDB 打一次所有 PDB 都跟着升级。19c 本身没有非 CDB 模式了就算你建库时不特别说明它默认也是 CDB 架构。我在 DBCA 建库时通常会创建 1 个 PDB这样后边如果需要多套业务库直接在同一个 CDB 里加 PDB 就行不用再单独开实例。当然如果你习惯传统模式也可以把 PDB 数量建为 0然后所有业务都放在 CDB 里。但这样 CDB 里直接建的表和传统数据库其实没区别扩展性差一些我不推荐。4.2 dbca静默建库参数详解我已经把最常用的静默建库命令整理出来直接复制替换参数即可su - oracle dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname orcl19c \ -sid orcl19c \ -createAsContainerDatabase true \ -numberOfPDBs 1 \ -pdbName orclpdb \ -characterSet AL32UTF8 \ -memoryMgmtType AUTO_SGA \ -totalMemory 2048 \ -storageType FS \ -datafileDestination /u01/app/oracle/oradata \ -recoveryAreaDestination /u01/app/oracle/fast_recovery_area \ -recoveryAreaSize 40960 \ -redoLogFileSize 200 \ -emConfiguration NONE \ -sampleSchema false逐个参数说-gdbname 和 -sid 在单机环境下要保持一致都是 orcl19c。这个就是数据库实例名也是你 sqlplus / as sysdba 进去之后看到的 ORACLE_SID。-createAsContainerDatabase true 表示创建 CDB。-numberOfPDBs 1 和 -pdbName orclpdb 表示这个 CDB 里带一个叫 orclpdb 的 PDB。-characterSet AL32UTF8 是字符集。国内很多老库还在用 ZHS16GBK但新的 19c 库我强烈建议 AL32UTF8它兼容性强对多语言场景和以后做数据迁移都更友好。-memoryMgmtType AUTO_SGA 是内存管理方式。AUTO_SGA 表示 SGA 自动调整PGA 相对固定如果你的内存充足也可以用 AUTO_MEMORY 让 SGA 和 PGA 一起自动管理。服务器内存 8GB 左右的话我建议 AUTO_SGA 再把 -totalMemory 设成 2048单位是 MB给操作系统和其他进程留够余地。-totalMemory 2048 是给 Oracle 使用的内存总量单位 MB也就是 2GB。这个值不要贪多尤其单机数据库要跟其他进程共享内存吃太满系统会卡。-storageType FS 表示数据文件存在普通文件系统上与之对应的是 ASM自动存储管理。单机、数据量不是特别大的场景FS 完全够用配置最简单。-datafileDestination 指定数据文件存放目录。注意这个目录需要提前创建并赋予 oracle 用户写权限。-recoveryAreaDestination 和 -recoveryAreaSize 配置快速恢复区大小单位是 MB。40960 大概是 40GB。快速恢复区主要用来存放归档日志、闪回日志、RMAN 备份。如果你后续要做 RMAN 增量备份这个区域大小直接影响备份文件的存放空间别配太小。-redoLogFileSize 200 是重做日志组文件大小单位 MB。一般在线业务库建议 200MB 到 512MB太大恢复慢太小频繁切换日志影响性能。-emConfiguration NONE 是不配置 Oracle Enterprise Manager减少后台进程节省系统资源。如果想用 Web 版 EM Express 做图形化监控可以改成 -emConfiguration DBEXPRESS它会监听 5500 端口。-sampleSchema false 表示不装示例表生产环境谁也不想数据库里平白多出一堆示例数据。DBCA 执行期间会创建数据字典、安装系统包、创建控制文件和重做日志整个过程比较慢有的机器要跑 20 到 40 分钟。看到“Database creation complete”就是建库成功。4.3 /dev/shm与ORA-00845的纠缠建库过程中最常见的报错就是 ORA-00845全称大概是“MEMORY_TARGET not supported on this system”原因是 /dev/shm 的大小小于 MEMORY_TARGET 或 SGA_TARGET。为什么会这样因为 Oracle 的内存管理默认会使用 POSIX 共享内存而 POSIX 共享内存的文件系统的挂载点在 /dev/shm。如果 /dev/shm 太小Oracle 没法在内存里创建足够的共享内存段只能报错。检查当前大小df -h /dev/shm如果只有几十兆到一两百兆肯定跑不了大 SGA需要调大。临时调整mount -o remount,size6G /dev/shm持久化调整编辑 /etc/fstab找到 /dev/shm 那一行在 options 里加 size6G。如果没有对应行可以追加一行 tmpfs。tmpfs /dev/shm tmpfs defaults,size6G 0 0这里 6G 是示例一般建议 /dev/shm 至少大于等于你给 Oracle 配的总内存目标。比如 -totalMemory 2048那 /dev/shm 至少要 4G 以上才比较保险。调整完成后重新挂载并验证mount -o remount /dev/shm df -h /dev/shm然后再重新跑 dbca 建库ORA-00845 一般就消失了。5. 开机自启、防火墙与乱码问题最后一公里的坑数据库建好以后事情还没完。服务重启后能不能自动拉起、外部客户端能不能连上、安装界面乱码怎么处理这些都是在生产环境里真正决定项目能不能顺利交付的点。5.1 oratab、dbstart与systemd自启Oracle 安装的时候会在 /etc/oratab 里写一行实例信息格式类似orcl19c:/u01/app/oracle/product/19.3.0/dbhome_1:N最后一个字段 N 表示“数据库实例不随系统自动启动”要改成 Ydbstart 脚本才会在开机时拉起这个实例。sed -i s/:N$/:Y/ /etc/oratab然后创建 systemd 服务文件这样才能让 Oracle 跟随系统开机自启。建一个 /etc/systemd/system/oracle-19c.service[Unit] DescriptionOracle Database 19c Afternetwork.target [Service] Useroracle Groupoinstall Typeforking ExecStart/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbstart /u01/app/oracle/product/19.3.0/dbhome_1 ExecStop/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbshut /u01/app/oracle/product/19.3.0/dbhome_1 [Install] WantedBymulti-user.target注意 ExecStart 里 dbstart 需要传 ORACLE_HOME 作为参数它读取 /etc/oratab 判断哪些实例要启动。然后启用并检查状态systemctl daemon-reload systemctl enable oracle-19c systemctl start oracle-19c systemctl status oracle-19c如果服务报错可以先看日志排查。常见问题是没有用 oracle 用户执行 dbstart或者环境变量没有加载导致命令找不到。手动执行的时候可以先 source 一下 oracle 用户的 .bash_profile 再跑。5.2 防火墙放行与麒麟安全中心数据库装完外部客户端连不上十有八九是防火墙或麒麟安全中心在拦。麒麟 V10 Server SP1 默认使用 firewalld检查是否开启systemctl status firewalld如果开启放行 1521 端口firewall-cmd --permanent --add-port1521/tcp firewall-cmd --reload firewall-cmd --list-ports如果用的是 iptables 而不是 firewalld命令会是iptables -I INPUT -p tcp --dport 1521 -j ACCEPT service iptables save但这里我要多提一句麒麟特有的事。麒麟系统自带一个“安全中心”组件里面有应用保护、网络安全、数据保护等模块。在某些版本里即使 firewalld 放行了端口Oracle 监听进程试图监听 1521 端口时安全中心仍可能弹窗拦截或限制。我遇到过一次防火墙规则全放行了外部 telnet 1521 就是不通后来在图形桌面的安全中心里看到一条关于 Oracle 监听的拦截告警手动点允许之后才通。对于命令行环境如果确实怀疑是安全组件拦截可以先用 setenforce 0 临时放下 SELinux确认问题消失后再在安全中心或 /etc/selinux/config 里做持久化处理。注意生产环境到底要不要关 SELinux 或麒麟安全增强一定要根据单位的合规要求来不能为了一个数据库把整台机器的安全水位拉低。更稳妥的做法是先定位到是哪条安全策略拦截单独放行 Oracle 相关的进程和端口。5.3 中文乱码与安装界面的本地化处理麒麟系统默认中文 locale安装 Oracle 时出现乱码几乎是必踩的坑。乱码分成两种一种是安装界面也就是 Java 写的 OUI 界面里的中文变成豆腐块另一种是文本编辑器里看文件内容乱码。安装界面乱码最省事的方案就是我前面提到的那样安装时统一用英文环境export LANGen_US.UTF-8 ./runInstaller等安装完成、建库完成之后再切回中文环境用数据库都不受影响因为数据库内部的字符集是 AL32UTF8和系统 locale 无关。如果项目要求必须用中文界面那需要装中文字体。麒麟桌面版一般自带中文字体但 Server 版往往没有dnf install -y fonts-chinese fontconfig fc-cache -fv装完字体之后重新启动 runInstaller界面乱码一般能解决。至于文本编辑器乱码很多人在改 tnsnames.ora、listener.ora 的时候会发现中文注释全成乱码。可以调整 /etc/vimrc 加一行set encodingutf-8 fileencodingsutf-8,gbk,gb2312这样打开文件时会自动按 UTF-8 优先识别老文件是 GBK 编码的话也能自动认。另外还有个小技巧如果你通过 VNC 或 X11 转发安装看到界面字符错位或按钮不显示多半是分辨率太低或者字体渲染问题。把 VNC 分辨率调到 1280x1024 以上并且确保安装用户的环境变量里有正确的 DISPLAY通常能解决大部分显示异常。补一个检查 DISPLAY 的小命令echo $DISPLAY如果是 :1.0 或者类似输出说明 X 环境已经指到了 VNC 桌面。如果为空说明当前会话没有图形环境这时候启动 runInstaller 会报“Unable to access X display”之类的错需要在命令行显式指定export DISPLAY:1.05.4 数据库基础验证与后续建议最后建完库、拉起服务、放通端口之后用 oracle 用户登录数据库跑最基本的验证sqlplus / as sysdba SELECT name, open_mode FROM v$database; SELECT username FROM dba_users WHERE username IN (SYS,SYSTEM);能查出来说明数据库已经正常 open。再测试一下 PDBALTER PLUGGABLE DATABASE orclpdb OPEN; SHOW PDBS;如果你打算让 PDB 也随 CDB 一起启动可以执行ALTER PLUGGABLE DATABASE ALL OPEN;如果有需要可以用 Oracle 自带脚本把 PDB 的状态保存到 CDB 启动配置里。数据库稳定跑起来以后我每次交付前还会做几件事确认归档日志模式、备份策略、监控连接数。你有空也可以把这部分补上。最终交付时至少保证数据库能重启后自动起来、监听端口对外可达、客户端用 sqlplus 能连进 PDB 或 CDB这样项目才算真正跑通。我自己的习惯是交付前一定要完整重启一次服务器模拟断电恢复的场景看看 Oracle 能不能跟着系统自动起来。很多时候安装时正常重启后就不行了这一步能帮你把隐藏问题提前揪出来。
返回列表