首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除表分区,避免错误ORA-00054。

删除表分区,避免错误ORA-00054。
EN

Stack Overflow用户
提问于 2011-10-10 15:26:30
回答 3查看 5K关注 0票数 4

在这种情况下我需要你的意见。我试着解释一下情况。我有一个Windows服务,定期将数据存储在Oracle数据库中。存储此数据的表按日期进行分区(间隔日期范围分区)。数据库还有一个dbms_scheduler作业,除其他操作外,它截断和删除旧分区。

这种方法已经工作了一段时间,但是最近我遇到了一个奥拉-00054错误。经过一些调查后,通过以下步骤再现了错误:

  1. 打开一个sqlplus会话,禁用自动提交,并在分区表中插入数据,而不提交更改;
  2. 打开另一个sqlplus会话并截断/删除一个旧分区(如果我没有弄错的话,DDL操作将自动提交)。然后我们将得到ORA-00054错误。

有一些制约因素值得提及:

  • 我没有DBA访问数据库的权限;
  • 这是一个遗留应用程序,完全重构是不可行的;

那么,在您看来,有没有任何方法可以放弃这些旧分区,而不冒遇到ORA-00054错误的风险,并且不需要DBA的干预?我可以删除数据,但是空分区的数量每天都会增加。

在此之前,非常感谢您。

EN

回答 3

Stack Overflow用户

发布于 2011-10-10 16:36:40

此错误意味着有人(或其他东西)正在处理您试图删除的分区中的数据。也就是说,锁是在分区级别授予的。如果没有人使用分区,你的工作就会放弃。

现在你说这是一个遗留应用,你不想,也不能,重构它。当然可以。但是很明显,如果您有一个进程正在使用某个其他进程所使用的数据,那么显然有些事情是不正确的。我不同意@tbone的建议,那就是在锁被释放之前只循环:你不能仅仅摆脱一些人用来确定为什么他们仍然在处理他们显然不应该使用的数据的数据。

因此,第一步是找出锁定会话正在做什么。为什么他们还在修改你的背景工作想要退休的数据呢?这是一个脚本,它将帮助您建立具有锁的哪个会话。

不过,您“没有对数据库的DBA访问权限”。嗯,那是卷曲的。基本上,这不是一个没有DBA访问就可以解决的问题。

看来你有几个问题要处理。不幸的是,他们是政治和建筑,而不是技术,我们没有什么可以做的,以进一步帮助你。

票数 4
EN

Stack Overflow用户

发布于 2011-10-10 15:41:01

如何包装在pl/sql中的截断或拖放,在循环中尝试操作,在两次尝试之间等待x秒,以获得最大的尝试数。然后使用dbms_scheduler调用该过程/函数。

票数 3
EN

Stack Overflow用户

发布于 2011-10-10 15:36:14

也许能帮上忙。似乎和你描述的问题是一样的。(如果可以的话,忽略漫画书):

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7715093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档