我必须编写一个脚本,从一个表中获取一天的数据并将其转储到另一个表中(我的其他进程将在其中处理该数据)。但是,我要从中导出数据的表是一个“实时”表,它有大量的插入。任何类型的锁定(在导出完成时)都是 Not Acceptable 。我知道 mysql 有一种不通过“--skip-lock-tables”标志持有锁的方法。 Oracle 有类似的东西吗?如果不是,实现此目标的最佳方法是什么?
正在使用的 Oracle 版本是 - Oracle SE One 12.1.0.1.v2
最佳答案
在 SELECT 启动的时间点,一个 SCN 附加到您的 SELECT。在该 SCN 之后对数据的任何更改都不会影响您的 SELECT。您的 SELECT 从 UNDO 读取旧数据。如果这是一个高事务表并且您希望您的 SELECT 长时间运行,请确保您有足够的 UNDO 空间和足够的 UNDO_RETENTION。
同时关注良好的设计可以防止任何潜在的问题。从这个角度来看,我建议在源表上实现每日分区。这将有助于轻松备份一天的数据,并有助于将来维护表格。
希望这对您有所帮助。
关于database - 在 Oracle 中导出一天数据而不持有锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36787471/