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

我们在升级数据库的大版本(如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 - Production

SQL> select * from global_name;

GLOBAL_NAME
--------------------------------------------------------------------------------
www.askmac.cn

alter 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 -> @catalog.sql (其实就是c1102000.sql) -> @catproc.sql,这说明了当10.1.0.5升级到11.2.0.1时,首先还是要执行10.1、10.2、11.1的数据字典变更,而非直接由10.1.0.5 的字典一步到位到 11.2。

以下列出更多升级脚本的作用:

--- 11.2 Upgrade Scripts

i1102000.sql contains the subset of dictionary changes necessary for DDL operations 
c1102000.sql contains most of the dictionary changes, runs catalog and catproc 
a1102000.sql contains PL/SQL blocks to update data within the dictionary 
cmpupgrd.sql invokes the component upgrade scripts (JAVAVM, CONTEXT, Spatial, etc.) 

---  catupgrd.sql

@catupstr.sql – initial checks – runs “c” scripts
@catalog.sql – creates data dictionary objects
@catproc.sql – creates packages & types
@catupprc.sql – final RDBMS  “a” scripts 
@cmpupgrd.sql – invokes upgrade component scripts
@catupend.sql – final scripts to complete the upgrade

---  Downgrade Scripts – catdwgrd.sql
cmpdbdwg.sql invokes the component downgrade scripts (JAVAVM, CONTEXT, etc.) OR
cmpdwpth.sql invokes the component patch downgrade scripts (most components do not have patch downgrade scripts) 
f1102000.sql contains the dictionary changes that use PL/SQL packages to revert to the previous server 
e1102000.sql contains other dictionary changes necessary to revert to the previous server 

cmpupjav.sql – upgrades JAVAVM and XML
Cmpupnjv.sql – upgrades components not dependent on javavm or xml 
Cmpupxdb.sql – upgrades context and xdb
Cmpupnxb.sql – upgrades components not dependent on context or xdb, but dependent on javavm or xml
Cmpupord.sql – upgrades ordim and spatial (dependent on javavm, xml, and xdb)
Cmpupmsc.sql – upgrades other components dependent on context or xdb (odm, wk, exf, rul)

ORA-600 [17003]错误一例

一套AIX 上的10.2.0.4系统运行catupgrd.sql脚本时出现ORA-600 [17003]错误, 详细的日志如下:

 

ALTER TYPE lcr$_row_record ADD MEMBER FUNCTION
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [17003], [0x70000008E6DA8C8], [1],
[1], [], [], [], []

1. Provide a list of invalid objects taken before upgrade was initially attempted.

spool invalid_pre.lst
select substr(owner,1,12) owner,
substr(object_name,1,30) object,
substr(object_type,1,30) type, status from
dba_objects where status <> ‘VALID’;
spool off

2. Provide output of select obj# ,name from obj$ where name in (‘LCR$_ROW_LIST’,’LCR$_ROW_RECORD’);

3. Provide an output of :
select D_OBJ#, do.object_name, do.object_type dtyp, do.status dsta,
D_TIMESTAMP, ORDER#, P_OBJ#, po.object_name, po.object_type ptyp, po.status
psta, P_TIMESTAMP from dependency$ d, DBA_OBJECTS do, DBA_OBJECTS po
where D_OBJ# = do.object_ID and P_OBJ#= po.object_ID
and do.object_ID in (select object_id from dba_objects where
OBJECT_NAME=’LCR$_ROW_LIST’)
/

4. Run same SQL in step 3 in another database of the same version – 10.1.0.4

select D_OBJ#, do.object_name, do.object_type dtyp, do.status dsta,
D_TIMESTAMP, ORDER#, P_OBJ#, po.object_name, po.object_type ptyp, po.status
psta, P_TIMESTAMP from dependency$ d, DBA_OBJECTS do, DBA_OBJECTS po
where D_OBJ# = do.object_ID and P_OBJ#= po.object_ID
and do.object_ID in (select object_id from dba_objects where
OBJECT_NAME=’AQ$_REG_INFO’)
/

Compare and verify that this object has as many parent entries in dependency$ as they
are in a fresh Database of the same version. If they are not, alter
compile this object,and using same query above to verify that parent rows are created.

5. To verify timestamp discrepancy, run SQL

spool &spoolfilename
set pagesize 10000
column d_name format a20
column p_name format a20
select do.obj# d_obj,do.name d_name, do.type# d_type,
po.obj# p_obj,po.name p_name,
to_char(p_timestamp,’DD-MON-YYYY HH24:MI:SS’) “P_Timestamp”,
to_char(po.stime ,’DD-MON-YYYY HH24:MI:SS’) “STIME”,
decode(sign(po.stime-p_timestamp),0,’SAME’,’*DIFFER*’) X
from sys.obj$ do, sys.dependency$ d, sys.obj$ po
where P_OBJ#=po.obj#(+)
and D_OBJ#=do.obj#
and do.status=1 /*dependent is valid*/
and po.status=1 /*parent is valid*/
and po.stime!=p_timestamp /*parent timestamp not match*/
order by 2,1;

SQL> select obj# ,name from obj$ where name in (‘LCR$_ROW_LIST’,’LCR$_ROW_RECORD’);

OBJ# NAME
———- ——————————
5738 LCR$_ROW_RECORD
5776 LCR$_ROW_RECORD
256054 LCR$_ROW_LIST

SQL> select D_OBJ#, do.object_name, do.object_type dtyp, do.status dsta,
D_TIMESTAMP, ORDER#, P_OBJ#, po.object_name, po.object_type ptyp, po.status
2 3 psta, P_TIMESTAMP from dependency$ d, DBA_OBJECTS do, DBA_OBJECTS po
4 where D_OBJ# = do.object_ID and P_OBJ#= po.object_ID
5 and do.object_ID in (select object_id from dba_objects where
6 OBJECT_NAME=’LCR$_ROW_LIST’)
7 /

no rows selected

SQL> spool timestamp
SQL> set pagesize 10000
column d_name format a20
column p_name format a20
select do.obj# d_obj,do.name d_name, do.type# d_type,
po.obj# p_obj,po.name p_name,
SQL> to_char(p_timestamp,’DD-MON-YYYY HH24:MI:SS’) “P_Timestamp”,
to_char(po.stime ,’DD-MON-YYYY HH24:MI:SS’) “STIME”,
decode(sign(po.stime-p_timestamp),0,’SAME’,’*DIFFER*’) X
from sys.obj$ do, sys.dependency$ d, sys.obj$ po
where P_OBJ#=po.obj#(+)
and D_OBJ#=do.obj#
SQL> and do.status=1 /*dependent is valid*/
2 3 4 5 6 7 8 and po.status=1 /*parent is valid*/
9 10 11 and po.stime!=p_timestamp /*parent timestamp not match*/
12 order by 2,1;

no rows selected

SQL> spool off

Errors in file ora_594098.trc:
ORA-07445: exception encountered: core dump [kgghstfel+0074] [SIGSEGV]
[Address not mapped to object] [0x204000000208] [] []

1. Install 10.2.0.1, install 10.2.0.4
2. run utlu102i.sql, check output.
3. change Oracle Home 10.1 to 10.2
4. startup upgrade and run catupgrd.sql

SQL> set lines 200
SQL> col comp_name format a50
SQL> select comp_name,version,status from dba_registry;

COMP_NAME VERSION STATUS
————————————————– —————————— ———————————
Oracle XML Database 10.2.0.4.0 VALID
Oracle Enterprise Manager 10.2.0.4.0 VALID
Oracle Data Mining 10.2.0.4.0 VALID
OLAP Catalog 10.2.0.4.0 VALID
Oracle Text 10.2.0.4.0 VALID
Spatial 10.2.0.4.0 VALID
Oracle interMedia 10.2.0.4.0 VALID
Oracle Database Catalog Views 10.2.0.4.0 VALID
Oracle Database Packages and Types 10.2.0.4.0 INVALID
Oracle Real Application Clusters 10.2.0.4.0 VALID
JServer JAVA Virtual Machine 10.2.0.4.0 VALID
Oracle XDK 10.2.0.4.0 VALID
Oracle Database Java Packages 10.2.0.4.0 VALID
OLAP Analytic Workspace 10.2.0.4.0 VALID
Oracle OLAP API 10.2.0.4.0 VALID

If the above query shows that everything is valid and is in proper version,
it means, that we would need to correct the problem with lcr$_row_record before upgrade.

I see that one component is invalid ‘Database packages and types’. To resolve this, please perform the following:

SQL> shutdown immediate
SQL> startup upgrade
SQL> @?/rdbms/admin/catproc.sql
SQL> @?/rdbms/admin/utlrp.sql
SQL> shutdown immediate
SQL> startup
SQL> set lines 200
SQL> col comp_name format a50
SQL> select comp_name,version,status from dba_registry;

Recompiled also get ORA-00600: internal error code, arguments: [17003]

SQL> alter type LCR$_ROW_RECORD compile;
alter type LCR$_ROW_RECORD compile
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [17003], [0x70000007C3A0378], [1],
[1], [], [], [], []

select D_OBJ#, do.object_name, do.object_type dtyp, do.status dsta,
D_TIMESTAMP, ORDER#, P_OBJ#, po.object_name, po.object_type ptyp, po.status psta, P_TIMESTAMP
from dependency$ d, DBA_OBJECTS do, DBA_OBJECTS po
where D_OBJ# = do.object_ID and P_OBJ#= po.object_ID and do.object_ID =
select object_id from dba_objects where OBJECT_NAME=’LCR$_ROW_RECORD’);

SQL> select D_OBJ#, do.object_name, do.object_type dtyp, do.status dsta,
2 D_TIMESTAMP, ORDER#, P_OBJ#, po.object_name, po.object_type ptyp, po.status psta, P_TIMESTAMP
3 from dependency$ d, DBA_OBJECTS do, DBA_OBJECTS po
4 where D_OBJ# = do.object_ID and P_OBJ#= po.object_ID and do.object_ID =
5 (select object_id from dba_objects where OBJECT_NAME=’LCR$_ROW_RECORD’);

(select object_id from dba_objects where OBJECT_NAME=’LCR$_ROW_RECORD’)
*
ERROR at line 5:
ORA-01427: single-row subquery returns more than one row

SQL> set lines 200
SQL> col comp_name format a50
SQL> select comp_name,version,status from dba_registry;

SQL> col object_name format a20
SQL> select D_OBJ#, do.object_name, do.object_type dtyp, do.status dsta,
D_TIMESTAMP, ORDER#, P_OBJ#, po.object_name, po.object_type ptyp, po.status psta, P_TIMESTAMP
from dependency$ d, DBA_OBJECTS do, DBA_OBJECTS po
where D_OBJ# = do.object_ID and P_OBJ#= po.object_ID and do.object_ID in
(select object_id from dba_objects where OBJECT_NAME=’LCR$_ROW_RECORD’);

 

MOS Bug Info:

 

Hdr: 6611530 10.2.0.2.0 RDBMS 10.2.0.2.0 AQ PRODID-5 PORTID-197 ORA-600
Abstract: ORA-600 17003

PROBLEM:
——–
Customer was trying to apply the 10.2.0.3 patchset and kept getting ora-600
17003 errors running catproc.  They tested the running of catalog, catproc
and utlrp in the 10.2.0.2 database version before upgrade and got the same
error.  The errors are reproducing trying to compile at least these 2
objects:
ALTER PACKAGE “SYS”.”DBMS_AQADM_SYS” COMPILE BODY REUSE SETTINGS
ALTER TYPE “SYS”.”LCR$_ROW_RECORD” COMPILE SPECIFICATION REUSE SETTINGS

This issue started in SR 6535356.994 and since the issue reproduces before
upgrade it was determined that this isn’t an upgrade issue.

DIAGNOSTIC ANALYSIS:
——————–
Have reviewed alert.log and trace file.
Had customer run hcheck – output will be uploaded.

In the trace files, I couldn’t find the handle for the second argument of the
ora-600 17003 error, so can not determine the object.

WORKAROUND:
———–
none known

RELATED BUGS:
————-
Looks exactly like Bug 5857558.  Was going to try the generic fix in this bug
but cannot determine the object because cannot find the handle in the trace
files.

REPRODUCIBILITY:
—————-
It is reproducible everytime they run catproc.  catalog runs fine.

TEST CASE:
———-
none

STACK TRACE:
————
ksedst
ksedmp
ksfdmp
kgeriv
kgeasi
kglget
kglgob
kgldpo0
kgldpo
kgldon
pl_don
ptgxtn
ptg_nd
phdbte
phncrr_check_remote_refs
phncee_check_extra_errors
phnr_resolve
ph2exp
ph2ext
ph2osa
ph2of1
ph2exp
ph2ext
ph2osa
ph2of1

SUPPORTING INFORMATION:
———————–

24 HOUR CONTACT INFORMATION FOR P1 BUGS:
—————————————-

DIAL-IN INFORMATION:
——————–

IMPACT DATE:
————

The query returned no rows:
SQL> select D_OBJ#, do.object_name, do.object_type dtyp, do.status dsta,
D_TIMESTAMP, ORDER#, P_OBJ#, po.object_name, po.object_type ptyp, po.status
psta, P_TIMESTAMP from dependency$ d, DBA_OBJECTS do, DBA_OBJECTS po where
D_OBJ# = do.object_ID and P_OBJ#= po.object_ID and do.object_ID = (select
object_id from dba_objects where OBJECT_NAME=’AQ$_SRVNTFN_MESSAGE’);
  2    3    4    5  
/

no rows selected

Therefore, I have asked him to send up the files needed to set-up the system
tablespace in-house.  Do you need any other tablespaces?

Customer did the following:

1.    Recovered the database back to 10.2.0.2 before we ran catalog and catproc.
2. Performed the steps for dictionary fix as following ( he had tested this
out ? please see dev.log with the test he did before this ):
(1) update obj$ set status=5 where obj#=(select object_id from dba_objects
where OBJECT_NAME=’AQ$_SRVNTFN_MESSAGE’);
     commit;
     select obj#, name, status from obj$ where obj# = (select object_id from
dba_objects where OBJECT_NAME=’AQ$_SRVNTFN_MESSAGE’);
.
(2) FLUSH the shared pool(or bounce the DB), to reflect this changed status
in cache as well.
.
(3) alter type AQ$_SRVNTFN_MESSAGE compile;
.
(4) Check required dependency$ rows are recreated.
     select D_OBJ#, do.object_name, do.object_type dtyp, do.status dsta,
D_TIMESTAMP, ORDER#, P_OBJ#, po.object_name, po.object_type ptyp, po.status
psta, P_TIMESTAMP from dependency$ d, DBA_OBJECTS do, DBA_OBJECTS po where
D_OBJ# = do.object_ID and P_OBJ#= po.object_ID and do.object_ID = (select
object_id from dba_objects where OBJECT_NAME=’AQ$_SRVNTFN_MESSAGE’);
.
(5) ALTER PACKAGE “SYS”.”DBMS_AQADM_SYS” COMPILE BODY REUSE SETTINGS;
     select obj#, name, status from obj$ where obj# = (select object_id from
dba_objects where OBJECT_NAME=’DBMS_AQADM_SYS’ and OBJECT_TYPE in (‘PACKAGE
BODY’));
3. Executed catalog
4. Executed catproc and encountered Ora-600 errors:
    First error:
       UPDATE SYS.AQ_SRVNTFN_TABLE tab
           *
ERROR at line 1:
ORA-81: address range [0x60000000000DBDB0, 0x60000000000DBDB4) is not
readable
ORA-600: internal error code, arguments: [kksfbc-reparse-infinite-loop],
[0x9FFFFFFFBE9CED88], [], [], [], [], [], []

     Second error:
Warning: Type created with compilation errors.

Errors for TYPE LCR$_ROW_RECORD:

LINE/COL ERROR
——– —————————————————————–
0/0      ORA-81: address range [0x60000000000DBD80, 0x60000000000DBD84)
         is not readable
         ORA-600: internal error code, arguments: [17003],
         [0xC0000004F1DD89D0], [1], [1], [], [], [], []

Invalids after utlrp:

SYS                STREAMS$_EVALUATION_CONTEXT      EVALUATION CONTEXT
INVALID
                   DBMS_STREAMS                     PACKAGE            
INVALID
                   DBMS_STREAMS_DATAPUMP            PACKAGE BODY       
INVALID
                   DBMS_STREAMS                     PACKAGE BODY       
INVALID
                   DBMS_LOGREP_IMP                  PACKAGE BODY       
INVALID
                   LCR$_ROW_RECORD                  TYPE               
INVALID
                   LCR$_ROW_RECORD                  TYPE BODY          
INVALID
                   AQ$_AQ_SRVNTFN_TABLE_F           VIEW               
INVALID
                   AQ$AQ_SRVNTFN_TABLE              VIEW               
INVALID

I then asked him to up the following parameters which did no good (didn?t
think they would but wanted to try):
shared_pool_size greater then 800M
large_pool_size greater then 250M
java_pool_size greater then 250M
db_cache_size greater then 500M
compatible set to 10.2.0.0
pga_aggregate_target greater then 1000M

Then had him do the following:
SQL> select distinct o.name, o.stime, d.p_timestamp
from obj$ o, dependency$ d
where o.stime != d.p_timestamp and o.type#=13 and o.obj#=d.p_obj# ;

  2    3  
NAME                           STIME     P_TIMESTA
—————————— ——— ———
AQ$_SRVNTFN_MESSAGE            08-NOV-07 11-NOV-06

SQL> startup restrict
SQL> conn / as sysdba

SQL> update dependency$ d set p_timestamp = (select stime from obj$ p where
d.p_obj#=p.obj#)
           where d.p_obj# in (select obj# from obj$ where type#=13) and
d.p_timestamp != (select stime
           from obj$ o where d.p_obj#=o.obj#);

ENSURE BY THE PREVIOUS STATEMENT that only 1 rows are updated.

——— THIS RETURNED 3 rows therefore he rolled back and this is where we
are now.

/upload/bug6611530 directory:
Dev.log ? gives the outputs after the dictionary patch was done
alert_oasc1[1].log.11082007.txt ? the alert.log after the dictionary patch
was done and the migration was then attempted
oasc1_ora_3475.trc – The first trace file in the series

You can see in the trace file the following 2 ora errors:
ORA-600: internal error code, arguments: [kksfbc-reparse-infinite-loop],
[0x9FFFFFFFBE9CED88], [], [], [], [], [], []
AND
ORA-600: internal error code, arguments: [17003], [0xC0000004F1DD89D0],
[1], [1], [], [], [], []
—- where I still cannot find the handle in the trace file.

The ora-600 kksfbc-reparse-infinite-loop occured after the data dictionary
patching so I included it here for clarity.  Will work on that one after this
is fixed (if it can be).

Here is the results of the requested query.  Since this object has both an
OBJECT_TYPE of TYPE and TYPE BODY there are 2 queries that were run:

SQL> select D_OBJ#, do.object_name, do.object_type dtyp, do.status dsta,
  2  D_TIMESTAMP, ORDER#, P_OBJ#, po.object_name, po.object_type ptyp,
po.status psta,
  3   P_TIMESTAMP from dependency$ d, DBA_OBJECTS do, DBA_OBJECTS po
  4  where D_OBJ# = do.object_ID and P_OBJ#= po.object_ID and do.object_ID =
  5  (select object_id from dba_objects where OBJECT_NAME=’LCR$_ROW_RECORD’
and OBJECT_TYPE = ‘TYPE’);

    D_OBJ#
———-
OBJECT_NAME
——————————————————————————

DTYP                DSTA    D_TIMESTA     ORDER#     P_OBJ#
——————- ——- ——— ———- ———-
OBJECT_NAME
——————————————————————————

PTYP                PSTA    P_TIMESTA
——————- ——- ———
   1462820
LCR$_ROW_RECORD
TYPE                INVALID 09-NOV-07          2    3320201
LCR$_ROW_LIST
TYPE                VALID   11-NOV-06

   1462820
LCR$_ROW_RECORD
TYPE                INVALID 09-NOV-07          1        309
STANDARD
PACKAGE             VALID   18-APR-03

   1462820
LCR$_ROW_RECORD
TYPE                INVALID 09-NOV-07          0    1462817
LCR_ROW_LIB
LIBRARY             VALID   15-NOV-03

SQL>
SQL> select D_OBJ#, do.object_name, do.object_type dtyp, do.status dsta,
  2  D_TIMESTAMP, ORDER#, P_OBJ#, po.object_name, po.object_type ptyp,
po.status psta,
  3   P_TIMESTAMP from dependency$ d, DBA_OBJECTS do, DBA_OBJECTS po
  4  where D_OBJ# = do.object_ID and P_OBJ#= po.object_ID and do.object_ID =
  5  (select object_id from dba_objects where OBJECT_NAME=’LCR$_ROW_RECORD’
and OBJECT_TYPE = ‘TYPE BODY’);

    D_OBJ#
———-
OBJECT_NAME
——————————————————————————

DTYP                DSTA    D_TIMESTA     ORDER#     P_OBJ#
——————- ——- ——— ———- ———-
OBJECT_NAME
——————————————————————————

PTYP                PSTA    P_TIMESTA
——————- ——- ———
   1462858
LCR$_ROW_RECORD
TYPE BODY           INVALID 09-NOV-07          0    1462820
LCR$_ROW_RECORD
TYPE                INVALID 09-NOV-07

 

 

可以尝试在startup upgrade模式下重新运行catproc.sql脚本来解决组件失效的问题(catproc.sql is to try validate the registry and that should resolve the issue)。

沪ICP备14014813号-2

沪公网安备 31010802001379号