`
peigang
  • 浏览: 170625 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ORACLE 数据库状态查询、管理

 
阅读更多

    一般的系统采用的都是Spring提供的声明式事务。而我们系统由于历史遗留问题,采用了offbiz的基于模型配置的架构体系,此套体系中事务的开启以及关闭都是通过编程式事务完成。编程式事务在事务范围控制方面比较灵活,但是在灵活的同时也存在潜在的风险。如果事务开启后没有正常结束,那么事务也就会一直占用连接而得不到释放。虽然可以通过设置事务超时值从而在事务超时杀掉事务释放连接,这种方式个人觉得还是存在一定得不可控性。所以对于编程式事务的使用,还应该注意一下几点:

 

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

 

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

 

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

 

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

 
Sql代码 
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用户对象及系统对象的集合,通过关联这张表能够获取被锁定对象的详细信息。

 

     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 t2.username,t2.sid,t2.serial#,t3.object_name,t2.OSUSER,t2.MACHINE,t2.PROGRAM,t2.COMMAND,t2.LAST_CALL_ET
        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;

分享到:
评论

相关推荐

    oracle数据库查询语句大全

    Oracle数据库查询语句大全 Oracle数据库查询语句大全是一篇关于Oracle数据库的查询语句总结的...通过这篇文章,我们可以了解到Oracle数据库的各种查询语句和基本操作语句,从而更好地掌握Oracle数据库的使用和管理。

    ORACLE数据库 ORACLE数据库

    - **SQL**:结构化查询语言,是用于管理关系数据库的标准语言,Oracle数据库支持SQL的多种扩展。 - **表空间**:存储数据的逻辑单位,包含一个或多个数据文件。 - **数据文件**:实际保存数据的物理文件,存在于...

    Oracle 数据库管理.pdf

    Oracle数据库管理是IT行业中一项关键的技术,涉及到数据库的维护、优化、故障处理等多个方面。Oracle数据库是由甲骨文公司(Oracle Corporation)开发的一款关系型数据库管理系统,以其强大的功能、良好的可伸缩性和...

    Oracle 数据库管理教程

    Oracle数据库管理是计算机科学中数据库管理系统领域的重要分支。Oracle数据库是一个大型、多层次、多用户的关系型数据库管理系统。为了深入学习和理解Oracle数据库管理,本教程将从数据库基础、Oracle服务器构成、...

    实验2Oracle数据库物理存储结构管理.docx

    控制文件是Oracle数据库中存储控制信息的文件,用于记录数据库的结构和状态。控制文件可以被添加、删除和备份。例如,在实验中,我们添加了一个控制文件control03.ctl到BOOKSALES数据库中。 alter system set ...

    如何备份还原oracle数据库

    对于Oracle数据库管理员而言,掌握如何高效地进行数据库备份与恢复是一项至关重要的技能。本文将根据给定的信息“如何备份还原oracle数据库”,详细介绍备份与恢复Oracle数据库的方法与步骤。 ### 一、Oracle数据库...

    oracle 数据库管理员指南

    Oracle数据库管理员指南是一本深入解析Oracle数据库管理的权威著作,对于从事大型数据库开发与分析的专业人士来说,它无疑是必备的参考资料。Oracle数据库是全球广泛使用的数据库管理系统之一,尤其在企业级应用中...

    Oracle数据库.pdf

    Oracle数据库管理是数据库管理员(DBA)日常工作中不可或缺的一部分,涉及到用户管理、系统参数配置、表空间操作等多个方面。在Oracle环境中,以下是一些关键的知识点: 1. **用户管理**: - `ALTER USER`语句用于...

    oracle数据库日常维护

    Oracle 数据库日常维护 Oracle 数据库日常维护是确保数据库安全、稳定和高效运行的...通过以上检查,可以了解 Oracle 数据库的当前状态,是否存在问题,是否需要进行调整或维护,以确保数据库的安全、稳定和高效运行。

    oracle数据库管理工具

    Oracle数据库是全球广泛使用的大型企业级关系型数据库管理系统,它提供了强大的数据存储、处理和管理功能。对于Oracle数据库的管理,PL/SQL Developer是一款非常重要的工具,尤其在开发和维护PL/SQL代码时,它的作用...

    oracle数据库用户管理

    Oracle数据库用户管理是数据库系统中至关重要的一环,它关乎到数据的安全性和权限控制。Oracle数据库提供了丰富的用户管理和安全策略,确保只有授权的用户才能访问特定的数据资源。 首先,Oracle数据库的安全性可以...

    Oracle数据库认证大师

    在Oracle数据库中,undo指保留了数据变更前的状态,以便于恢复操作和多版本读取一致性。参数undo_management指明了undo管理的方式,AUTO表示数据库自动管理undo表空间。undo_retention参数定义了undo数据保留的时间...

    C#版Oracle数据库通用操作类

    ### C# 版 Oracle 数据库通用操作类解析 在现代软件开发中,数据库操作是必不可少的一部分,而 C# 结合 Oracle 数据库的应用尤为广泛。本文将深入探讨一个用于简化 Oracle 数据库操作的 C# 类——`ConnForOracle`。...

    基于oracle数据库的超市管理系统

    《基于Oracle数据库的超市管理系统详解》 在信息技术日益发达的今天,各类管理系统已经渗透到各行各业,其中超市管理系统作为零售业的重要组成部分,对于提升运营效率、优化管理流程具有至关重要的作用。本文将深入...

    oracle 数据库日常维护手册

    Oracle 数据库是一种关系型数据库管理系统,广泛应用于企业级应用中。为了确保 Oracle 数据库的稳定运行,需要进行日常维护。以下是 Oracle 数据库日常维护手册中的一些重要知识点: 检查数据库基本状况 在日常...

    oracle数据库连接工具

    对于Oracle数据库,Navicat 提供了一个直观且功能丰富的图形用户界面(GUI),使得数据库的管理、查询、数据编辑等工作变得简单易行。Navicat for Oracle是专为Oracle数据库设计的版本,提供以下主要功能: 1. **...

    Oracle数据库试题100题(附答案)

    Oracle数据库是甲骨文公司推出的一个功能强大的关系数据库管理系统,它广泛应用于金融、电信、制造等行业。Oracle数据库试题能够帮助相关岗位的应聘者或者数据库管理人员加深对Oracle数据库的理解。本次提供的100题...

    单位oracle数据库管理员培训资料

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,尤其在企业级应用中占据重要地位。这份“单位oracle数据库管理员培训资料”旨在帮助初学者和在职DBA深入理解Oracle 9i和10G版本的核心概念与操作技巧,以...

Global site tag (gtag.js) - Google Analytics