案例场景:

备库上有一张分区表,在做数据导入出了点问题,需要truncate掉重新导入,在执行truncate table时发生了04021错误。

错误分析:

ora-04021的解释是等待锁定对象时发生超时,就是说truncate操作锁定不了表(5分钟内不能锁定对象就会提示超时),有某些进程或会话正在使用此对象,truncate操作此时是不被允许的。

解决办法:

1,比较消极的办法就是等。官方Action:Retry the operation later,等到其他进程或会话释放对象后再执行。

缺点是,如果遇到死锁,进程挂起,或者是一个长事务在占用这个对象,那就不知道要等多久了。。

2,找到那个进程在锁定对象,kill掉。

首先查看是否在表上发生了死锁,如果有kill掉进程

select object_name,s.sid,s.serial# 
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
alter system kill session 'sid,serial#';

如果没有发生死锁,优先考虑是否有进程占用或挂起的情况,查询正在执行的sql语句

SELECT b.sid oracleID,  
  b.username 登录Oracle用户名,  
      b.serial#, 
       spid 操作系统ID,  
      paddr,  
      sql_text 正在执行的SQL
FROM v$process a, v$session b, v$sqlarea c  
WHERE a.addr = b.paddr  
  AND b.sql_hash_value = c.hash_value  
and sqltext like ‘%表名%’;

发现正在后台运行的跟此表相关的SQL语句,用alter system kill session 干掉他们,再执行truncate,

查询v$locked_object发现此表已经被truncate的session锁定,证明truncate操作已经在执行了。

------------------总结----------------

此次事件中,truncate不能锁定对象,是因为之前有一个此表上的select count(*) 在跑,记得是之前执行过的一个操作,但是结果一直没有跑出来,备机是通过堡垒机打开shell窗口管理的,一段时间不操作后窗口断掉,这条语句就一直在后台执行,也一直占用着对象。

ora-04021 无法锁表的解决办法的更多相关文章

  1. mysql数据库的锁表与解决办法(原博客url:http://www.cnblogs.com/wanghuaijun/p/5949934.html)

    MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level loc ...

  2. Hive中将文件加载到数据库表失败解决办法

    Hive中将文件加载到数据库表失败解决办法(hive创建表失败) 遇到的问题: FAILED: Execution Error, return code 1 from org.apache.hadoo ...

  3. ssi-uploader上传图片插件,点击选择文件按钮自动提交表单解决办法

    先介绍一下这款插件,然后再谈使用中可能遇到的问题 ssi-uploader是一个JQuery的图片上传插件,界面比较美观 github地址:https://github.com/ssbeefeater ...

  4. EXP无法导出空表的表结构解决办法

    原文链接:http://www.cnblogs.com/Mr_JinRui/archive/2012/11/05/2755035.html 早的一次使用oracle 11g导出数据发现有的表丢失了,感 ...

  5. ORA-00054: 资源正忙 --锁表的解决方法

    问题描述 ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效 发生异常 原因:其他Session已经对目标表做了操作,且未提交操作,导致锁表,新的Session无法 ...

  6. 查询Oracle锁表和解决方法

    Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容.(1)锁表查询的代码有以下的形式:select count( ...

  7. 查看oracle是否锁表以及解决方法

    Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容.(1)锁表查询的代码有以下的形式: select count ...

  8. Oracle 11g导出空表、少表的解决办法

    ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间. 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产 ...

  9. oracle导不出空表的解决办法

    1.先进行表分析(一定要执行此步,否则查询空表可能不准确) select 'analyze table '||table_name||' compute statistics;' from user_ ...

随机推荐

  1. 用C语言(apue)实现 把时间戳转换为国标格式的字符串(2017-07-17 22:36:12)的函数

    /*******************************************************************************/ /** *** 函 数 名: cha ...

  2. android 面试

    2. 横竖屏切换时候 activity 的生命周期1. 不设置 Activity 的 android:configChanges 时 , 切屏会重新调用各个生命周期 , 切横屏时会执行一次 , 切竖屏 ...

  3. xslt 映射 xml

    1.xslt文件映射xml文件中的A节点的时候,如果A节点有属性的话,先把属性值映射出来,然后再映射节点的值,如下: xml文件: <A age="11" sex=" ...

  4. DEDECMS模板文件命名规则

    DEDECMS提供的模板文件命名规则,也算是一种规范吧,希望能给大家提供参考. 模板保存位置 模板目录:{cmspath} /templets/样式名称(英文,默认为default,其中system为 ...

  5. [Python基础]Python中remove,del和pop的区别

    以a=[1,2,3] 为例,似乎使用del, remove, pop一个元素2 之后 a都是为 [1,3], 如下:http://Novell.Me >>> a=[1,2,3] &g ...

  6. Redis list 之增删改查

    一.增加 1.lpush [lpush key valus...]  类似于压栈操作,将元素放入头部 127.0.0.1:6379> lpush plist ch0 ch1 ch2 (integ ...

  7. 程序生成word与PDF文档的方法(python)

    程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用free ...

  8. Leetcode_num4_Reverse Integer

    题目: Reverse digits of an integer. Have you thought about this? Here are some good questions to ask b ...

  9. GitHub搭建个人网站续

    来源:http://www.cnblogs.com/crazyacking/p/4678976.html http://www.cnblogs.com/crazyacking/category/716 ...

  10. C++之异常处理

     C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...