怎么升级Oracle的?

    有人在Itpub上问Oracle 817建分区表怎么出错了? 错误如下:

ORA-00604: error occurred at recursive SQL level 1
ORA-00904: invalid column name

    通过设置SQL跟踪, 发现了引起错误的SQL语句.

PARSE ERROR #5:len=127 dep=1 uid=0 oct=2 lid=0 tim=0 err=904
insert into partcol$ (obj#, intcol#, col#, pos#, spare1, segcol#,
    type#, charsetform) values (:1, :2, :3, :4, :5, :6, :7, :8)

    看一下现在的partcol$表的表结构.

SQL> desc sys.partcol$
Name    Type   Nullable Default Comments
------- ------ -------- ------- --------
OBJ#    NUMBER
INTCOL# NUMBER
COL#    NUMBER
POS#    NUMBER
SPARE1  NUMBER Y

    原来是这个系统表少了几个列, 什么原因造成的呢? 我首先想到的就是升级时只升了软件, 没有运行Oracle的升级角本. 我们可以在rdbms/admin目录下grep下这个表. 主要有三个角本包含了对这个表的结构修改.

c0801060.sql:alter table partcol$ add (segcol# number, ...
migrate.bsq:create table partcol$ (
sql.bsq:create table partcol$ (

    通过进一步对比, 发现这实例中的表结构和migrate.bsq中的一致, 因此初步确定这是一个从Oracle 7升级上来的数据库. 看谁在调用c0801060这个SQL文件.

u0801060.sql:Rem        STAGE 3: call c0801060.sql:
u0801060.sql:@@c0801060

    可以看到Oracle在从816升到817时需要加这三个列, 而出现这个错误的原因也是因为只是将Oracle执行文件升级到817了,而没有在Oracle数据库里跑升级角本u0801070. 是谁在提供这样的技术支持? 新瓶装旧酒!

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • We have 50 provinces.
  • 我们有50个省.
  • My country is rich in natural resources.
  • 我国自然资源丰富.
  • That nation is famous for its tourism.
  • 那个国家以旅游业闻名.
  • The biggest festival in my country is the Spring Festival.
  • 我国最大的节日是春节.
  • Geographically, China is located in the Northern Hemisphere.
  • 从地理位置上说, 中国位于北半球.