在进行批量对DML操作时程序竟然中断了,不再往下执行、查询一下某张表被锁住了,因此不再往下执行了

如果怀疑表被锁了,或者事务未被正常关闭,在Oracle数据库中我们可以通过以下语句进行查询获取相关信息:

select t2.username,
       t2.sid,
       t2.serial#,
       t3.object_name,
       t2.OSUSER,
       t2.MACHINE,
       t2.PROGRAM,
       t2.LOGON_TIME,
       t2.COMMAND,
       t2.LOCKWAIT,
       t2.SADDR,
       t2.PADDR,
       t2.TADDR,
       t2.SQL_ADDRESS,
       t1.LOCKED_MODE
  from v$locked_object t1, v$session t2, dba_objects t3
 where t1.session_id = t2.sid
   and t1.object_id = t3.object_id
 order by t2.logon_time;

大家发现,上面这条SQL语句用到了Oracle的两个视图和一个表,分别是v$locked_object、v$session、dba_objects:
     v$locked_object 视图中记录了所有session中的所有被锁定的对象信息。
     v$session 视图记录了所有session的相关信息。
     dba_objects 为oracle用户对象及系统对象的集合,通过关联这张表能够获取被锁定对象的详细信息。

如当时表被锁情况

查出原因后

--解除数据库中被锁住的表(SID,SERIAL)
alter system kill session '39,1390';

全部解除之后就可以执行DML的语句啦

By the way

v$locked_object中的LOCKED_MODE字段表示锁的模式,oracle中锁的模式有如下几种:
     0:none 
    1:null 空 
    2:Row-S 行共享(RS):共享表锁,sub share  
    3:Row-X 行独占(RX):用于行的修改,sub exclusive  
    4:Share 共享锁(S):阻止其他DML操作,share 
    5:S/Row-X 共享行独占(SRX):阻止其他事务操作,share/sub exclusive  
    6:exclusive 独占(X):独立访问使用,exclusive

数字越大锁级别越高, 影响的操作越多。

1级锁有:Select,有时会在v$locked_object出现。 
2级锁有:Select for update,Lock For Update,Lock Row Share  
select for update当对话使用for update子串打开一个游标时,所有返回集中的数据行都将处于行级(Row-X)独占式锁定,其他对象只能查询这些数据行,不能进行update、delete或select for update操作。 
3级锁有:Insert, Update, Delete, Lock Row Exclusive 
没有commit之前插入同样的一条记录会没有反应, 因为后一个3的锁会一直等待上一个3的锁, 我们必须释放掉上一个才能继续工作。 
4级锁有:Create Index, Lock Share 
locked_mode为2,3,4不影响DML(insert,delete,update,select)操作, 但DDL(alter,drop等)操作会提示ora-00054错误。 
00054, 00000, "resource busy and acquire with NOWAIT specified" 
// *Cause: Resource interested is busy. 
// *Action: Retry if necessary. 
5级锁有:Lock Share Row Exclusive  
具体来讲有主外键约束时update / delete ... ; 可能会产生4,5的锁。 
6级锁有:Alter table, Drop table, Drop Index, Truncate table, Lock Exclusive

附上几条简单的oracle系统查询语句:

--查某session 正在执行的sql语句,从而可以快速定位到哪些操作或者代码导致事务一直进行没有结束等.
SELECT /*+ ORDERED */ 
 sql_text
  FROM v$sqltext a
 WHERE (a.hash_value, a.address) IN
       (SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value),
               DECODE(sql_hash_value, 0, prev_sql_addr, sql_address)
          FROM v$session b
         WHERE b.sid = '233')  /* 此处233 为SID*/
 ORDER BY piece ASC;
 
--查进程.
select * from v$process ;

--查锁
   select * from v$lock;
 
--查锁定的对象
select * from v$locked_object
 
--查事务
select * from v$transaction
 
--查session
 select v.* from v$session v where machine='xxx' and username='xxx' and status='INACTIVE' order by last_call_et desc
 
--查dba_objects对象
select * from dba_objects 
where object_id = '14977'

--查询数据库表字段总数
select count(0) from user_col_comments where table_name = upper('fl_sys_log');

--查询字符串长度(第一个按字符长度计算,第二个是按字节计算)
select length('a大b中国'),lengthb('a大b中国') from dual;

--同表中,存在重复记录时,删除其中一条

delete from tablename a where rowid!=(select min(rowid) from tablename b where a.columnId=b.columnId)

--删除物化视图
drop materialized view log on fl_rent_payplan(创建物化视图的基表名称);--首先删除日志文件
drop materialized view MV_HXMX(物化视图名称);

--命令窗口下,打开输出日志
set serveroutput on;

--将所有的系统权限赋值给某用户
grant all privileges to username;

--创建表空间
create tablespace lg   
 datafile '/u01/app/oracle/oradata/orcl/lg.dbf' size 1g;

--改变表空间大小
alter database datafile '/u01/app/oracle/oradata/orcl/lg.dbf' resize 3072m;

--查看表空间是否自动增长
SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;

--打开表空间自动增长
alter database datafile '/u01/app/oracle/oradata/orcl/lg.dbf' autoextend on;

--每次自动增长200m
alter database datafile '/u01/app/oracle/oradata/orcl/lg.dbf' autoextend on next 200M;

--每次自动增长200m,数据表最大不超过1G
alter database datafile '/u01/app/oracle/oradata/orcl/lg.dbf' autoextend on next 200M maxsize 1024M;

--查看各表空间分配情况
select tablespace_name, sum(bytes) / 1024 / 1024  from dba_data_files group by tablespace_name;

-查看各表空间空闲情况
select tablespace_name, sum(bytes) / 1024 / 1024  from dba_free_space  group by tablespace_name;

oracle 锁表查询及解决、表字段查询的更多相关文章

  1. Oracle锁表查询和解锁方法

    数据库操作语句的分类 DDL:数据库模式定义语言,关键字:create DML:数据操纵语言,关键字:Insert.delete.update DCL:数据库控制语言 ,关键字:grant.remov ...

  2. oracle锁表查询

    ORACLE EBS操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于"假死"状态,可能是该表被某一用户锁定,导致其他用户无法继续操作 复制代码代码如下: --锁表查 ...

  3. THINKPHP_(2)_TP模型的多表关联查询和多表字段的关键字搜索。

    问题: 上述内容中,标题和学年属于一个数据表.分类则属于另外一个数据表,并且是利用id关联后,另外一个数据表中的title字段. 需要设置关键字搜索,实现多表关联查询和多表字段的关键字搜索. 解决方法 ...

  4. oracle锁表问题解决方法

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp52 Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程 ...

  5. oracle锁表

    一.锁表的处理 Oracle锁表比较简单,查询锁表的session杀掉就可以了. 1.以下几个为相关表 SELECT * FROM V$LOCK; SELECT * FROM V$SQLAREA; S ...

  6. MYSQL锁表问题的解决方法

    本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sq ...

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

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

  8. oracle锁表查询,资源占用,连接会话,低效SQL等性能检查

    查询oracle用户名,机器名,锁表对象 select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, l.os_user ...

  9. Oracle锁表查询与解锁

    锁表查询和解锁 --查询SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv ...

随机推荐

  1. rtmp拉流测试工具

    http://www.cutv.com/demo/live_test.swf ================================================== ========== ...

  2. windows下gethostbyname 调用失败

    gethostbyname()函数属于WinSock API库,而在使用WinSock API之前,必须调用WSAStartup函数,只有该函数成功返回(表示应用程序与WinSock库成功地建立起连接 ...

  3. object-assign合并对象

    1. Object.assign() 对于合并对象操作, ECMAScript 6 中提供了一个函数: Object.assign(target, source); 这个方法会将所有可枚举 [1] 的 ...

  4. [2015hdu多校联赛补题]hdu5372 Segment Game

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5372 题意:进行n次操作,操作分两种,0和1,每一个0操作按出现顺序有一个编号(从1开始 0操作 0 ...

  5. linux shell 去掉文本处理中的双引号

    cat aa.txt |sed 's/\"//g'  结果是:hello aa.txt "hello"

  6. [转] swf文件加密基础

    本来打算下班回来就写这个东西,一方面算是对今天学习的一个笔记记录,另外一方面,给一些朋友普及一些swf文件加密基础知识.之所以说是基础,那是因为我也是刚学习了一点,灰常的基础.不过晚上看了一会我是传奇 ...

  7. python学习笔记-Day6(2)

    xml处理模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融 ...

  8. Errors occurred during the build. Errors running builder 'JavaScript Validator' on project 'XXX'.

    Errors occurred during the build. Errors running builder 'JavaScript Validator' on project 'XXX'.   ...

  9. php 解析 视频 信息 封面 标题 图片 支持 优酷, 土豆 酷6 56 新浪 qq播客 乐视 乐视

    原文地址:http://www.lianyue.org/2013/2497/ <?php /** * 解析 视频信息 类 * * 支持 优酷, 土豆 酷6 56 新浪 qq播客 乐视 乐视 ** ...

  10. TF-IDF 相关概念

    概念 TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度. TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级. 词频( ...