我们在升级数据库的大版本(如9i -> 10g )或大的补丁集( 如10.2.0.1 -> 10.2.0.4)时总是需要升级现有数据库的数据字典(dictionary),这是因为随着Oracle版本的升级,某些对象的属性需要改变,而这些改变操作都将体现在升级脚本catupgrd.sql中。 举例来说在11.2版本中为了ASH特性增加dbreplay的信息,那么我们到11.2的ORACLE_HOME/rdbms/admin下找到c1102000.sql,可以发现以下的DDL语句:

SQL> select * from v$version;BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - ProductionSQL> select * from global_name;GLOBAL_NAME
--------------------------------------------------------------------------------
www.oracledatabase12g.comalter table WRR$_REPLAY_FILTER_SET add (default_action varchar2(20));Rem =======================================================================
Rem  End Changes for Database Replay
Rem =======================================================================

该c1102000.sql会被catupgrd.sql调用,换而言之在升级过程中会为WRR$_REPLAY_FILTER_SET基表增加default_action列。 而与之相对应的e1102000.sql 脚本存在以下drop default_action 列的语句:

Rem
Rem Drop this column for existing dbms_workload_replay
Rem
alter table WRR$_REPLAY_FILTER_SET drop column default_action;
commit;

该e1102000.sql在数据字典降级过程中会被catdwgrd.sql调用,也就是说当数据字典要降级到11.2之前的版本时会将WRR$_REPLAY_FILTER_SET基表还原到之前版本的表结构,而这一还原操作就包含在e1102000.sql脚本中。 请注意虽然数据字典的升级(catupgrd.sql)和降级(catdwgrd.sql)是2种逆向的操作,但实际他们对数据字典的变更并非是一一对应的。 假设在catupgrd.sql中创建了某些组件对象(component objects),那么在降级时并不会将这些新增加的组件对象全部drop掉,而是简单地truncate这些对象上的数据。 实际上c1102000.sql 脚本会在升级数据字典即catupgrd.sql脚本运行时被调用,而e1102000.sql 则会在降级数据字典版本即catdwgrd.sql脚本运行过程中被调用。   一般来说在$ORACLE_HOME/rdbms/admin目录下的脚本文件名表达了该脚本的作用,如:

cat*.sql       一般是用来创组件建对象(create objects)的,如catalog.sql脚本创建数据字典对象
cmpup*.sql     一般是用来升级组件component的,如cmpupjav.sql脚本用来升级JAVAVM和XML
ii1102000.sql  包含了数据字典变化必要的DDL操作
c1102000.sql   包含了绝大多数的数据字典变化
a1102000.sql   包含了更新字典数据的PL/SQL块
cmpupgrd.sql   该脚本调用必要的组件升级脚本,如JAVAVM,CONTEXT,Spatial等
f1102000.sql   该脚本使用PL/SQL包将数据字典变化恢复到老的版本
e1102000.sql   该脚本包含了恢复到老版本的其他一些必要字典变更

了解了这些升级脚本的作用之后,我们来看一个数据库升级的实例。 以下是由10.1.0.5 升级到 11.2.0.1 时 catupgrd.sql 脚本的调用追踪情况:

@catupgrd.sql@catupstr.sql@i0902000.sql -> @i1001000.sql -> @i1002000.sql -> i1101000.sql@c1001000.sql -> @c1002000.sql -> @c1101000.sql
@catalog.sql
@catproc.sql
@catupprc.sql@a1001000.sql -> @a1002000.sql -> @a1101000.sql
@cmpupgrd.sql@cmpupstr.sql@cmpupjav.sql@cmpupnjv.sql@cmpupxdb.sql@cmpupnxb.sql@cmpupord.sql@cmpupmsc.sql@cmpupend.sql
@catupend.sql

注意以上c*.sql的执行过程是c1001000.sql->@c1002000.sql -> @c1101000.sql ->

本文转自maclean_007 51CTO博客,原文链接:http://blog.51cto.com/maclean/1278060

深入了解Oracle数据字典升级脚本catupgrd.sql调用过程相关推荐

  1. oracle数据库用脚本运行SQL语句

    1. 在同一个目录下创建 runBatch.bat sqlplus sys/sangfor@orcl as sysdba @sql.txtpause sql.txt 要执行的SQL语句 2. 双击ru ...

  2. Oracle数据库升级与补丁

    以下是Maclean.Liu 编写或收集的数据库升级(Upgrade)与补丁(patch fix)方面的知识: 甲骨文发布2012 1月数据库安全补丁Critical Patch Update Jan ...

  3. oracle 10G 升级到11G

    Oracle从10g升级到11g详细步骤 数据库旧版本:10.2.0.4 数据库新版本:11.2.0.2 OS 版本: Solaris 10 参考文档:Complete Checklist for M ...

  4. oracle存储过程学习经典[语法+实例+调用]

    Oracle存储过程基础知识 商业规则和业务逻辑可以通过程序存储在Oracle中,这个程序就是存储过程. 存储过程是SQL, PL/SQL, Java 语句的组合,它使你能将执行商业规则的代码从你的应 ...

  5. oracle结构体转为字符,CSS_细化解析:Oracle与SQL过程之间的转化,这两天写数据库升级脚本,发 - phpStudy...

    细化解析:Oracle与SQL过程之间的转化 这两天写数据库升级脚本,发现MSSQL和Oracle之间的转化还是比较容易的. 以下面两个过程为例.两者的功能相似. 1.MSSQL脚本 1 /** 更改 ...

  6. oracle执行脚本顺序执行吗,【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 - 不及格的飞鱼...

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件. 首先,Quartz表达式培植的启动时间为 ...

  7. oracle 不能导入sql语句,oracle数据库导入.dmp脚本的sql 语句

    一.更改数据库管理员sys/system密码 1.运行到C盘根目录 2.输入:SET ORACLE_SID = 你的SID名称 3.输入:sqlplus /nolog 4.输入:connect /as ...

  8. oracle数据库升级失败怎么办,【案例】Oracle报错ORA-00918 数据库升级后遇到SQL BUG 5368296...

    天萃荷净 运维DBA反映生产数据库10.2.0.1存在BUG导致SQL无法使用,在升级到10.2.0.5后执行SQL报错ORA-00918,分析原因为BUG修复后要修改SQL语句,升级数据库到10.2 ...

  9. oracle升级后报 06502,Oracle数据库升级后报ORA-00704和ORA-39700错误

    把数据库从10.2.0.1.0升级到10.2.0.5.0,启动数据库,报错:ORA-01092: ORACLE 例程终止,强制断开. 查看alert文件,显示ORA-00 把数据库从10.2.0.1. ...

最新文章

  1. OpenCV中导向滤波介绍与应用
  2. Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量
  3. delphi Bpl 学习杂记
  4. Java拾遗:001 - 重写 equals 和 hashCode 方法
  5. Machine Learning week 10 quiz: Large Scale Machine Learning
  6. Anaconda ubuntu16.04 Cuda 8.0安装pytorch
  7. P2485-[SDOI2011]计算器【BSGS,exgcd,快速幂】
  8. java stdout库_Java重写StdOut并将日语写入文件
  9. pythonturtle是标准库_Python标准库: turtle--海龟绘图。
  10. 零基础大数据学习框架
  11. JMP M16:64
  12. 软件测试 | APP测试 —— Appium 自动化测试框架的初识与学习要领
  13. viewport原理和使用和设置移动端自适应的方法(移动适应电脑)
  14. 高会职称计算机课程,2017高会《职称计算机》模块精讲:Windows Media Player(一)...
  15. 微信开发者工具及其文档
  16. ERP进销存系统开发源码交付
  17. IP地址、网关地址、子网掩码地址
  18. JAVA关于父亲节的代码_关于父亲节的祝福语
  19. [Luogu P2597] [BZOJ 2815] [ZJOI2012]灾难
  20. 玩转Lenovo Idea pad 的音效功能

热门文章

  1. java死锁怎么用jvm调试_jvm 内存dump、gc查看、线程死锁,jmap、jstack、jstat
  2. unity图片变成马赛克如何取像素并改变颜色_Unity3D-2.5D像素游戏随机地形构造tilemap(rule tile)...
  3. vue和哪个php框架搭配,vue配什么ui框架比较好
  4. python动态人脸识别_python3.8动态人脸识别
  5. 父与子python下载不了_【求助】看父与子学习Python,里面有一个滑雪小游戏,加载不出图...
  6. python pyecharts 折线图_Python数据可视化之pyecharts实现各种图表
  7. python获取类函数的变量-python 动态获取当前运行的类名和函数名的方法
  8. idea DataGrip 使用图解教程
  9. python pil怎么调用_python3如何使用pil
  10. java jvm bind解决_java web项目启动的时候JVM_Bind,真的是tomcat端口被占用了吗?tomcat不同意...