Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

11

积分

0

好友

0

主题
1#
发表于 2012-8-8 17:31:26 | 查看: 6849| 回复: 2
显然利用DBMS_LOCK.REQUEST过程,指定一个ID,来获取独占锁,其他会话获取同样的锁就会被锁定:
SQL> DECLARE
  2  V_LOCK NUMBER;
  3  BEGIN
  4  V_LOCK := DBMS_LOCK.REQUEST(0, RELEASE_ON_COMMIT => TRUE);
  5  END;
  6  /

PL/SQL过程已成功完成。
会话2获取同样的锁,就会被锁定:
SQL2> DECLARE
  2  V_LOCK NUMBER;
  3  BEGIN
  4  V_LOCK := DBMS_LOCK.REQUEST(0, RELEASE_ON_COMMIT => TRUE);
  5  END;
  6  /

直到会话1提交、回滚或明确的释放锁资源:
SQL> COMMIT;
提交完成。
会话2才解锁:

PL/SQL
过程已成功完成。

SQL2> COMMIT;
提交完成。


我想要的结果是:session1 提交并关闭后,在session3中释放session1中的锁,只有session3中释放了该锁,session2才可获得锁。但是视乎不能实现,session1的锁只能session1主动释放或者session1关闭后,RDMBS自己清理。
2#
发表于 2012-8-9 13:43:16
RELEASE Function

This function explicitly releases a lock previously acquired using the REQUEST function. Locks are automatically released at the end of a session. RELEASE is an overloaded function that accepts either a user-defined lock identifier, or the lock handle returned by the ALLOCATE_UNIQUE procedure.

Syntax

DBMS_LOCK.RELEASE (
   id         IN INTEGER)
  RETURN INTEGER;

DBMS_LOCK.RELEASE (
   lockhandle IN VARCHAR2)
  RETURN INTEGER;

Parameters

Table 53-7 RELEASE Function Parameter
Parameter         Description

id or lockhandle
       

User assigned lock identifier, from 0 to 1073741823, or the lock handle, returned by ALLOCATE_UNIQUE, of the lock mode you want to change.

Return Values

Table 53-8 RELEASE Function Return Values
Return Value         Description

0
       

Success

3
       

Parameter error

4
       

Do not own lock specified by id or lockhandle

5
       

Illegal lock handle


DBMS_LOCK.RELEASE 只对本session 有效, 所以无法实现你说说的 session 3来释放这个锁的需求,只能通过其他session kill session 1这种比较粗暴的方式来实现

回复 只看该作者 道具 举报

3#
发表于 2012-8-9 13:48:27

回复 2# 的帖子

哦,好的,很明确了。谢谢哈。

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-25 14:21 , Processed in 0.054221 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569