1 select * from session_privs;--查看当前用户的所有权限
2 select * from tab where tabtype='TABLE';--查看当前用户下的所有表
3
4 commit;    --结束上一个事务 并且开始一个新的事务
5 update student set sal = null where xh =1000;
6 savepoint c111;
7 insert into student(xh,name,sex) values (1004,'MIKE','男');
8 rollback to c111; --撤销了插入的数据
9 rollback; 

对于编程式事务的使用,还应该注意一下几点:

第一点,有开有关:事务管理层有事务开启必须有事务关闭,可以通过设置事务旗标在finally中进行事务管理;示意性代码如下:

第二点,单一出口:即一个方法的renturn只有一处,异常情况通过throw 抛出,确保最外层事务管理层能够通过捕获到得异常控制事务状态(提交或回滚)。

第三点,设置事务超时:事务执行超过指定时间,强制杀掉事务,关闭连接,从而确保其他业务不会应为该事务锁定相关业务表而阻塞而导致恶性循环。

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

1.select t2.username,
2.       t2.sid,
3.       t2.serial#,
4.       t3.object_name,
5.       t2.OSUSER,
6.       t2.MACHINE,
7.       t2.PROGRAM,
8.       t2.LOGON_TIME,
9.       t2.COMMAND,
10.       t2.LOCKWAIT,
11.       t2.SADDR,
12.       t2.PADDR,
13.       t2.TADDR,
14.       t2.SQL_ADDRESS,
15.       t1.LOCKED_MODE
16.  from v$locked_object t1, v$session t2, dba_objects t3
17. where t1.session_id = t2.sid
18.   and t1.object_id = t3.object_id
19. order by t2.logon_time;  

大家发现,上面这条SQL语句用到了Oracle的两个视图和一个表,分别是v$locked_object、v$session、dba_objects:

v$locked_object 视图中记录了所有session中的所有被锁定的对象信息。

v$session 视图记录了所有session的相关信息。

dba_objects 为oracle用户对象及系统对象的集合,通过关联这张表能够获取被锁定对象的详细信息。

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系统查询语句:

 1 -查某session 正在执行的sql语句,从而可以快速定位到哪些操作或者代码导致事务一直进行没有结束等.
 2 SELECT /*+ ORDERED */
 3  sql_text
 4   FROM v$sqltext a
 5  WHERE (a.hash_value, a.address) IN
 6        (SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value),
 7                DECODE(sql_hash_value, 0, prev_sql_addr, sql_address)
 8           FROM v$session b
 9          WHERE b.sid = '233')  /* 此处233 为SID*/
10  ORDER BY piece ASC;
11
12
13 --查进程.
14 select * from v$process ;
15
16
17 --查锁18    select * from v$lock;
19
20 --查锁定的对象
21 select * from v$locked_object
22
23 --查事务
24 select * from v$transaction
25
26 --查session
27  select v.* from v$session v where machine='xxx' and username='xxx' and status='INACTIVE' order by last_call_et desc
28
29 --查dba_objects对象
30 select * from dba_objects
31 where object_id = '14977'
32
33 --查锁定的表
34  select t2.username,t2.sid,t2.serial#,t3.object_name,t2.OSUSER,t2.MACHINE,t2.PROGRAM,t2.COMMAND,t2.LAST_CALL_ET
35         from v$locked_object t1,v$session t2 ,dba_objects t3
36         where t1.session_id=t2.sid  and t1.object_id = t3.object_id
37         order by t2.logon_time;

转载于:https://www.cnblogs.com/vinsonLu/archive/2012/08/03/2621291.html

oracle 筆記(事務,鎖)相关推荐

  1. oracle 导出secquence,oracle等待事件7——事務上的等待事件

    1.enq:TM-contention 執行DML期間,為防止對DML相關的對象進行修改,執行DML的進程必須對該表獲得TM鎖,若獲得TM鎖的過程發生爭用,則等待enq:TM-contention事件 ...

  2. Git-rebase 小筆記

    https://blog.yorkxin.org/posts/2011/07/29/git-rebase/ 最近剛好有個機會整理很亂的 Git commit tree,終於搞懂了 rebase 的用法 ...

  3. (筆記) 如何在字串中從指定字元抓到指定字元(pointer版)?

    Abstract 這是一個實務上常用的功能,可惜在C語言的string.h並沒有提供,本文實作出一個小function達到此功能,並搭配pointer. Introduction 在(筆記) 如何在字 ...

  4. (筆記) 如何在字串中從指定字元抓到指定字元(pointer版)? (C/C++) (C)

    Abstract 這是一個實務上常用的功能,可惜在C語言的string.h並沒有提供,本文實作出一個小function達到此功能,並搭配pointer. Introduction 在(筆記) 如何在字 ...

  5. C# 一些學習小筆記及技巧

    學習及工作中積累了一些零零碎碎的小筆記及技巧(C#),重溫和匯總一下. 1. 類別轉換時,如果你未能確定數值有效,使用TryParse 比 Parse 要更安全, TryParse 不會引發異常. 2 ...

  6. (筆記) 如何使用Debussy與ModelSim做Co-Simulation? (SOC) (Verilog) (VHDL) (Debussy) (ModelSim)

    Abstract 本文介紹如何使用Debussy與ModelSim做Co-Simulation,並使用Verilog.VHDL以及Verilog搭配VHDL交叉一起simulation. Introd ...

  7. ARMv8 與 Linux的新手筆記

    ARMv8 與 Linux的新手筆記 by loda hlchou@gmail.com 從iPhone 5S採用ARMv8處理器架構後,對於ARMv8 64bits的相關討論很多,也受到大家關注,Go ...

  8. (筆記) 如何使用Visual C++ 6.0開發Win32 DLL? (C/C++) (VC++)

    Abstract本文討論使用Visual Studio 6.0的Visaul C++開發Win32 DLL. Introduction 使用環境:Visual Studio 6.0, Visual C ...

  9. 记录安装oracle的那些事(二)之双系统安装

    今天电脑恢复了前几天的模样,依旧是仅有的win7,胆颤心惊的依然决定用easybcd装. 首先,资源的需要: 1 两个centos的镜像.bin-dvd的,这个是全的,不用在线下载了. 2 easyB ...

  10. 【讀書筆記】人人都是产品经理

    [讀書筆記]人人都是产品经理 SkySeraph Mar. 9th  2014 Email:skyseraph00@163.com ABOUT NOTE ======== By SkySeraph-2 ...

最新文章

  1. python3运算符和表达式实验报告_对Python3 * 和 ** 运算符详解
  2. java params 参数_将params作为参数传递给类扩展方法的函数
  3. 关于c语言中负数位移位操作的漫谈
  4. Python 的运算符
  5. 需求用例分析之三:补充规约
  6. php读取word中的内容
  7. imagecomposition工程分析
  8. 【转载】Android 中东阿拉伯语适配,看这一篇够了。
  9. 析砂性土层php泥浆护壁,土未工程施工习题集2
  10. 关于主数据管理及病人主索引的说明
  11. 微信小程序 - 获取汉字拼音首字母(汉字英文首字母)
  12. 内网liunx环境升级nginx版本(因为nginx 0.6.x < 1.20.1 1-Byte Memory Overwrite RCE 系统漏洞而升级)
  13. Clickhouse时间日期函数一文详解+代码展示
  14. 图片怎么转换为jpg格式的?照片如何在线转格式?
  15. python员工管理系统课程设计报告_python--员工信息管理系统编译及思路
  16. pxe高效批量网络装机--手把手教学
  17. flume1.9自定义hbaseSink(实际是自定义序列化类)
  18. java image 反色,C#实现图像反色的方法
  19. (附源码)ssm电影院管理系统的设计与实现 毕业设计241505
  20. 【GNSS技术发展三部曲】

热门文章

  1. 我是如何获取新知识的?
  2. python快速示例_python实现快速排序的示例(二分法思想)
  3. bzoj1612 奶牛的比赛
  4. JavaScript技巧总结和本地存储(一)
  5. Maven 常用的命令
  6. Xcode 自定义代码块及代码块迁移
  7. bzoj5312 冒险(吉司机线段树)题解
  8. SPOJ PHRASES Relevant Phrases of Annihilation(后缀数组 + 二分)题解
  9. 动态规划 343,279,91,62,63,198
  10. java程序(1016)