美文网首页Java
Oracle 解锁

Oracle 解锁

作者: f6f54c35b57a | 来源:发表于2016-05-04 22:46 被阅读54次

如果你发现一条很简单的语句长时间不能执行完成,那么很有可能你的数据库表被锁了

查出锁

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
```   

**kill session语句**   

```
ALTER SYSTEM KILL SESSION'50,492';
```   

**以下几个为相关表**   

```   
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#,
         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
```
  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
```

相关文章

  • Oracle 解锁

    如果你发现一条很简单的语句长时间不能执行完成,那么很有可能你的数据库表被锁了 查出锁

  • oracle解锁

    连接数据库: [xnie@szora1 ~]$ sudo su - oracle[oracle@szora1 ~]...

  • Oracle锁表查询及解锁

    Oracle锁表查询及解锁kill进程简介

  • oracle用户解锁

    今天在导入数据到oracle数据库时,当执行导入的命令时:imp dap/password file=/home/...

  • Oracle解锁hr账户

    Oracle解锁hr账户的前提是:必须存在hr账户,对于大多数刚安装的Oracle来说,都是存在的。废话不多说直接...

  • oracle 查询 解锁表

    --command 窗口

  • oracle新建表空间

    解锁用户(scott) 如何将dmp文件导入到自己的oracle数据库中

  • oracle表解锁2019-03-25

    oracle表解锁 第一步 查询被锁表(object_name),锁表对象(session_id) select ...

  • ORACLE ORA 28000用户解锁

    通过system用户,密码也是system登录后,执行如下语录,username指的是被锁用户 ALTER USE...

  • Oracle预备之scott解锁

    当创建好Oracle用户之后,一般做实验会使用scott用户来进行操作。但在使用scott用户进行练习时会发现个别...

网友评论

    本文标题:Oracle 解锁

    本文链接:https://www.haomeiwen.com/subject/xhfdrttx.html