首页 > 解决方案 > 我可以在 Oracle 中删除整个表而不撤消吗?

问题描述

我有一张桌子直到最近都很好用。我有一个与这个表交互的程序,步骤是......

  1. 删除所有记录
  2. 加载所有记录

最近记录的数量似乎开始使我们的 SQL 实例超载,当我尝试运行删除命令时,我得到......

ORA-30036: unable to extend segment by 128 in undo tablespace 'name'

我尝试使用 truncate 但我没有权限。有没有办法可以在没有撤消表空间的情况下删除?这适用于 SQL 开发人员,但我也希望它与 JDBC 连接一起使用。

标签: oracle

解决方案


基本上,您正在尝试模拟语句中的功能。TRANCATE TABLEDELETE

因此,您应该明确地使用 TRUNCATE TABLE它,因为它产生的量要少得多UNDO,而且它会将使用的空间释放到MINEXTENTS.

如果该表不在访问用户模式中,则您需要获得DROP ANY TABLE 可能有问题的权限。

一个简单的解决方法是在执行(立即)的表的架构中定义一个存储过程,TRUNCATE并且只请求EXECUTE该过程的授权。


推荐阅读