【发布时间】:2021-03-25 21:54:33
【问题描述】:
我有一张桌子直到最近都很好用。我有一个与这个表交互的程序,步骤是......
- 删除所有记录
- 加载所有记录
最近记录的数量似乎开始使我们的 SQL 实例超载,当我尝试运行删除命令时,我得到......
ORA-30036: unable to extend segment by 128 in undo tablespace 'name'
我尝试使用 truncate 但我没有权限。有没有办法可以在没有撤消表空间的情况下删除?这适用于 SQL 开发人员,但我也希望它与 JDBC 连接一起使用。
【问题讨论】:
-
什么意思,“你没有权限”(截断它)?你拥有这张桌子吗?因为,截断会重置高水位线。
-
你想通过删除每一行然后插入它们来实现什么?您是否只是从其他地方刷新数据 - 然后使用合并语句,以便仅进行所需的修改,并且仅为此生成撤消/重做。如果正在查询您的表,则截断是等待发生的逻辑损坏 - 您的用户不希望 Schrödinger 的表有时会被填充,有时不会。
-
这是一个有效的评论@AndrewSayer,但您还应该提到
merge性能较差,更复杂,更容易出错并且需要主键。因此,如果 mantainace 窗口 是可能的,truncate-insert选项显然是首选。 -
@AndrewSayer 这取决于任务。这可能是 ETL 过程的某个阶段,因此无需合并某些内容。在加载速度和可用性之间有一个选择,有时用户可能会在 30 秒后重试。
标签: oracle