oracle中是否有内置的自动提交功能?就像我想要更新一百万行,并且我想将自动提交设置为1000行或2000行,我必须只是在某处配置.
它将在每1000或2000行之后使用自动提交更新循环中的百万行.此功能在sqlloader中可用.我想知道oracle中是否也有类似的功能.
不能.您不能要求Oracle逐步提交单个SQL语句正在执行的工作.这会违反ACID合规性的原子性部分,因此对于允许关系数据库来说这将是一件非常糟糕的事情.这样做意味着如果数据库失败或者在处理N行后语句失败,您将无法知道哪些N行已被处理.这样做意味着其他用户可能会看到部分完整的数据导致他们的报告不正确,并且他们的查询可能会返回误导性结果.
当然,您可以编写自己的自定义逻辑来批量更新行.然而,这通常是一个坏主意.运行正在进行临时提交的进程需要更长时间,可能更长.它需要编写代码以确保该过程是可重入的(也就是说,它可以在服务器发生故障时从中断处继续,而不会尝试重新更新已更新和已提交的行或在至少不是数据更新为不同的值,它会导致更新产生更多UNDO和REDO服务器上.这将需要使用数据必须认识到,他们可以处理的中间被读它的每一个过程UPDATE声明.并且它增加了ORA-01555错误的风险.通常没有必要进行临时提交 - 缺点很少,非常非常值得.