我正在使用 Oracle 11g 数据库,其中有超过 12 个由许多表组成的模式。我已经为这些表的主键创建了序列。我还创建了同义词来从主模式中引用我的应用程序。
我的问题是,当我尝试从 1 台服务器中的 DB 导出(使用 expdp)模式并将转储文件导入(impdp)到安装在另一台服务器中的 db 时,仅某些表的序列值正在更改。即使我尝试重新映射表空间或模式,序列的值显示的值也比它们各自表中的行要小。因此,当我访问应用程序时,它会在保存数据时引发错误。
我很困惑,没有想法解决这个问题。请指教。他们有什么方法可以解决这个问题吗?
提前致谢。
如果您在没有参数的情况下对实时数据库运行导出命令
flashback_scn
或flashback_time
确保导出期间的一致性,那么这可能是一种预期的行为,因为这些对象是在不同的时间导出的,并且其中一个对象可能与另一个对象不一致。例如,如果序列对象在表之前导出,并且应用程序已使用该序列插入新记录并稍后导出,则表和序列可能不同步。
在开始导出过程之前停止应用程序或使用
expdp
类似的参数flashback_time
(这可能不会导出在此参数指定的时间之后进行的所有事务,除非您停止应用程序)可以防止这种情况。或者您可以在导入后通过重新创建来调整序列值。