免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Oracle 19c 从安装到卸载:监听配置、备份恢复与跨版本迁移实战

Oracle 19c 从安装到卸载:监听配置、备份恢复与跨版本迁移实战 Oracle 19c 是目前生产环境里使用频率最高的长期支持版本之一但真正把它装明白的人并不多。多数资料只讲到“下一步下一步点完”一旦遇到监听连不上、注册表卸载不干净、数据文件跨版本恢复失败这类问题新手往往卡在原地。这篇教程会以 Windows Server 2019 作为主要演示环境把安装、配置、卸载、备份恢复兼容性这几件事一次讲透中间也会穿插 Linux 环境下的差异点。内容基于我多次在企业服务器和虚拟机上的实操经验每一步都附了选择和理由不是单纯罗列界面截图。1. 装前功课版本形态与部署决策1.1 19c 为什么值得现在还在学Oracle 19c 属于 12c 系列架构的最终长期支持版本。它引入了多租户架构CDB/PDB改变了以往“一个实例对应一个独立数据库”的传统模式。相比 11g19c 在性能诊断、自动维护任务、安全策略、分区扩展上都有大量改进而且官方对 19c 的终端支持周期很长直到 2027 年 4 月前仍会持续提供安全补丁。很多人从 11g 迁移上来最大的不习惯就是“实例”和“数据库”的关系变了。在 11g 中一个实例装载一个数据库看到多少个 SID 就对应多少个独立的库而在 19c 中一个实例可以管理一个容器数据库 CDB里面再挂多个可插拔数据库 PDB。这种变化带来的影响非常直接连接字符串不再只是 SID更多时候用的是 SERVICE_NAME每天做备份、恢复的对象也跟着变成了整个 CDB 或某个 PDB。1.2 容器数据库与非容器数据库选 CDB 还是选 Non-CDB这是一个绕不开的问题。19c 安装和 DBCA 建库时都会问你是否把数据库创建为容器数据库。网上说的“非容器数据库Non-CDB”就是指传统模式它和 11g 的体验非常接近。但我个人的建议是新装的系统不要再用非容器模式。原因有几点从 Oracle 20c 开始非容器数据库已经被彻底废弃Oracle 官方不再支持以传统模式创建新库。19c 中虽然还保留 Non-CDB 选项但安装向导会明确提示它已经过时后续版本不会再提供。PDB 模式在资源隔离、迁移和克隆方面优势太明显。比如你要起一个测试实例直接从生产 PDB 拔插克隆即可而传统模式只能靠整库复制或备份恢复。涉及 RMAN 备份、Data Guard 时PDB 模式的管理方式和传统模式差异虽然存在但官方文档覆盖完整习惯之后并不复杂。在安装向导里如果你选择了“创建为容器数据库”通常会让你填写一个 PDB 名称常见命名为ORCLPDB。最终你会得到 CDB 根容器CDB$ROOT、种子容器PDB$SEED以及一个可用的用户 PDB。日常应用连接的是 PDBDBA 日常管理很多时候也只需要盯着 PDB 就行。1.3 企业版、标准版与单机/集群怎么选Oracle 19c 的版本选择决定了你后续能用哪些功能。企业版Enterprise Edition包含分区、压缩、RAC、Data Guard、高级安全等完整功能标准版Standard Edition 2只包含基础功能而且只能用在最多 16 颗 CPU 插槽的服务器上。学习用途建议直接用企业版因为很多培训资料、网上案例都基于企业版功能缺失会导致案例跑不通。安装拓扑上单机版适合学习和中小型业务RAC 集群用于高可用场景。这篇教程以单机版为主。如果你以后打算上 RAC19c 的 Grid Infrastructure 安装是另一套环境但数据库软件本身的安装方式一致。目录规划也要提前做。Windows 环境下典型路径是ORACLE_BASED:\app\oracleORACLE_HOMED:\app\oracle\product\19.0.0\dbhome_1数据文件目录D:\app\oracle\oradata不要图省事把 Oracle 装在 C 盘根目录系统盘空间紧张会导致数据库临时文件膨胀时写不进去。Oracle 的软件目录也不要有中文和空格否则安装程序容易出现不确定性错误。2. 环境准备最容易被低估的一步2.1 硬件与操作系统要求很多人安装失败不是 Oracle 的问题而是最基础的环境没到位。Windows Server 2019 下运行 Oracle 19c建议至少满足CPU2 核以上生产环境根据业务量评估。内存低于 4GB 不建议安装安装过程本身就可能卡死跑实际业务最少 8GB。Windows 系统自身占用加 Oracle 实例启动内存低于 4GB 很容易频繁使用页面文件。磁盘ORACLE_HOME 安装大约需要 8GB 到 10GB 空间加上数据库数据文件、归档日志、闪回区建议单独准备一块剩余空间不低于 30GB 的磁盘。操作系统Windows Server 2012 R2、2016、2019、2022 均可Windows 10/11 桌面版也可以装来做学习环境但生产环境建议服务器版。安装前确认当前用户具备本机管理员权限。右键点击 setup.exe 时习惯性选择“以管理员身份运行”这一步能避免一大半的权限类报错。2.2 安装包下载与解压细节Oracle 19c 的安装包可以从 Oracle Software Delivery Cloud 或 Oracle Technology Network 获取。你拿到的通常是一个或多个 zip 压缩包。注意把压缩包全部下载完全后再统一解压到同一个目录比如D:\oracle_install\。解压完成后目录下会有一个setup.exe。解压时我踩过的坑是直接用 Windows 自带解压工具去解压大文件偶尔出现“无法写入”或解压不完整的现象。建议使用 7-Zip 等工具解压前确认所有分卷都在同一级目录否则安装程序可能提示找不到某些文件。路径不要带中文和空格例如不要放在D:\新建文件夹\oracle 19c\这种目录下。安装程序的某些脚本对空格处理不友好后期配置监听器时容易报路径解析错误。2.3 安装前的系统检查Windows 环境下Oracle 19c 安装向导会在“先决条件检查”阶段自动检测系统配置。常见需要提前处理的.NET Framework 3.5Windows Server 2019 默认没有启用 3.5 版本安装程序有时会提示缺少这个组件。通过“服务器管理器 - 添加角色和功能 - .NET Framework 3.5 功能”启用即可。hostname 解析打开C:\Windows\System32\drivers\etc\hosts确保有一条记录指向当前机器的主机名例如127.0.0.1 localhost 192.168.1.10 db-server主机名解析异常会导致监听器启动后只能通过 IP 连接或者连接时长时间卡住。杀毒软件安装前建议暂时禁用实时监控或把解压目录、ORACLE_BASE 目录加入白名单。杀毒实时扫描会让复制文件阶段非常慢极端情况下会误删 Oracle 的某些组件文件。共享临时目录权限如果安装程序报INS-30131错误通常是执行安装所需临时目录的权限不足。检查系统临时目录以及解压目录的“Users”组是否有读写权限必要时把安装目录的安全权限打开。3. 正式安装从向导选择到实例落地的全程3.1 安装向导逐项拆解双击setup.exe之后跟着向导一步步走但有几处不能闭着眼点。第一步是“配置安全更新”。如果你的机器没有外网或不想接收更新通知直接取消勾选“我希望通过 My Oracle Support 接收安全更新”后续会弹出一个警告确认跳过即可。紧接着是“选择安装类型”。这里有两个大分支创建并配置数据库安装完直接建一个实例。仅设置软件只装数据库软件后续用 DBCA 手动建库。这两种模式各有适用场景后面我会单独展开。继续往下安装程序会让你选“桌面类”还是“服务器类”。桌面类隐藏了很多高级选项适合学习和个人开发服务器类适合生产环境能看到更完整的配置项。我不建议在生产环境用桌面类因为数据库内存比例、归档模式等参数是在后续配置中完成的桌面类建库后你还是得手动调整。服务器类只是多几步选项操作难度没有本质区别。在“数据库安装选项”中企业版是默认值不要改成标准版除非你已经确认你的业务用不到企业版特性。然后是 Oracle 基目录和软件位置Oracle 基目录如D:\app\oracleOracle 软件位置如D:\app\oracle\product\19.0.0\dbhome_1数据库软件位置实际上是 ORACLE_HOME建议不要和基目录混在一起也不要放在数据文件目录下。ORACLE_HOME 包含可执行文件、动态库和网络配置数据文件目录是oradata把两者分开在卸载和备份时都非常清爽。安装向导进行到“数据库标识”这一步你需要设置全局数据库名如orclOracle 系统标识符 SID如orcl是否创建为容器数据库勾选后填写 PDB 名称如orclpdb如果勾选了容器数据库应用的连接目标就是这个 PDB。后续登录数据库之后通过show pdbs可以看到PDB$SEED和你创建的 PDB。管理口令的复杂度要求比较严格必须包含大写字母、小写字母和数字长度不少于 8 位。口令里不要有、#这类特殊字符虽然有一些允许但后续在 JDBC 连接串、脚本里比较容易踩坑。然后进入“先决条件检查”等几分钟后会显示各项检查结果。如果有“警告”项不一定是致命问题但最好看清楚是什么。常见的警告有“物理内存不足”“页面文件大小不足”。物理内存小于 4GB 时这里会直接失败页面文件不足可以调大系统虚拟内存后重试。检查通过后进入“概要”确认无误点“安装”。安装过程大约需要 15 到 30 分钟取决于机器性能。中途不要关闭终端窗口也不要断开远程桌面连接。如果网络不稳定建议在物理控制台或 VMware 控制台中执行安装因为远程桌面会话中断可能会让安装进程异常。3.2 典型报错的处理思路我多次遇到且最有代表性的错误有这么几个INS-30131无法访问暂存位置这个错最容易在服务器安装时出现。报错信息会提示“无法访问临时位置”。通常的解决办法是确认解压目录和系统临时目录有操作权限。在共享和安全设置中把 admin$ 共享打开或使用net share C$C:\临时开启管理员共享。也可以把安装包复制到服务器本地磁盘不要在共享磁盘上直接安装。不要一上来就用-ignorePrereq参数跳过先决条件检查宁可先排查权限问题。1521 端口被占用如果机器上之前装过其他 Oracle 版本或应用占用 1521 端口监听器配置会失败。安装前可以在 cmd 中执行netstat -ano | findstr 1521确认端口占用情况。如果被占用要么停掉旧服务要么在监听配置中使用其他端口比如 1522。密码复杂度不符合要求安装到最后一步创建数据库时如果密码不符合 OUI 的规则它会弹窗报错。不要试图用短密码绕过合规密码是底线。3.3 安装时建库 vs 先装软件后建库我推荐后者我在实际项目里绝大多数情况会选择“仅设置软件”也就是先装好数据库软件再用 DBCADatabase Configuration Assistant建库。原因是安装过程更稳定。安装程序只需关注软件和系统配置建库这种重操作放到独立工具里做出问题时定位更快。可控性更强。DBCA 建库时可以精细控制字符集、表空间、内存管理、归档模式、样本 Schema 等选项。容错更容易。如果建库失败只需要删掉创建出来的数据文件和实例保留数据库软件即可重试不用整个安装过程重来一遍。DBCA 建库的简要步骤是在开始菜单中找到Database Configuration Assistant选择“创建数据库”选择“高级配置”指定容器数据库类型、数据库名称、内存大小、文件存储位置、字符集。字符集建议在初始阶段就选对一般国内环境使用AL32UTF8或ZHS16GBK如果系统里面还有老的 GBK 业务ZHS16GBK 更稳后期修改字符集非常麻烦。DBCA 步骤稍多但每一步都有中文提示普通用户也能独立完成。4. 装完不等于能用监听、服务与连接配置4.1 环境变量与 Windows 服务数据库安装完成后很多初学者直接用 SQL*Plus 连接会提示sqlplus不是内部或外部命令。原因很简单PATH 环境变量没有自动配置到位或当前用户重新登录前环境变量尚未生效。Windows 下建议在“系统属性 - 环境变量”中配置ORACLE_HOME指向D:\app\oracle\product\19.0.0\dbhome_1ORACLE_BASE指向D:\app\oracleORACLE_SID指向默认实例名如orclPATH追加%ORACLE_HOME%\bin注意顺序%ORACLE_HOME%\bin应该放在 PATH 前面避免系统里如果有其他 Oracle 客户端版本时执行到错误版本的sqlplus。配置完成后重新打开一个 CMD 窗口执行echo %ORACLE_HOME%确认输出正确。同时检查 Windows 服务。打开 services.msc你会看到OracleServiceORCL数据库实例服务对应 SID 为 orcl。OracleOraDB19Home1TNSListener监听器服务。这两个服务建议设置启动类型为“自动”并确认已启动。4.2 listener.ora 与 tnsnames.ora 配置19c 安装过程中会自动生成一个默认监听器监听地址通常是TCP/IP协议的1521端口。但要注意监听器服务启动和数据库实例启动是独立的。你有可能遇到lsnrctl status显示监听器正常但数据库实例没启动也可能实例正常但监听器挂了。二者互不依赖。查看监听器状态lsnrctl status状态输出里会列出监听器别名、监听协议、服务摘要。如果输出中有Instance orcl, status READY说明实例已经注册到监听器如果只有UNKNOWN通常是静态注册一般不影响使用但动态注册更常见。监听器的配置文件在%ORACLE_HOME%\network\admin\listener.ora。默认内容大致是LISTENER (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST db-server)(PORT 1521)) ) )需要注意HOST写的是主机名还是 IP。如果是主机名确认 hosts 文件里有对应解析否则客户端连接时可能会解析失败。最简单的调试手段是把 HOST 改为机器的 IP 地址但固定 IP 环境这样做最省事DHCP 环境则不要用 IP。客户端能否连接关键看tnsnames.ora。文件同样在%ORACLE_HOME%\network\admin\下典型配置为ORCL (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST db-server)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME orcl) ) ) ORCLPDB (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST db-server)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME orclpdb) ) )第一段连接的是 CDB 根容器第二段连接的是 PDB。日常业务连接强烈建议连接 PDB因为根容器主要是管理用途业务表应建在 PDB 中。4.3 用 SQL*Plus 和 lsnrctl 验证配置完成后用 SQL*Plus 做一次完整验证。打开 CMD先验证操作系统认证登录sqlplus / as sysdba登录成功后执行SELECT status FROM v$instance;正常输出OPEN表示实例状态正常。再查看容器结构SHOW CON_NAME; SHOW PDBS;如果SHOW PDBS看不到ORCLPDB或状态不是READ WRITE说明 PDB 没有打开。进入 PDBALTER SESSION SET CONTAINER ORCLPDB; STARTUP;设置 PDB 随 CDB 自动启动可以执行ALTER PLUGGABLE DATABASE ORCLPDB SAVE STATE;这个设置非常关键否则服务器重启后 PDB 处于 MOUNTED 状态应用会直接连不上。再从客户端侧测试网络连接sqlplus system/口令//db-server:1521/orclpdb能正常进入说明监听、tnsnames、服务名都已就绪。4.4 Linux 环境下的自启动配置Linux 上安装完 19c默认 Oracle 服务不会随系统开机自动启动。需要手动编辑/etc/oratab把文件中的orcl:/u01/app/oracle/product/19.0.0/dbhome_1:N改为orcl:/u01/app/oracle/product/19.0.0/dbhome_1:YY表示允许使用dbstart命令自动启动实例。然后在系统服务中注册一个启动脚本或使用 systemd。下面是一段常见的最小化 systemd unit 文件[Unit] DescriptionOracle Database 19c Requiresnetwork.target Afternetwork.target [Service] Typeforking Useroracle Groupoinstall ExecStart/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbstart /u01/app/oracle/product/19.0.0/dbhome_1 ExecStop/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbshut /u01/app/oracle/product/19.0.0/dbhome_1 RemainAfterExityes [Install] WantedBymulti-user.target保存到/etc/systemd/system/oracle-19c.service后执行systemctl daemon-reload systemctl enable oracle-19c.service systemctl start oracle-19c.service有一点要提醒dbstart默认只启动/etc/oratab中标为Y的实例而且 PDB 是否自动打开还是要依赖ALTER PLUGGABLE DATABASE SAVE STATE。5. 卸载比安装更考验耐心的一件事标题里那个热搜词很真实“如何卸载 oracle19c 注册表”说明很多人在卸载环节被折磨过。Oracle 的卸载不像普通软件那样“控制面板-卸载”就能完全清理干净。如果清理不彻底下次重装会不断遇到端口冲突、服务残留、注册表冲突等问题。5.1 标准卸载流程先服务后组件再文件夹卸载的第一步是停掉所有 Oracle 相关服务包括实例服务和监听器服务。这一步非常重要否则后续删除文件时文件被占用会留下大量无法清理的文件。打开管理员 CMD执行lsnrctl stop sqlplus / as sysdba在 SQL*Plus 中执行SHUTDOWN IMMEDIATE; EXIT;然后打开服务管理器依次停止所有以Oracle开头的服务。接下来调用官方卸载工具。在%ORACLE_HOME%\deinstall\目录中有deinstall.bat。CMD 中执行cd D:\app\oracle\product\19.0.0\dbhome_1\deinstall deinstall.bat这个脚本会交互式询问是否将所有监听器列入删除列表默认全部。是否将所有数据库列入删除列表默认全部也可以选择删除某一个实例。确认oracleInventory路径等。确认后它会自动执行停止服务、删除数据库文件、删除监听器配置、清理部分目录和注册表项。但要注意它不会删掉整个 ORACLE_BASE 目录下的所有内容也不会百分百清理注册表。除了deinstall.bat也可以打开 Oracle Universal InstallerOUI选择“卸载产品”勾选 Oracle Database 19c。但 OUI 只负责删除已注册的组件对数据文件目录和手工创建的文件无能为力。综合体验下来deinstall.bat更彻底优先用它。5.2 清理注册表残留的是什么、该删哪里deinstall.bat跑完后真正的硬仗才开始。打开注册表编辑器按以下位置检查并删除残留项HKEY_LOCAL_MACHINE\SOFTWARE\ORACLEOracle 的主键里面包含ORACLE_BASE、ORACLE_HOME、ORACLE_SID、HOME0等键值。如果确认已经卸载可以删除整个 ORACLE 主键。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services这里存放 Windows 服务注册信息。搜索Oracle开头的服务名逐个删除。这些残留不删的话重启后系统里仍能看到失效的 Oracle 服务重装时可能会出现“服务已存在”的报错。HKEY_LOCAL_MACHINE\SOFTWARE\Classes安装程序会注册一些组件比如Oracle.Init.ORCL、Oracle.Tab.ORCL、OracleDataTrans等键值。如果你不习惯逐项筛查可以在注册表编辑器里按CtrlF搜索Oracle一个个查看后删除。耗时较长但更稳。在删除注册表项前保险起见先点击“文件 - 导出”备份当前注册表免得误删系统关键项导致系统异常。处理完注册表后通过 CMD 执行以下命令刷新服务列表sc query state all | findstr /i oracle如果没有输出说明服务残留已经清理干净。5.3 文件夹、环境变量与最终重启注册表清理后再去删除文件目录。删除ORACLE_BASE目录例如D:\app\oracle。删除解压出来的安装文件目录例如D:\oracle_install。如果数据文件没有放在 ORACLE_BASE 下记得单独删除D:\oradata之类自定义数据目录。有些目录删除时提示“正在被占用”原因可能是某些后台进程还没退出。最简单的办法是重启后再删。环境变量也需要手动清理。打开系统环境变量删除ORACLE_HOME、ORACLE_BASE、ORACLE_SID并在PATH中去掉%ORACLE_HOME%\bin相关条目。卸载完成后一定重启系统再确认新装。很多朋友反映“卸载后重装还是报错”通常就是因为没有重启服务进程或注册表句柄仍在内存里被占用。5.4 Linux 卸载的差异清单Linux 上卸载 Oracle 19c 相对简单因为不涉及注册表。完整步骤停止监听器和实例lsnrctl stop sqlplus / as sysdba在 SQL*Plus 中SHUTDOWN IMMEDIATE; EXIT;进入 ORACLE_HOME 的 deinstall 目录执行cd $ORACLE_HOME/deinstall ./deinstall -home $ORACLE_HOME执行过程中询问删除数据库实例时选择“是”。手动检查以下文件是否还在残留就删除/etc/oratab实例信息。/etc/oraInst.locOracle Inventory 位置。/etc/init.d/oracle或 systemd 目录下的oracle-19c.service开机自启动脚本。/etc/profile、~/.bash_profile中的 ORACLE_HOME、ORACLE_BASE、PATH 配置。删除 ORACLE_BASE 目录和数据文件目录。Linux 下删除 Oracle 用户组也是可选项如果机器上只装了这一套 Oracle可以连oinstall、dba组和oracle用户一并清理干净。6. 备份与跨版本恢复19c 和 11g 的兼容边界6.1 19c 的备份能在 11g 上恢复吗结论与原因直接说结论不能。RMAN 备份不能从 19c 恢复到 11g。这是 Oracle 明确的版本兼容限制不是操作手法的问题。原因在于恢复过程不仅仅是拷贝数据文件还涉及控制文件、数据文件头、重做日志格式、系统表空间对象结构的兼容性。Oracle 的兼容性是通过COMPATIBLE参数控制的。11g 数据库的COMPATIBLE参数最高只能设置到11.2.0而 19c 数据库创建时的默认COMPATIBLE通常是19.0.0。两个版本之间的数据文件头结构和内部字典格式不同11g 数据库去读取 19c 的数据文件时会直接报ORA-01122、ORA-01110一类错误。只把备份通过 FTP 传到 11g 机器上然后用 RMANRESTORE也会因为备份片头版本不兼容失败。即使把COMPATIBLE参数强行调低也存在物理文件格式差异不建议尝试。同样地从 19c 直接拿数据文件、控制文件、重做日志文件替换到 11g 也不会成功。数据库中有一个不可绕过的检查重启实例时会对文件版本和数据字典版本做校验版本不匹配直接拒绝打开。6.2 跨版本迁移该怎么做逻辑导出导入那生产环境真的需要把数据从 19c 迁到 11g 时怎么办正确的思路是使用逻辑迁移也就是 expdp/impdp 或 SQL*Loader而不是物理备份恢复。expdp 在 19c 端导出expdp system/口令//db-server:1521/orclpdb \ schemasscott \ directoryDATA_PUMP_DIR \ dumpfilescott_19c.dmp \ logfileexpdp_scott.log \ version11.2version11.2是关键参数。它会把导出数据的内容格式控制为 11g 可以接受的版本。如果不加这个参数默认导出的是 19c 格式impdp 导入到 11g 时可能报错。在 11g 端导入impdp system/口令11g库地址 \ schemasscott \ directoryDATA_PUMP_DIR \ dumpfilescott_19c.dmp \ logfileimpdp_scott.log实际操作中还要注意几个点先在 11g 中创建对应的表空间和用户再执行 impdp否则对象归属容易混乱。如果原库字符集与目标库不一致中文可能变成乱码或报字符集转换错误。19c 里用到的新特性比如 12.2 的新分区策略、自动分区的 DDL导入 11g 时会因为版本过低失败需要在 19c 端先做好转换评估。如果数据量在百 GB 以上逻辑导出导入的时间会非常长最好先做一次小批量数据测试验证两边字符集和对象类型兼容后再全量执行。跨大版本迁移里永远不要只盯“备份文件能不能恢复”这一件事。要同时考虑应用侧连接方式、数据库参数、功能特性差异。对企业而言最稳妥的降级方案经常是先逻辑导出到中间版本再二次迁移到目标版本但这已经超出单篇教程的范畴。在我处理过的真实案例里出现过一次很典型的场景运维人员把 19c 的 RMAN 备份直接拿到 11g 环境尝试恢复来回折腾了一整天最后发现方向完全走反。之后我习惯性地会在自己维护的每套数据库旁写清版本和兼容性边界尤其是跨版本管理频繁的测试环境这个习惯帮我和团队省下了大量不必要的排障时间。安装、配置、卸载、恢复兼容性这几件事看似独立实际都在同一套知识体系里把这几个环节理清楚比记住几十条命令更值得。
返回列表