无法删除或截断 oracle 中的表
Posted
技术标签:
【中文标题】无法删除或截断 oracle 中的表【英文标题】:Not able to drop or truncate the table in oracle 【发布时间】:2017-03-06 08:14:12 【问题描述】:我无法删除或截断我的表格。但是,我能够成功地从表中删除行。
每当我尝试删除或截断会话时,我都会进入挂起状态,我必须手动终止会话。
仅供参考。在删除之前还有一个与我的表关联的触发器。我也无法禁用该触发器。
希望,我的问题很清楚。如果我需要提供更多信息,还请提出建议。
感谢您的宝贵时间。
【问题讨论】:
检查你的权限..(授予) 可能是被其他用户锁定了?您需要对表进行截断、删除等操作的独占访问权限。 @scaisEdge 我已经检查过没有权限问题。如果存在许可问题,那么我将收到有关授权的错误,而不是我的会话将挂起。感谢您的建议。 @ammoQ 我已经签入 v$locked_objects 找不到任何锁。 @Tajinder 正确.. 然后确保表没有被其他人锁定.. (插入、更新、删除...) 【参考方案1】:我没有关于正在发生的事情的完整信息,但首先在你的会话中运行这个查询,如果它给你结果,那么就有一个锁
SELECT a.SESSION_ID, B.Owner, B.Object_Name, A.Oracle_Username, A.OS_User_Name
FROM V$Locked_Object A, All_Objects B
WHERE A.Object_ID = B.Object_ID
尝试释放锁并了解锁是如何发生的,也许触发器正在执行一些没有提交的事情?
请注意,当您尝试截断表时,应运行上述查询。
【讨论】:
感谢您的回答。我在运行 truncate 命令后尝试了您的查询。是的,我得到了我的表名。请建议现在做什么。 @Tajinder 我编辑我的答案并添加了会话 ID,查询会告诉你谁在锁定表,OS_USERNAME 是什么?这将告诉您锁定表的人,然后尝试知道他在执行什么,如果他正在进行 DML 更改(更新、插入、删除)而没有提交,那么这就是您拥有锁的原因。在他的会话中运行一个提交,它将释放锁 锁定是由于我的 truncate 命令。你能解释一下为什么我能够成功地从表中删除行,但不能截断表。感谢您的宝贵时间。 当你删除数据时,你运行了 commit 吗?你可以从另一个会话中运行删除吗? @塔金德 是的,我运行提交并删除成功。我在同一个会话上运行删除和截断。以上是关于无法删除或截断 oracle 中的表的主要内容,如果未能解决你的问题,请参考以下文章