database - 在 Oracle 中导出一天数据而不持有锁

标签 database oracle oracle12c

我必须编写一个脚本,从一个表中获取一天的数据并将其转储到另一个表中(我的其他进程将在其中处理该数据)。但是,我要从中导出数据的表是一个“实时”表,它有大量的插入。任何类型的锁定(在导出完成时)都是 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/

相关文章:

php - 如何保持与数据库的连接打开

mysql - 使用关系数据库管理系统实现空间数据库

oracle - 我是否认为 MERGE 优于 UPDATE SET (-, -, -) = SELECT -, -, -?

sql - 根据 switch case 可能的列值使用不同的条件

oracle - UPDATE 查询与 RETURNING INTO 子句结合使用时速度很慢

java - Hibernate 没有匹配的认证协议(protocol)

sql - oracle嵌套表中的最大行数是多少

大数据MySQL数据库设计

php - 将用户输入与mysql数据库匹配,并根据用户输入给出不同的结果

oracle - Oracle 即时客户端和 Oracle 客户端的区别