
问题:
在Windows上:使用ORA-01722升级到Oracle 18.10.0失败。这发生在升级阶段的后期。
这里的问题很小,因为SUBSTR函数的使用方式并未考虑潜在的两位数字补丁发布。以前没有从来没有Oracle 11.2.0.10.0发行版的情况,所以没有发现这一点。%ORACLE_HOME\admin\catupstr.sql
仅在Windows上会发生此问题。
但是,当您运行数据库升级时,无论您使用AutoUpgrade,dbupgrade,catctl.pl还是dbua,升级都会在一开始就失败,因为catupstr.sql在调用升级之前会运行多个检查。只要您保持COMPATIBLE不变,此时一切都没有损坏。
解决方法:
解决方法是一个简单的小修改,您可以自己快速完成。
在目标18.10.0(或更高版本)的主目录中,打开 %ORACLE_HOME\admin\catupstr.sql进行编辑并更改以下部分:
SELECT TO_NUMBER(
'MUST_BE_&C_ORACLE_HIGH_MAJ..&C_ORACLE_HIGH_RU..&C_ORACLE_HIGH_RUR')
FROM v$instance
WHERE substr(version_full,1,instr(version,'.',1,3)-1) !=
'&C_ORACLE_HIGH_MAJ..&C_ORACLE_HIGH_RU..&C_ORACLE_HIGH_RUR';
至:
SELECT TO_NUMBER(
'MUST_BE_&C_ORACLE_HIGH_MAJ..&C_ORACLE_HIGH_RU..&C_ORACLE_HIGH_RUR')
FROM v$instance
WHERE substr(version_full,1,instr(version_full,'.',1,3)-1) !=
'&C_ORACLE_HIGH_MAJ..&C_ORACLE_HIGH_RU..&C_ORACLE_HIGH_RUR';
您一眼看不出差异吗?
不用担心–只需将
“ substr(version_full,1,'.',1,3)-1)” 替换为
“ ”即可。 而已。substr(version_full,1,instr(version_full,'.',1,3)-1)
由于Windows上没有一次性软件,因此无法寻求bug 30870439的修复。您将必须等到最早(18.12.0)提供此修复程序。
什么时候会发生此问题?
在升级到Oracle 18.10.0,Oracle 18.11.0以及Oracle 18.12.0的最有可能发生此类问题-但仅在Windows上。
当您在Linux环境中检查Oracle 19c?/rdbms/admin/catupstr.sql时,您将认识到那里也不存在此修复程序。但是,随着RU 19.10.0将于2021年1月到达,我们将确保随后存在此修复程序。
同样,Oracle 18c在Unix端口上不会发生此问题,而仅在Windows 上会发生。
作者:Mike.Dietrich
文章来源:https://mikedietrichde.com/2020/07/08/windows-only-upgrade-to-oracle-18-10-0-fails-with-ora-01722/




