ora-04021 无法锁表的解决办法
案例场景:
备库上有一张分区表,在做数据导入出了点问题,需要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 无法锁表的解决办法的更多相关文章
- mysql数据库的锁表与解决办法(原博客url:http://www.cnblogs.com/wanghuaijun/p/5949934.html)
MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level loc ...
- Hive中将文件加载到数据库表失败解决办法
Hive中将文件加载到数据库表失败解决办法(hive创建表失败) 遇到的问题: FAILED: Execution Error, return code 1 from org.apache.hadoo ...
- ssi-uploader上传图片插件,点击选择文件按钮自动提交表单解决办法
先介绍一下这款插件,然后再谈使用中可能遇到的问题 ssi-uploader是一个JQuery的图片上传插件,界面比较美观 github地址:https://github.com/ssbeefeater ...
- EXP无法导出空表的表结构解决办法
原文链接:http://www.cnblogs.com/Mr_JinRui/archive/2012/11/05/2755035.html 早的一次使用oracle 11g导出数据发现有的表丢失了,感 ...
- ORA-00054: 资源正忙 --锁表的解决方法
问题描述 ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效 发生异常 原因:其他Session已经对目标表做了操作,且未提交操作,导致锁表,新的Session无法 ...
- 查询Oracle锁表和解决方法
Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容.(1)锁表查询的代码有以下的形式:select count( ...
- 查看oracle是否锁表以及解决方法
Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?本文我们主要就介绍一下这部分内容.(1)锁表查询的代码有以下的形式: select count ...
- Oracle 11g导出空表、少表的解决办法
ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间. 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产 ...
- oracle导不出空表的解决办法
1.先进行表分析(一定要执行此步,否则查询空表可能不准确) select 'analyze table '||table_name||' compute statistics;' from user_ ...
随机推荐
- 用C语言(apue)实现 把时间戳转换为国标格式的字符串(2017-07-17 22:36:12)的函数
/*******************************************************************************/ /** *** 函 数 名: cha ...
- android 面试
2. 横竖屏切换时候 activity 的生命周期1. 不设置 Activity 的 android:configChanges 时 , 切屏会重新调用各个生命周期 , 切横屏时会执行一次 , 切竖屏 ...
- xslt 映射 xml
1.xslt文件映射xml文件中的A节点的时候,如果A节点有属性的话,先把属性值映射出来,然后再映射节点的值,如下: xml文件: <A age="11" sex=" ...
- DEDECMS模板文件命名规则
DEDECMS提供的模板文件命名规则,也算是一种规范吧,希望能给大家提供参考. 模板保存位置 模板目录:{cmspath} /templets/样式名称(英文,默认为default,其中system为 ...
- [Python基础]Python中remove,del和pop的区别
以a=[1,2,3] 为例,似乎使用del, remove, pop一个元素2 之后 a都是为 [1,3], 如下:http://Novell.Me >>> a=[1,2,3] &g ...
- Redis list 之增删改查
一.增加 1.lpush [lpush key valus...] 类似于压栈操作,将元素放入头部 127.0.0.1:6379> lpush plist ch0 ch1 ch2 (integ ...
- 程序生成word与PDF文档的方法(python)
程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用free ...
- Leetcode_num4_Reverse Integer
题目: Reverse digits of an integer. Have you thought about this? Here are some good questions to ask b ...
- GitHub搭建个人网站续
来源:http://www.cnblogs.com/crazyacking/p/4678976.html http://www.cnblogs.com/crazyacking/category/716 ...
- C++之异常处理
C++ Code 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...