重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 23|回复: 0
打印 上一主题 下一主题

[补丁] 更新数据字典

[复制链接]
跳转到指定楼层
楼主
发表于 前天 19:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在 Oracle 19c 中,更新数据字典(Data Dictionary)通常是指修复由于升级、补丁安装不完全或元数据损坏导致的核心对象(如 DBMS_STATS)定义不一致的问题。

1. 自动化修复:使用 datapatch (首选)

在 12c 和 19c 中,这是更新数据字典的最标准方法。它会自动运行补丁脚本来同步 SQL 层的定义。

操作步骤:

    -1 以 oracle 用户登录操作系统。

    -2 确保数据库实例和监听器已启动。

    -3 执行命令:
cd $ORACLE_HOME/OPatch
./datapatch -verbose

    -4 观察输出: 如果它显示 Applying... 并在最后提示 SUCCESS,那么你的 DBMS_STATS 等包缺失的问题通常会自动解决。

2. 核心组件修复:重新运行 catproc

如果 datapatch 无法解决,或者由于升级中断导致数据字典损坏,需要手动运行核心目录脚本。这会重新定义所有的系统包(Package Spec 和 Body)。

注意:此操作需要停机维护(建议在 Restricted 模式下执行)。

操作步骤:

-- 以 SYSDBA 身份登录
sqlplus / as sysdba

-- 1. 开启受限模式,防止其他用户干扰
ALTER SYSTEM ENABLE RESTRICTED SESSION;

-- 2. 运行核心过程定义脚本 (耗时较长,通常 20-40 分钟)
@?/rdbms/admin/catproc.sql

-- 3. 运行目录定义脚本 (可选,但建议一同运行)
@?/rdbms/admin/catalog.sql

-- 4. 重新编译所有失效对象
@?/rdbms/admin/utlrp.sql

-- 5. 关闭受限模式
ALTER SYSTEM DISABLE RESTRICTED SESSION;

3. 针对性修复:只重新加载 DBMS_STATS 相关组件

如果你不想动整个数据字典,可以尝试只重新加载报错最严重的统计信息组件。这通常能解决 PLS-00302 缺失组件的问题。

操作步骤:

sqlplus / as sysdba

-- 重新加载 DBMS_STATS 的定义和主体
@?/rdbms/admin/dbmsstat.sql
@?/rdbms/admin/prvtstat.plb

-- 重新加载统计顾问相关组件
@?/rdbms/admin/dbmsstadv.sql
@?/rdbms/admin/prvtstadv.plb

-- 再次尝试编译
EXEC utl_recomp.recomp_parallel(4);

==================================
关键检查:更新后验证

完成上述任何一种更新后,请务必运行以下 SQL 确认你的 DBMS_STATS 是否已经“进化”到了 19c 版本:

-- 检查之前报错的存储过程是否已经出现在包定义中
SELECT procedure_name
FROM dba_procedures
WHERE object_name = 'DBMS_STATS'
AND procedure_name = 'INIT_ADVISOR_TASK';


如果有结果: 说明数据字典更新成功。

如果依然没结果: 说明你的 $ORACLE_HOME/rdbms/admin 下的脚本文件本身版本就不对,或者 ORACLE_HOME 环境变量指向了错误的路径。

========
特别提醒

在执行方案 1 或 2 之前,强烈建议先进行全库备份或控制文件备份。因为数据字典是数据库的心脏,操作不当会导致数据库无法启动。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-5-26 12:10 , Processed in 0.210646 second(s), 23 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表