我正在尝试将转储文件从 11g 数据库导入 19c 数据库实例。我按照 Oracle 的建议以 SYSTEM 身份运行该作业。这项工作开始了,但很快就变成了失败的 SQL 错误,这些错误都有相同的:
ORA-54002: only pure functions can be specified in a virtual column expression.
我对该错误进行了一些研究,并发现一些迹象表明这是在 Oracle 12 之后解决的问题或错误。以下博客解决了该问题:
从 Oracle 12.2 开始,正则表达式函数被认为是非确定性的
...并讨论了一种涉及重新编码 SQL 的解决方法。
我正在从转储中创建一个 DDL 文件,以便为我提供所有可以使用的代码。
我的问题是:
- 是否有替代方法可以重写转储文件中的所有代码并针对 impdp 作业运行该代码?
- 这还有可能吗?
- 是否有其他选项可以从 11g 实例创建新的转储文件,该文件可以与 impdp 一起使用到 19c?
我认为这份文件很好地总结了它:
Oracle 数据库的 10 项行为更改、不推荐使用和不支持的特性(Oracle | Docs)
它甚至不包含对 11.x 版本的任何引用。
我猜您的数据库包含一些可能已被取消支持的功能。
推荐解决方案
升级前信息工具
您可以使用文章使用 Oracle 数据库的升级前信息工具中提供的信息查明数据库中的问题。但是,根据您问题中提供的信息,我想这可能需要一段时间。
Oracle 的白皮书中也提到了升级前信息工具:升级和迁移到 Oracle Database 19c
顾问
如果您正在升级数据库,那么您可能需要考虑联系一位顾问,该顾问可能会为您提供清晰简洁的功能/功能列表/...在不同的数据库版本中不再支持这些功能.
回答您的问题
请参阅上述建议。
也许不是,这取决于 11g 数据库中使用的功能。它可能有效,也可能无效。
您可以从旧数据库创建所有对象的 DDL,并尝试在新的 19c 数据库中创建它们。但即便如此,您可能正在创建包含不支持的功能的对象。
祝你好运。