To: Oracle Database - Enterprise Edition - Version 12.2.0.1.0
Operation System - Solaris 10 1/13 s10s_u11wos_24a SPARC
It failed to upgrade database from 11.2.3 to 12.2 with error 'ORA-01403: no data found', and following message is found from log file 'Oracle_Server.log',
REASON:
ERRORS FOUND: During Upgrade
FILENAME: /u01/app/oracle/cfgtoollogs/dbua/upgrade2018-01-17_11-42-08-AM/DB01/catupgrd0.log AT LINE NUMBER: 825076
------------------------------------------------------
Identifier CONTEXT 18-01-17 12:37:20
SCRIPT = [/u01/app/oracle/product/12.2.0/dbhome_1/ctx/admin/ctxposup.sql] <===== STATEMENT 1
ERROR = [ORA-01403: no data found ORA-06512: at line 28
ORA-06512: at line 8
]
STATEMENT = [declare
l_owner# number;
l_errnum number;
l_count number;
begin
select user# into l_owner# from sys."_BASE_USER" where name='CTXSYS';
select idx_id into l_count from dr$index where <===== STATEMENT 2
idx_name = 'ENT_EXT_DICT_OBJ' and
idx_owner# = l_owner#;
/* if this object does not exist yet, create it. */
if (0 = l_count) then
CTX_DDL.create_policy('CTXSYS.ENT_EXT_DICT_OBJ', <===== STATEMENT 3
filter => 'CTXSYS.NULL_FILTER',
section_group => 'CTXSYS.NULL_SECTION_GROUP',
lexer => 'CTXSYS.BASIC_LEXER',
stoplist => 'CTXSYS.EMPTY_STOPLIST',
wordlist => 'CTXSYS.BASIC_WORDLIST'
);
end if;
exception
when others then
l_errnum := SQLCODE;
if (l_errnum = -20000) then
null;
else
raise;
end if;
end;]
ERRORS FOUND: During Upgrade
FILENAME: /u01/app/oracle/cfgtoollogs/dbua/upgrade2018-01-17_11-42-08-AM/DB01/catupgrd0.log AT LINE NUMBER: 825076
------------------------------------------------------
Identifier CONTEXT 18-01-17 12:37:20
SCRIPT = [/u01/app/oracle/product/12.2.0/dbhome_1/ctx/admin/ctxposup.sql] <===== STATEMENT 1
ERROR = [ORA-01403: no data found ORA-06512: at line 28
ORA-06512: at line 8
]
STATEMENT = [declare
l_owner# number;
l_errnum number;
l_count number;
begin
select user# into l_owner# from sys."_BASE_USER" where name='CTXSYS';
select idx_id into l_count from dr$index where <===== STATEMENT 2
idx_name = 'ENT_EXT_DICT_OBJ' and
idx_owner# = l_owner#;
/* if this object does not exist yet, create it. */
if (0 = l_count) then
CTX_DDL.create_policy('CTXSYS.ENT_EXT_DICT_OBJ', <===== STATEMENT 3
filter => 'CTXSYS.NULL_FILTER',
section_group => 'CTXSYS.NULL_SECTION_GROUP',
lexer => 'CTXSYS.BASIC_LEXER',
stoplist => 'CTXSYS.EMPTY_STOPLIST',
wordlist => 'CTXSYS.BASIC_WORDLIST'
);
end if;
exception
when others then
l_errnum := SQLCODE;
if (l_errnum = -20000) then
null;
else
raise;
end if;
end;]
Script ctxposup.sql (STATEMENT 1) which upgrades Oracle Text raised ORA-01403 while running PL/SQL block listed in the above. Testing individual statements in the block as following:
sys@DB01> select user# from sys."_BASE_USER" where name='CTXSYS';
USER#
----------
100
sys@DB01> ALTER SESSION SET CURRENT_SCHEMA = CTXSYS;
Session altered.
sys@DB01> select idx_id from dr$index where
2 idx_name = 'ENT_EXT_DICT_OBJ' and
3 idx_owner# = 100;
no rows selected
USER#
----------
100
sys@DB01> ALTER SESSION SET CURRENT_SCHEMA = CTXSYS;
Session altered.
sys@DB01> select idx_id from dr$index where
2 idx_name = 'ENT_EXT_DICT_OBJ' and
3 idx_owner# = 100;
no rows selected
The object CTXSYS.ENT_EXT_DICT_OBJ (a policy of Oracle Text) does not exist in the database. Therefore, STATEMENT 2 (select ... into ... from) returned ORA-01403. Apparently, The purpose of STATEMENT 2 is to test whether CTXSYS.ENT_EXT_DICT_OBJ exists, but listing records is not a better choice for exist-testing than counting the number of records. Let's try to replace STATEMENT 2 in script filectxposup.sql with following code
select count(idx_id) into l_count from dr$index where
Start the upgrade again, it succeeded!
No comments:
Post a Comment