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 as sid,s.serial# as 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 --kill session语句alter system kill session'sid,serial#' immediate; alter system kill session'10,46004' immediate; --以下几个为相关表 SELECT * FROM v$lock; SELECT * FROM v$sqlarea; SELECT * FROM v$session; SELECT * FROM v$process ; SELECT * FROM v$locked_object; SELECT * FROM all_objects; SELECT * FROM v$session_wait; --1.查出锁定object的session的信息以及被锁定的object名 SELECT l.session_id sid, s.serial# as serial#, l.locked_mode,l.oracle_username, l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time FROM v$locked_object l, all_objects o, v$session s WHERE l.object_id = o.object_id AND l.session_id = s.sid ORDER BY sid, s.serial# ; --2.查出锁定表的session的sid, serial#,os_user_name, machine name, terminal和执行的语句 --比上面那段多出sql_text和action SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#, l.os_user_name,s.machine, s.terminal,a.sql_text, a.action FROM v$sqlarea a,v$session s, v$locked_object l WHERE l.session_id = s.sid AND s.prev_sql_addr = a.address ORDER BY sid, s.serial#; --3.查出锁定表的sid, serial#,os_user_name, machine_name, terminal,锁的type,mode SELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine, s.terminal, s.logon_time, l.type FROM v$session s, v$lock l WHERE s.sid = l.sid AND s.username IS NOT NULL ORDER BY sid; --这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现, --任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。 --杀锁命令 alter system kill session 'sid,serial#' 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 --以上查询结果是一个树状结构,如果有子节点,则表示有等待发生。 --如果想知道锁用了哪个回滚段,还可以关联到V$rollname,其中xidusn就是回滚段的USN col user_name format a10 col owner format a10 col object_name format a10 col object_type format a10 --如果发生了锁等待,我们可能更想知道是谁锁了表而引起谁的等待 --以下的语句可以查询到谁锁了表,而谁在等待。 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
===================================
SYS >select sid,serial#,status,server,inst_id from gv$session where username='APP';
SID SERIAL# STATUS SERVER INST_ID
---------- ---------- -------- --------- ----------
20 1925 INACTIVE DEDICATED 1
不加immedate,kill session后查询gv$session,该会话记录STATUS是KILLED。
SYS >alter system kill session '20,1925,@1';
SYS >select sid,serial#,status,server,inst_id from gv$session where username='APP';
SID SERIAL# STATUS SERVER INST_ID
---------- ---------- -------- --------- ----------
20 1925 KILLED PSEUDO 1
在用户app的会话中操作,提示如下:
APP >select * from tab;
select * from tab
*
ERROR at line 1:
ORA-00028: your session has been killed
再查询gv$session,该会话记录已经没有了。
SYS >select sid,serial#,status,server,inst_id from gv$session where username='APP';
no rows selected
用app用户重新登录,再加上immediate子句操作:
SYS >select sid,serial#,status,server,inst_id from gv$session where username='APP';
SID SERIAL# STATUS SERVER INST_ID
---------- ---------- -------- --------- ----------
243 15622 INACTIVE DEDICATED 1
SYS >alter system kill session '243,15622,@1' immediate;
再查询gv$session
SYS >select sid,serial#,status,server,inst_id from gv$session where username='APP';
no rows selected
这是可以看到gv$session已经没有记录了。
而app用户查询,直接提示连接断开了。
APP >select * from tab;
select * from tab
*
ERROR at line 1:
ORA-03135: connection lost contact
Process ID: 10189
Session ID: 243 Serial number: 15622
Whether or not the session has an ongoing transaction, Oracle Database does not
recover the entire session state until the session user issues a request to the session and
receives a message that the session has been terminated.
IMMEDIATE Specify IMMEDIATE to instruct Oracle Database to roll back ongoing
transactions, release all session locks, recover the entire session state, and return
control to you immediately.
根据oracle的文档,在没有immediate字句情况下,oracle终结会话后,直到会话用户发起请求并提示会话终结后,才会恢复该会话状态。而immediate子句的作用是终结会话后,马上恢复该会话状态,所以前面例子操作后查询gv$session,已经没有该会话状态。
相关推荐
锁可以分为行级锁(Row Level Lock)和表级锁(Table Level Lock),以及更细粒度的锁类型。本文将深入探讨Oracle中的锁机制,特别是如何锁表与解锁,以及相关的SQL查询语句,帮助数据库管理员和开发人员更好地理解...
oracle锁表和解锁语句示例。
### Oracle锁表与解锁详解 在Oracle数据库管理中,锁是一种关键机制,用于控制多个用户对数据资源的并发访问,防止数据冲突和不一致。本文将深入探讨Oracle中检查锁表的方法以及如何对表进行解锁。 #### Oracle锁...
oracle查询锁表和解锁。oracle在操作的过程中经常会遇到锁表的情况,一般能够用kill命令消除。
### 描述:“如果存储过程被锁住,可以使用这个存储过程解锁方法” #### 解析: 当遇到存储过程被锁定的情况时,通常可以通过查询`dba_ddl_locks`视图来查找锁定的详细信息。例如,要检查名为`prc_exec_day`的存储...
oracle 解锁表,可以用此字句,对表进行解锁,但是要有相应的权限
Oracle锁表后如何解锁 Oracle锁表是指在Oracle数据库中某个表被锁定,无法进行操作的情况。这种情况经常发生在多用户同时访问同一个表时,某个用户锁定了该表,导致其他用户无法访问该表。那么,在不知道谁锁的情况...
在深入讨论Oracle解锁和死锁之前,我们首先需要了解Oracle数据库中的锁机制。 1. **共享锁(S)**:允许多个用户读取行,但不允许修改。 2. **排他锁(X)**:允许单个用户修改行,其他用户只能等待。 3. **共享更新锁...
Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作,那么这些操作是怎么实现的呢?
oracle解锁语句,常用解锁语句,经过测试实用;oracle解锁语句,常用解锁语句,经过测试实用。
B.SESSION_ID 锁表SESSION_ID, B.ORACLE_USERNAME 锁表用户名, decode(D.type, 'XR', 'NULL', 'RS', 'SS(Row-S)', 'CF', 'SS(Row-S)', 'TM', 'TABLE LOCK', 'PW', 'TABLE LOCK', 'TO', 'TABLE LOCK',...
针对oracle数据库 解锁方法 ,个人使用 希望大家能够有所帮助
ORACLE 查看锁和解锁 在Oracle数据库中,锁是指对某个资源的排他性访问,以避免多个用户同时访问同一个资源导致的数据不一致问题。锁可以分为两种:共享锁和排他锁。共享锁允许多个用户同时访问同一个资源,而排他...
Oracle数据库在运行过程中,可能会遇到一种情况,那就是“表死锁”,这会...通过理解Oracle表死锁的原理、使用上述检测和解决方法,以及遵循最佳实践,可以有效地管理和防止数据库死锁,保证系统的稳定性和高效运行。
总的来说,Oracle数据库解锁工具是开发环境中解决特定问题的实用工具,它简化了解锁账户的过程,使得管理员和开发者能够更加高效地管理Oracle数据库的用户权限。通过PowerBuilder的集成开发环境,用户可以方便地配置...
### Oracle锁表解决 在Oracle数据库管理中,锁表是一个常见的问题,特别是在高并发的应用场景下。当一个表被锁定时,其他用户或进程可能无法访问该表,从而导致应用程序出现延迟或者错误。因此,了解如何有效地解锁...
数据库死锁的概念, 所谓死锁,是指两个会话,每个会话都持有另外一个会话想要的资源,因争夺资源而造成...对于锁死的会话,我们可以直接删掉该会话,等事物回滚完成,也可以找出锁死进程的spid,从服务器中删掉该进程。
### ORACLE 如何查询被锁定表及如何解锁释放session 在Oracle数据库管理中,了解如何查询被锁定的表以及如何解锁这些锁定对于确保数据库高效运行至关重要。本文将详细介绍如何使用Oracle SQL查询锁定的表,并提供一...
oracle 查看锁表sql 及如何解锁,多给点分,为了下载别的资料。大家相互学习相互进步
#### 一、Oracle锁机制简介 在Oracle数据库中,锁是用来控制多个用户对同一数据资源访问的一种机制,目的是为了防止并发操作导致的数据不一致问题。锁分为多种类型,包括行级锁、表级锁等,每种锁都有其特定的应用...