`

oracle for Update 手工加锁了

 
阅读更多

       海无涯,肌无力...

      

       oracel默认的“事务隔离级别”是read commited ,通过事务给数据对象加“锁”来实现!

             在操作delete时,前台没有响应,后台没有报错,断点走到ps.executeUpdate()便消失没有继续下移,一个简单的delete语句,没有想放到pl/sql上检查,一直在找代码中的问题,反复编译,替换jar包,重启进程再尝试,依然无法定位到问题所在 , 然后尝试了下在pl/sql上执行,没有报错,只是显示"正在执行...",然后一直显示“正在执行。。。”,然后浮现了点“表被锁了的概念”,然后找到了些sql如何kill 掉 session

 

       (1)造成表被锁的原因,也要注意下,因为做的是删除操作,为了方便添加操作,就在select table的时候用了 for update ,但是没有手动commit , 那么这表就是加上的锁没有释放

          (2)有时是代码中的事务没有commit, 当前事务A1没有执行完,加在表B上的锁便没有释放,再次操作这个逻辑,事务A2便无法操作表B(当然如果数据库断开了连接,自动关闭,表B上的锁会不会被释放,那么事务A1执行的操作会被commit吗)

 

  //查看被锁住的表
SELECT b.owner,b.object_name,a.session_id,a.locked_mode 
    FROM v$locked_object a ,dba_objects b 
    WHERE b.object_id = a.object_id;

 

select /*+ rule */ s.username,
      decode(l.type,'TM','TABLE LOCK','TX','ROW LOCK',null) lock_level,
      o.owner,
      o.object_name,
      o.object_type,
      s.sid,s.serial#,
      s.terminal,
      s.machine,
      s.program,
      s.osuser
from v$session s,v$lock l,dba_objects o
where l.sid = s.sid
and l.id1 = o.object_id(+)
and s.username is not null


   
//查看被锁住的会话
SELECT b.username,b.sid,b.serial#,logon_time 
    FROM v$locked_object a,v$session b 
    WHERE a.session_id = b.sid order by b.logon_time;

 

select /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username user_name,
       o.owner,
       o.object_name,
       o.object_type,
       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
order by o.object_id,xidusn desc


 
//kill session  
    Alter system kill session 'sid,serial#'

 

分享到:
评论

相关推荐

    数据库oracle for update of和for update的区别

    ### 数据库Oracle锁:FOR UPDATE OF与FOR UPDATE的区别 在Oracle数据库中,为了确保数据的一致性和准确性,尤其是在多用户环境中进行并发操作时,锁机制是必不可少的一部分。本文将详细介绍`FOR UPDATE`与`FOR ...

    oracle执行update语句时卡住问题分析及解决办法

    这种只有update无法执行其他语句可以执行的其实是因为记录锁导致的,在oracle中,执行了update或者insert语句后,都会要求commit,如果不commit却强制关闭连接,oracle就会将这条提交的记录锁住。由于我的java程序...

    oracle的update的五种方式

    标准 Update 语句是 Oracle 中最基本的更新语句,语法为:`UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值`。例如:`UPDATE t_join_situation SET join_state='1' WHERE year='2011'`。这种方式适用于更新...

    Oracle for linux 手工安装指南

    Oracle for Linux 手工安装是一项复杂且精细的工作,涉及到多个步骤和注意事项。以下是一份详细的安装指南,旨在帮助你成功地在Linux系统上部署Oracle数据库。 1. **系统准备** - **硬件需求**:Oracle数据库对...

    for_update_和_for_update_nowait_的区别

    标题和描述均聚焦于Oracle数据库中`FOR UPDATE`与`FOR UPDATE NOWAIT`两种锁定机制的区别,这在并发控制和事务处理中具有重要的意义。在深入解析这两种指令之前,我们先来简要回顾一下锁定机制的基本概念。 在...

    update语句的优化-oracle .pdf

    在本篇文档中,作者详细总结了在实际项目中针对Oracle数据库的update语句优化的四种方案。以下是对这四种方案的知识点进行详细的阐述: 1. 标准update语法优化: 当面对单表更新或较简单的SQL语句时,可以直接使用...

    解析oracle对select加锁的方法以及锁的查询

    解析oracle对select加锁的方法以及锁的查询一、oracle对select加锁方法 代码如下:create table test(a number,b number);insert into test values(1,2);insert into test values(3,4);insert into test values(8,9);...

    ORACLE_UPDATE_语句语法与性能分析

    在Oracle数据库中,UPDATE语句是用于修改已存在数据的基本操作之一。在上述示例中,我们看到三种不同的UPDATE语句形式,它们各自处理特定的情况并具有不同的性能特点。 1) **最简单的形式**: 这种情况下,我们更新...

    ORACLE多表关联的update语句

    在Oracle数据库中,多表关联的UPDATE语句用于更新一个表中的数据,这些数据依赖于另一个或多个表的记录。这种操作在数据整合、错误修正或者数据同步时非常常见。以下我们将详细探讨如何使用不同方式执行多表关联的...

    ORACLE_多表关联_UPDATE_语句

    Oracle数据库中的多表关联UPDATE语句是用于在一个表中更新数据时,依据另一个表的条件进行操作的关键技术。这在处理复杂的数据同步或修正场景时非常有用。在本例中,我们将探讨如何利用多表关联来更新数据,并通过...

    Oracle Data Provider for .NET (ODP.NET)

    Oracle 10g 第 2 版 ODAC 和 Oracle Developer Tools for Visual Studio .NET 下载文件 ODTwithODAC1020221.exe 235 MB(247,296,458 字节) ODAC 安装说明 Oracle Developer Tools For Visual ...

    DataX-Oracle新增writeMode支持update

    DataX-Oracle新增writeMode支持update的两个jar包已经修改好,使用方法可以看https://blog.csdn.net/qq_36802726/article/details/137118015

    SQL SERVER 安装ORACLE provider for OLE DB 的连接服务驱动

    本文将详细介绍如何在SQL Server上安装Oracle Provider for OLE DB驱动,以便创建与Oracle数据库的连接服务器。 首先,Oracle Provider for OLE DB是一种数据提供程序,它允许SQL Server或其他支持OLE DB的应用程序...

    Oracle爆错手工注入.doc

    手工注入方式,利用报错注入 Oracle。

    ORACLE数据库系统加锁问题的研究 (1).pdf

    Oracle数据库系统是关系型数据库的一种,它在处理并发事务时采用了加锁机制来确保数据的一致性和完整性。本文主要探讨了Oracle数据库中的加锁问题,包括为何启用锁、Oracle数据库中的各类锁以及锁的工作原理。 ...

    Oracle Server JRE 7 Update 55

    Oracle Server JRE 7 Update 55 是Oracle公司发布的一款针对Java运行环境(Java Runtime Environment)的更新版本,主要用于在Windows x64平台上支持Oracle服务器的运行。JRE是Java应用程序能够在任何兼容的计算机上...

    ORACLE数据库系统加锁问题的研究.pdf

    Oracle数据库系统在处理数据时,为了确保数据的完整性和一致性,采用了加锁机制。加锁主要是为了解决在网络环境下的多事务并发访问同一数据时可能出现的问题,防止数据的不一致性和“脏读”。脏读是指一个事务读取到...

    oracle中UPDATE nowait 的使用方法介绍

    在Oracle数据库中,`UPDATE NOWAIT` 是一个用于事务处理的关键字,它允许你更新一行数据,但在数据被其他事务锁定时,它不会等待而是立即返回一个错误信息。这个特性对于处理多线程并发和确保数据一致性至关重要。...

    Oracle Provider for OLE DB Developer’s Guide 11g (11.2)

    《Oracle Provider for OLE DB Developer’s Guide 11g Release 2 (11.2) for Microsoft Windows》是Oracle公司为开发人员提供的一份详细指南,用于在Windows 64位环境中利用Oracle Provider for OLE DB接口进行...

    toad for oracle 11.6 64bit 注册码 for oracle license key

    在探讨Toad for Oracle 11.6 64位版本及其注册码的相关知识点时,首先需要明确几个关键概念:Toad for Oracle是一款由Quest Software开发的数据库管理工具,广泛应用于Oracle数据库的开发、管理和维护工作中。...

Global site tag (gtag.js) - Google Analytics