ORA-00904: "DROP_SEGMENTS": invalid identifier 解决方法

来源:互联网 发布:四川广电广元网络纪检 编辑:程序博客网 时间:2024/05/16 15:10

 

 

 

之前按用户imp了一个9i的数据库,今天发现Job 执行失败,alert log 显示:

ORA-00904: "DROP_SEGMENTS": invalid identifier

 

 

 

上网搜了一下, 摘抄如下, 说是要执行下catpatch.sql 脚本。

 

 

 

Oracle 9.2.0.5 added the DROP_SEGMENTS column to the DBA_TAB_MODIFICATIONS view. Internally, the dollar table sys.mon_mods$ received the new drop_segments column. Guess who's responsible for adding this new column during the patch process?

Yup, it's catpatch.sql. Oh, joy!

 

If you don't run catpatch when patching to 9.2.0.5, a few things will happen with regards to the drop_segments column:

SMON will complain profusely in alert.log whenever it tries to update sys.mon_mods$. That means you get this error message every 15 minutes, or sooner:

 

 

        Thu Nov 25 17:21:05 2004

        Errors in file /u01/app/oracle/admin/mydb/bdump/mydb_smon_8201.trc:

        ORA-00904: "DROP_SEGMENTS": invalid identifier

 

 

DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO will fail.

According to Metalink Note 285315.1, you'll also get the ORA-00904 error in the alert.log on DROP TABLE and TRUNCATE TABLE.

You will get the ORA-00904 error when you try to update statistics with "GATHER STALE".

If you can't update statistics, you will have bad optimizer plans.

 

 

 

解决方法如下:

1. shutdown database

2. startup migrate

3. @?/rdbms/admin/catpatch.sql --升级数据字典

4. @?/rdbms/admin/catalog.sql  --创建系统常用的数据字典视图和同义词

5. @?/rdbms/admin/utlrp.sql    --编译存储过程

6. 重启数据库

 

 

 

SQL> describe sys.mon_mods$;        

                          

  Name             Null?   Type                               

  ----------------- -------- ------------                       

  OBJ#                      NUMBER                             

  INSERTS                   NUMBER                             

  UPDATES                   NUMBER                             

  DELETES                   NUMBER                             

  TIMESTAMP                 DATE                               

  FLAGS                     NUMBER                             

  DROP_SEGMENTS             NUMBER    <==出现了该字段