oracle锁表和函数过程的处理方式
1、首先来澄清一下数据库的基本视图表,以及表之间的联系,v$session视图:在某一个oracle实例中,这个视图存放了用户的各个会话,每次建立新的会话窗口,并执行某个sql都会在视图中有这个新的会话记录(在上篇文章已经模拟)。下面执行视图的查询,在这里我只列出v$session视图中常用的字段--查看当前会话selectvs.SADDR,vs.SID,vs.SERIAL#,vs.PADDR,vs.USERNAME,vs.LOCKWAIT,vs.OSUSER,vs.PROCESS,vs.MACHINE,vs.STATUS,vs.SQL_ADDRESS,vs.SQL_HASH_VALUE fromv$session vs下图列出了重要字段的定义和解释

2、其次,还要明白数据库对象表all_objects或者 dba_objects这个表存放数据库所有类型的对象数据,包括存储过程、函数、表等。在这里我只列出重要的字段select* fromall_objects a wherea.OWNER='GAYX'ANDA.OBJECT_TYPE IN('TABLE','PROCEDURE')这个查询是查询用户名为‘GAYX’的数据对象为表和过程的所有对象。

3、再次我们查询锁数据库库对象后,数据对象所存放的表,在oracle中主要使用两个视图,一个是v$locked_object,一个是v$lock


4、下面给大家描述一下,这两者的区别,v$locked_object对象是表级锁, v$lock是所有锁包含表、行、系统等锁,也就是说,前者解锁后不起作用的情况下,可以使用后者进行解锁。还有一个视图就是 v$sql 或v$sqlarea 这两个视图存放会话中执行的sql语句,一般在恢复数据时可以使用,一般和v$session视图关联使用。

5、好了 到目前为止,大家应该了解这几个表的作用与联系了,那么当数据库表或存储过程发生死锁后,我们该如何利用这些表进行解锁呢?首先查询v$lock_object 对象表

6、如果上述解锁不能生效,则查询如下锁:

7、过程锁了:

8、一般来说,如果存在锁表的情况,上述两种就可以解锁了,但是有些时候,解锁之后,不释放资源,我们需要在服务器端将操作系统级别的进程杀死如下:
