
装Oracle 19c之前你得先搞清楚这几件事说来惭愧我从Oracle 10g一路装到19c踩过的坑比大多数人见过的都多。Oracle数据库历来是出了名的“能装不一定能跑能跑不一定好使”尤其是19c这个版本既要处理Linux系统层面的兼容性又要理解容器数据库CDB和可插拔数据库PDB这种新架构很多从11g、12c时代过来的老手第一次接触都会有点懵。这篇文章我打算彻底把Oracle 19c的安装配置过程掰开揉碎从最底层的环境准备、目录规划、内核参数调整到图形化界面安装的每一步选项怎么选再到监听器配置、建库逻辑、PDB创建最后把客户端连接、环境变量、开机自启这些收尾环节全部过一遍。文章里出现的每一条命令、每一个配置参数都是我在真机上反复验证过的你照着操作基本不会出大问题。写这篇的原因是网上的大多数教程都太“跳”了很多关键的坑位和选择逻辑完全没讲清楚。比如为什么装完数据库软件之后还要单独跑一遍netca和dbca为什么不建议在安装时直接选择创建数据库还有那个CDB和PDB的选择选错了后续管理方式完全不同。这篇文章专门解决这类问题适合刚入门的新手也适合那些从老版本迁移上来、想深入了解19c新特性的工程师。1. 安装前的准备工作这一步偷懒后面全是坑1.1 版本选择和解压介质先明确一个概念Oracle 19c其实就是Oracle 12c Release 2的最终长期支持版它的内部版本号是12.2.0.3。Oracle自己对外宣传叫19c目的是统一命名因为从19c开始Oracle进入了年度发布模式但19c属于长期支持版本这也是为什么目前生产环境中大量新部署都选择19c的原因。去Oracle官网下载时你会看到两个主要文件LINUX.X64_193000_db_home.zip和LINUX.X64_193000_db_home.zip对应的Symbolic Link版本。前者是完整安装包后者是软链接版本主要用于将ORACLE_HOME直接放在共享存储上的场景我们普通用户下载完整版就好。下载完成后不一定非要解压再安装Oracle 19c支持直接从ZIP包进行安装但我个人建议还是先统一解压到一个单独的目录方便后续排查问题。解压后的文件会被释放到一个名叫Database的目录下里面就是Oracle数据库软件的全部内容。1.2 操作系统环境检查Oracle 19c对Linux系统的最低要求是RHEL 7.4及以上CentOS 7.4、Oracle Linux 7.4都没问题。如果你的系统是CentOS 7.x但版本较低可以先执行yum update把内核升级上去否则安装检查会报操作系统版本不兼容。内存方面Oracle官方文档标称最低1GB内存但这真的只是理论值。实际生产环境建议至少4GB如果你是在虚拟机上做实验或者学习那也要2GB打底否则安装过程会卡到怀疑人生。还有一个容易被忽略的就是Swap分区。Oracle安装检查中有一个专门的Swap检查项物理内存在2GB到16GB之间时Swap要求等于物理内存大小物理内存超过16GB时Swap建议设置为16GB即可。虚拟机上如果没分配Swap安装到一半会报“Physical Memory Check Failed”非常烦人。磁盘空间这块Oracle 19c完整安装大概需要8GB左右的空间这是指你将ORACLE_HOME放在单独目录后的空间占用。此外还需要预留充足的空间给数据文件、控制文件、归档日志建议总的可用空间不少于20GB。# 检查系统版本 cat /etc/redhat-release # 查看内存和Swap free -h # 查看磁盘空间 df -h # 查看CPU核心数 nproc这几个命令在安装前务必跑一遍确认环境满足要求。否则Oracle的安装检查阶段会报各种错误虽然可以强行忽略部分检查项继续安装但很多基础项如依赖包缺失、Swap不足等问题强行安装后很容易导致系统运行不稳。1.3 主机名和/etc/hosts配置Oracle对主机名的解析非常敏感这一点很多新手会栽跟头。如果你的服务器没有配置/etc/hosts安装时大概率会遇到节点间通信异常或者监听器无法启动的问题。使用HostName命令查看当前主机名然后编辑/etc/hosts文件把主机的IP地址和主机名绑定。# 查看当前主机名 hostname # 编辑hosts文件 vim /etc/hosts在hosts文件里加上这样一行192.168.1.100 oradb-server这个配置看起来很基础但它的意义在于Oracle通过主机名定位服务器时需要能够解析到准确的IP。如果主机名解析到127.0.0.1上监听器就会只绑定localhost外部客户端永远连不上。2. Oracle安装环境的系统级配置2.1 关闭防火墙与SELinux数据库服务器通常不应该再运行防火墙软件做包过滤因为在生产环境中DB服务端口由独立的硬件防火墙或者云安全组来控制。本机防火墙如果开着往往会拦截客户端连接。当然我这里说的是实验环境和内网环境你如果自己管理服务器可以根据公司安全策略调整很多云服务器的安全组规则在控制台配置本地防火墙建议关掉。CentOS 7开始使用firewalld服务# 停止防火墙 systemctl stop firewalld systemctl disable firewalld # 查看防火墙状态 systemctl status firewalldSELinux建议也设为disabled因为Oracle官方文档就明确表示不支持在强制模式下运行虽然你可以配置SELinux布尔值来放行Oracle相关操作但实际运维中关闭SELinux是最省心的。修改/etc/selinux/config文件vim /etc/selinux/config将SELINUXenforcing改成SELINUXdisabled重启系统才能完全生效。2.2 安装依赖包Oracle 19c的安装对依赖包检查很严格缺少任何一个基本包都会导致无法继续。官网给出了非常长的依赖包列表我这里的做法是直接用yum一次性把所有运行时需要的包全部装上避免来回补包。yum -y install binutils compat-libcap1 compat-libstdc-33 gcc gcc-c glibc glibc-devel ksh libaio libaio-devel libgcc libstdc libstdc-devel libXext libXtst libX11 libXau libXi make sysstat xorg-x11-utils unixODBC unixODBC-devel这里有个特殊包要单独说一下compat-libstdc-33。在CentOS 8和部分新版本仓库中这个包已经找不到了安装时会提示No package available。如果遇到这种情况可以跳过它或者从el7的仓库源手动下载rpm包安装。实际上安装检查中缺少这个包通常是可以忽略的。还有ksh包bash虽然也能执行脚本但Oracle的很多配置脚本尤其是root.sh内部用的是ksh语法少了ksh很容易出现莫名其妙的脚本执行错误。2.3 创建用户与目录Oracle不允许用root用户直接安装数据库必须使用普通用户。我们需要创建oracle用户并把它加入oinstalloracle inventory组和dba数据库管理组两个组中。组和用户的命名其实是有讲究的。oinstall组是所有Oracle软件共用的清单管理组负责维护Oracle Inventory目录dba组则用于数据库管理员权限具备SYSDBA权限的用户必须属于dba组。# 创建用户组 groupadd oinstall groupadd dba # 创建用户并设置密码 useradd -g oinstall -G dba oracle passwd oracle # 创建数据库基础目录 mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1 mkdir -p /u01/app/oraInventory # 设置目录属主和权限 chown -R oracle:oinstall /u01/app chmod -R 775 /u01/app目录规划这块我想多说几句。很多人喜欢把ORACLE_HOME直接装到/home/oracle目录下这样确实简单但不推荐。Oracle官方推荐的OFA标准就是使用/u01/app这样的挂载点结构把ORACLE_BASE和数据库文件分开放在不同的磁盘或分区上这样做的好处是数据库软件升级时只需要替换ORACLE_HOME目录ORACLE_BASE下的数据文件、配置文件等完全不受影响当数据盘故障时也不会拖累软件目录。在这个规划中ORACLE_BASE/u01/app/oracleORACLE_HOME/u01/app/oracle/product/19.3.0/dbhome_1ORACLE_INVENTORY/u01/app/oraInventory这种结构是Oracle运维领域约定俗成的标准布局一定要记住。2.4 内核参数调整Oracle对共享内存、信号量等内核参数有严格要求这些参数直接决定了数据库能否高效运行。安装包里的预检查程序会读取系统的这些值不达标时直接警告或报错。编辑/etc/sysctl.conf文件加入以下内容# 共享内存大小单位为字节设置为物理内存的一半 kernel.shmmax 2147483648 # 最大共享内存段数量 kernel.shmall 524288 # 信号量 kernel.sem 250 32000 100 128 # 文件句柄最大数 fs.file-max 6815744 # IPv4网络端口范围 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这些参数的含义我简单解释一下shmmax和shmall控制共享内存的最大值和页面数量Oracle SGA就是通过共享内存实现的sem信号量参数控制进程间通信的最大信号量数量Oracle后台进程之间的协调全靠它ip_local_port_range决定了应用服务器连接数据库时本机可用的临时端口范围设置太小会导致高并发时无法建立新连接。修改完执行sysctl -p让参数生效。然后还要修改/etc/security/limits.conf调整oracle用户的资源限制oracle soft nofile 1024 oracle hard nofile 65536 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft stack 10240 oracle hard stack 32768这几个参数分别控制了打开文件数、进程数、栈大小。Oracle在实际运行过程中需要打开大量文件描述符默认的1024肯定不够所以必须调高。2.5 图形化界面支持Oracle 19c的安装过程支持两种模式图形化X Window和静默安装。对于第一次安装的人来说图形化界面更直观也更容易理解每一步在做什么。但很多服务器是纯命令行环境没有安装桌面这就需要使用X11转发。如果你使用的是Windows客户端可以用MobaXterm或者Xshell配合Xmanager来实现X11转发。以MobaXterm为例内置的X Server会自动启动只要在SSH连接设置里勾选转发X11连接然后用oracle用户执行安装命令时图形界面就会显示在本地桌面上。如果X11转发一直失败检查/etc/ssh/sshd_config文件中的X11Forwarding是否设为yes还要安装xorg-x11-xauth包yum -y install xorg-x11-xauth3. Oracle 19c数据库软件安装全过程3.1 环境变量配置在启动安装程序之前先切到oracle用户配置好环境变量。这些变量是给后续所有Oracle相关命令使用的。su - oracle vim ~/.bash_profile在文件末尾添加export ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_BASE/product/19.3.0/dbhome_1 export ORACLE_SIDORCLCDB export PATH$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH$ORACLE_HOME/lib:/usr/lib注意ORACLE_SID这个变量如果你后面使用dbca创建容器数据库时改了名字这个变量也要相应更新。ORACLE_SID决定了你当前的会话连接的是哪一个数据库实例。3.2 启动安装程序进入解压后的Database目录执行cd /u01/database ./runInstaller如果一切顺利会弹出Oracle 19c的图形化安装界面。如果你看到的是乱码是字符集问题可以在执行前设置LANGC来避免中文显示异常export LANGC ./runInstaller这一步跑起来后会看到Oracle Universal Installer界面接下来就是安装配置的核心选择环节。3.3 安装选项仅安装软件还是创建数据库安装程序会问你“Configure Security Updates”这里直接取消勾选“I wish to receive security updates via My Oracle Support”然后下一步点Yes跳过。下面是“Download Software Updates”也直接跳过选择“Apply updates”不需要做因为你下载的本来就是最新版。关键的一步来了“Installation Type”选择时有“Create and configure a single instance database”和“Set Up Software Only”两个选项。很多新手会直接选第一个让安装程序一气呵成地搞定数据库创建。但我强烈建议你选择第二个“Set Up Software Only”原因有三个第一安装程序自动创建的数据库使用默认配置很多参数不符合实际业务场景后期调整更麻烦 第二数据库创建是独立的业务逻辑用专门的DBCA工具来做更可靠出问题也好排查 第三分开执行可以让你更清晰地理解Oracle的组件结构积累经验。3.4 Database Edition选择选择“Oracle Real Application Clusters”时如果你的机器只有单机直接选“Single instance database installation”即可。版本选择上选“Enterprise Edition企业版”虽然标准版便宜很多但标准版缺少很多性能诊断、分区、压缩等功能在企业应用中限制很大学习和测试阶段更是要装企业版才能接触到全部特性。3.5 ORACLE_HOME路径确认这一步会显示你前面配置的ORACLE_HOME路径确认它是/u01/app/oracle/product/19.3.0/dbhome_1同时Oracle Base显示为/u01/app/oracle。如果这里显示不对不要继续往下走退回去检查环境变量配置。因为ORACLE_HOME一旦装到错误的位置后续迁移是极其痛苦的。3.6 安装检查和root脚本执行安装程序会进行一次全面的环境预检包括依赖包、内核参数、用户权限等。如果出现failure点开详情查看原因按提示修复后返回界面点击Check Again重新检查。常见的问题就是某些依赖包没装全或者内核参数未生效。这里不要点击“Ignore All”因为有些检查项本来就允许忽略但有些是硬性条件强装后后患无穷。等待安装进度走到100%时界面会弹出一个窗口要求以root身份执行两个脚本orainstRoot.sh和root.sh。你需要开一个新的终端窗口执行su - root # 第一个脚本 /u01/app/oraInventory/orainstRoot.sh # 第二个脚本 /u01/app/oracle/product/19.3.0/dbhome_1/root.shroot.sh执行过程中会问你是否将本地bin目录链接到Oracle的一些工具直接输入y回车即可。执行完毕回到安装界面点击OK安装程序结束后软件安装就算完成。3.7 各选项选择的底层逻辑我要重点强调一下为什么选择“仅安装软件”而不是“创建数据库”。Oracle软件的安装和数据库实例的创建其实是两个独立的生命周期阶段。软件安装只需要解压文件、配置权限、注册组件而数据库实例的创建涉及到控制文件、数据文件、重做日志的初始化以及SGA和PGA的分配。安装程序自带的建库功能虽然方便但它不会帮你考虑表空间规划、在线重做日志组大小、归档模式等生产环境必须关注的配置。换句话说先把软件装好相当于把房子的主体框架搭建完成再通过DBCA建库则是按照你的需求规划房间布局和装修。后者才是你能完全掌控全局的关键环节。4. 监听器与数据库实例创建4.1 配置监听器监听器是Oracle数据库接收客户端连接请求的桥梁。没有监听器客户端连不上数据库即使你本机SQL*Plus能进去也没用应用服务器更是无从谈起。使用netcaNetwork Configuration Assistant工具来创建监听器cd $ORACLE_HOME/bin ./netca图形界面会弹出选择“Listener configuration”直接默认下一步即可。默认端口是1521如果你的机器上1521端口已经被其他服务占用需要在端口配置页面改成其他端口。监听器创建完成后可以使用lsnrctl命令检查# 启动监听器 lsnrctl start # 查看监听器状态 lsnrctl status正常状态下状态应该显示“Service RUNNING”并列出和监听器绑定的服务名。如果这里显示失败多半是端口被占用或者/etc/hosts没有配好。4.2 DBCA建库容器数据库还是非容器数据库接下来的重点来了。执行DBCADatabase Configuration Assistantcd $ORACLE_HOME/bin ./dbca这一步会进入数据库创建向导界面选项比安装程序还多我把每一步的关键选择都列出来。在“Database Operation”选择页选“Create a database”这时会看到全局数据库名称和SID的配置。全局数据库名称通常写成ORCLCDB的形式PDB名称可以设置成ORCLPDB1之类的。最关键的是“Creation Mode”这一步你会看到两个选项Create a container database容器数据库即CDB模式Create a non-container database非容器数据库这里就是19c最核心的架构变化。CDB模式下你创建的其实是一个容器数据库环境里面可以创建多个PDB每个PDB从应用角度看就是一个独立的数据库有自己的数据文件、用户和权限。非容器数据库模式则是Oracle 12c之前的老传统架构一个实例对应一个数据库。我的建议是如果你是生产环境新部署并且没有历史包袱直接用CDB模式如果你是从老版本迁移过来的应用里大量使用了dblink、数据库链接等特性可能出现兼容问题就先选non-container模式等应用适配后再考虑迁移到CDB。选完架构后“Database Files”存储类型选择File System即可不需要ASM因为ASM是RAC环境或者大型生产库才需要的东西。后续页面的选项例如“Fast Recovery Option”建议启用设置快速恢复区这个相当于Oracle的回收站机制对误操作后的数据恢复非常有用“Sample Schemas”如果你只是为了学习可以勾选它会创建HR等示例用户方便练习。最后DBCA会要求为SYS、SYSTEM等管理用户设置密码。密码要设置得复杂一些包含大小写字母和数字长度不小于8位否则密码验证会不通过。设置完密码后Oracle还会问是否启用EM Express端口可以选5500端口。点击Finish后数据库开始创建整个过程大概持续20到40分钟取决于服务器性能。4.3 数据库创建后的验证创建完成后最基础的就是验证SQL*Plus能否登录# 使用oracle用户登录 sqlplus / as sysdba这个命令之所以能直接以sysdba身份登录是因为oracle用户的$ORACLE_HOME/bin目录下的sqlplus命令使用了操作系统认证无需密码。登录成功后你会看到SQL提示符。查看数据库基本信息-- 查看当前数据库状态 SELECT name, open_mode FROM v$database; -- 查看数据库版本 SELECT * FROM v$version;4.4 PDB可插拔数据库的基本管理如果你创建的是CDB模式还需要熟悉几个基本的PDB管理命令。在CDB模式下启动数据库实例时默认只会启动CDB本身PDB处于挂载状态。要让PDB对外提供服务需要执行-- 查看所有PDB show pdbs; -- 启动某个PDB ALTER PLUGGABLE DATABASE ORCLPDB1 OPEN; -- 查询PDB中的表 ALTER SESSION SET CONTAINER ORCLPDB1;如果你希望PDB在实例启动时自动打开可以设置ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE;这个命令会让Oracle记住PDB的当前状态下次实例启动时自动恢复到打开状态。不用这个命令的话每次重启服务器后你都得手动打开PDB很烦人。5. 环境变量补充配置与远程连接5.1 TNS_ADMIN和tnsnames.ora要让客户端程序通过网络连接数据库需要在客户端配置tnsnames.ora文件。对于本机操作我们也可以配置tnsnames.ora来简化连接过程。Oracle 19c默认的tnsnames.ora位置在$ORACLE_HOME/network/admin目录下。我用编辑器打开看了一下里面内容大致是ORCLCDB (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST oradb-server)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME ORCLCDB) ) ) ORCLPDB1 (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST oradb-server)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME ORCLPDB1) ) )这样配置好之后就可以用服务名连接数据库sqlplus system/passwordORCLPDB15.2 数据库远程连接验证从Windows客户机上可以使用PL/SQL Developer、SQL Developer等工具连接。注意一点如果连接总报“ORA-12541: TNS:no listener”或者“ORA-12514: TNS:listener does not currently know of service requested”错误第一个先检查监听器状态第二个要确认SERVICE_NAME是否写对了尤其PDB的SERVICE_NAME和CDB的SERVICE_NAME是不同的。还有一个常见坑连接PDB时要用PDB的SERVICE_NAME不是PDB的名称本身。DBCA创建PDB时默认的SERVICE_NAME通常是PDB名称加上域名后缀例如ORCLPDB1或ORCLPDB1.example.com。输入前用lsnrctl services命令查看一下最稳妥。5.3 设置开机自动启动一个现实问题是数据库服务器重启后Oracle实例和监听器默认不会自动启动。如果每次重启后都要手动执行sqlplus和lsnrctl那运维成本就太高了。我习惯用systemd托管Oracle相关服务。创建两个服务文件第一个给监听器用第二个给数据库实例用。创建/etc/systemd/system/oracle-listener.service[Unit] DescriptionOracle Database 19c Listener Afternetwork.target [Service] Typeforking Useroracle Groupoinstall ExecStart/u01/app/oracle/product/19.3.0/dbhome_1/bin/lsnrctl start ExecStop/u01/app/oracle/product/19.3.0/dbhome_1/bin/lsnrctl stop RemainAfterExityes [Install] WantedBymulti-user.target创建/etc/systemd/system/oracle-database.service[Unit] DescriptionOracle Database 19c Instance Requiresoracle-listener.service Afternetwork.target oracle-listener.service [Service] Typeforking Useroracle Groupoinstall ExecStart/u01/app/oracle/product/19.3.0/dbhome_1/bin/sqlplus -S / as sysdba STARTUP; ExecStop/u01/app/oracle/product/19.3.0/dbhome_1/bin/sqlplus -S / as sysdba SHUTDOWN IMMEDIATE; RemainAfterExityes [Install] WantedBymulti-user.target然后启动服务systemctl daemon-reload systemctl enable oracle-listener systemctl enable oracle-database systemctl start oracle-listener systemctl start oracle-database这个配置有一个细节需要注意ExecStart命令中使用了语法而systemd的ExecStart默认使用/bin/sh执行/bin/sh在不支持的符号重定向上会报错。所以最好把启动命令写成一个单独的shell脚本再由systemd调用这个脚本。否则你可能会遇到服务启动失败的尴尬。#!/bin/bash # /home/oracle/startdb.sh ORACLE_HOME/u01/app/oracle/product/19.3.0/dbhome_1 export ORACLE_HOME export ORACLE_SIDORCLCDB export PATH$PATH:$ORACLE_HOME/bin $ORACLE_HOME/bin/lsnrctl start $ORACLE_HOME/bin/sqlplus -S / as sysdba EOF STARTUP; EOF chmod x /home/oracle/startdb.sh chown oracle:oinstall /home/oracle/startdb.sh然后把systemd服务里的ExecStart改成/bin/bash /home/oracle/startdb.sh顺手把监听器的停启也一并管理了省去分开维护两个服务的麻烦。6. 日常运维中常见的几个坑6.1 安装不完整时如何彻底卸载Oracle 19c装Oracle装到一半失败了或者软件装完了发现路径配错了想卸载干净重来这是很多新手都会遇到的情况。Windows下卸载Oracle非常难Linux下虽然好一些但也要处理好几个层面的残留。在CentOS/RHEL上彻底卸载Oracle 19c需要执行以下步骤# 1. 停止监听和数据库 su - oracle lsnrctl stop sqlplus / as sysdba EOF SHUTDOWN ABORT; EOF exit # 2. 删除Oracle相关目录 su - root rm -rf /u01/app/oracle rm -rf /u01/app/oraInventory # 3. 删除oracle用户和组 userdel -r oracle groupdel oinstall groupdel dba # 4. 清理内核参数把/etc/sysctl.conf中Oracle相关配置注释掉 # 5. 清理limits.conf中Oracle相关配置这里有一个Linux环境特有的问题如果安装过程中Oracle已经自动创建了/etc/oraInst.loc文件卸载时你需要手动删除它rm -f /etc/oraInst.locWindows上关于如何卸载oracle19c注册表的残留是不少人反复踩坑的重灾区。它会自动安装一个Windows服务手动删除不干净的话注册表里会有大量残留。Windows下的做法是先用Universal Installer自带的反安装程序deinstall再手动删除C盘Program Files下的Oracle目录最后用regedit搜索并清除Oracle相关的注册表项。但这个过程比较繁琐稍有不慎可能导致系统其他软件异常建议有经验的人来操作。6.2 SYSAUX表空间占用率过高很多人在使用19c一段时间后发现SYSAUX表空间占用率居高不下这主要和AWR快照、优化器统计信息的保留策略有关。SYSAUX是Oracle 10g之后引入的辅助系统表空间用于存放AWR基线、统计信息、EM相关的数据。如果SYSAUX莫名其妙膨胀最常见的原因是AWR快照保留策略太激进。我遇到的一个真实案例是某台测试机上SYSAUX从5GB涨到12GB排查下来发现是Statspack和AWR基线数据累计太多。处理方法-- 查看AWR快照保留策略 SELECT * FROM dba_hist_wr_control; -- 修改保留策略只保留7天每小时收集一次快照 EXEC DBMS_WORKLOAD_REPOSITORY.modify_snapshot_settings(interval 60, retention 10080);AWR快照默认保留8天每次快照间隔一小时如果数据库负载较高快照数据非常庞大。适当调小保留策略能有效控制SYSAUX的膨胀。6.3 字符集问题安装时如果没特别注意字符集默认的AL32UTF8对于中文数据来说是可以正常存储的。但如果从其他数据库迁移过来源库是ZHS16GBK字符集导入数据时就要特别注意否则很容易出现乱码或者“ORA-12899: 列的值太大”错误。字符集最好在建库时定下来因为修改数据库字符集的操作极其繁琐而且风险很高。我们知道字符集分为数据库字符集和国家字符集数据库字符集用ZHS16GBK还是AL32UTF8要按实际情况来定。如果应用会存储多国语言直接选AL32UTF8如果只存中文和英文ZHS16GBK更省空间。6.4 备份文件跨版本恢复热搜词里有一个问题很有代表性“oracle19c的备份文件能在oracle11g上恢复出来吗”这个问题的答案其实很简单不行。数据文件的物理结构和控制文件格式在Oracle 12c之后发生了很大变化PDB/CDB这种架构在11g中根本不存在。备份恢复有一个基本原则高版本的备份不能恢复到低版本低版本的备份可以恢复到高版本。所以如果你的核心业务已经在19c上了将来想恢复到11g做准备这是个不成立的方案。正确的做法是使用Oracle Data Pump工具做逻辑导出expdp生成dmp文件后导入到11g。但跨大版本使用expdp时要注意版本兼容参数导出时指定VERSION11.2.0导入时不识别高版本数据字典导出的格式。还有一种更折中的方式是通过SQL Developer或者第三方工具导出成SQL脚本重建表结构和数据但大数据量下效率很低不推荐。6.5 监听器启动时报错tns-12545Linux系统上配置监听器时常见的一个错误是“TNS-12545: Connect failed because target host or object does not exist”。这个错误多半是hosts文件里的主机名解析出了问题。解决办法很简单检查/etc/hosts里是否存在主机名对应正确IP的行确认HOST的参数没有绑定到127.0.0.1使用hostname命令确认当前主机名和配置时一致有的服务器修改了主机名但忘记改hosts导致监听器尝试解析旧主机名也会出现这个错误。处理方式就是把hosts里的主机名同步成当前系统的实际主机名。6.6 密码过期导致应用连接失败19c默认的密码有效期是180天这是从11g就开始的默认策略。很多系统上线后跑了大半年突然某天应用报连接失败一看日志ORA-28001: the password has expired这个问题甚至能逼疯运维人员。建库完成后我强烈建议你调整密码生命周期策略-- 查看当前profile限制 SELECT profile, resource_type, resource_name, limit FROM dba_profiles WHERE profileDEFAULT; -- 修改密码永不过期 ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;有些运维同事会有顾虑认为密码永不过期不安全。这种担忧可以理解但生产系统中更稳妥的做法是应用连接账号可以采用密码永不过期严格的网络访问控制人工账号则保留密码定期更换策略。这种分离管理方式既能保证安全又能避免应用因密码过期而大面积故障。7. 常用的基础管理命令数据库装好后日常巡检和操作中你会频繁用到下面这些命令我顺便把它们整理出来。希望能帮你少走弯路。# 查看数据库状态 ps -ef | grep oracle # 从操作系统层面查看Oracle服务进程 ps -ef | grep DBW0 # 查看监听器状态 lsnrctl status # 停止/启动数据库sqlplus内执行 sqlplus / as sysdba SQL SHUTDOWN IMMEDIATE; SQL STARTUP;关于SHUTDOWN的参数这里简单提一下SHUTDOWN NORMAL是最温和的关闭方式但会等待所有连接的客户端主动断开SHUTDOWN IMMEDIATE是回滚未提交事务后立即关闭不会等待连接断开是日常最常用的关闭方式SHUTDOWN ABORT是强制关闭相当于直接拔电源只在迫不得已时使用。# 查看表空间使用率 SELECT tablespace_name, ROUND(SUM(bytes) / 1024 / 1024 / 1024, 2) AS size_gb FROM dba_data_files GROUP BY tablespace_name; # 查看所有PDB SELECT name, open_mode FROM v$pdbs;写在最后Oracle 19c的安装配置说难也难说简单也简单。它不像MySQL那样解压就能用也不像PostgreSQL那样initdb加启动就完事了。你要理解它的目录结构、身份认证、初始化原理还要清楚在安装过程中的多个关键分叉口上为什么要做这样的选择。我个人装了这么多年的Oracle最大的体会是安装Oracle最忌讳的就是为了快而跳过细节安装前花半小时认真做环境检查、目录规划比装完出现问题再排查效率高得多。特别是内核参数、hosts文件、依赖包这三类基础配置缺一个都可能让后面所有工作白费。本文中提到的所有命令和参数都在CentOS 7.9、Oracle 19.3版本上实测过。如果从不同的Linux发行版或者容器环境中安装命令可能略有差异但底层的架构和思路是通用的。你在安装过程中遇到什么报错或者对某个配置有更好的方案欢迎在评论区交流。