在Oracle数据库中如何实现读锁(一)_Oracle数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

在Oracle中如何实现读锁(一)

作者:黑客防线网安Oracle维护基地 来源:黑客防线网安Oracle维护基地 浏览次数:0

黑客防线网安网讯:  虽然不清楚楼主的具体目的是什么,但是楼主提出的问题确实有点意思。因为Oracle中根本没有读锁,楼主的要求和Oracle尽可能提高并发的目的是截然相反的。  写这篇文章的目的并不是说这...

  虽然不清楚楼主的具体目的是什么但是楼主提出的问题确实有点意思因为Oracle中根本没有读锁楼主的要求和Oracle尽可能提高并发的目的是截然相反的

  写这篇文章的目的并不是说这个需求有什么普遍性,而是为了说明在Oracle中其实没有什么是做不到的,即使这个需求和Oracle的设计本意相违背,另外希望这篇文章中的一些思路能起到抛砖引玉的作用。

  楼主提出的问题是“怎么样让一个表,一个时间只能一个人读”,简单概括一下就是建立起读锁的机制。而且这个读锁还不能是共享锁,而必须是有个独占锁。

  考虑到Oracle中根本不存在读锁,那么必须将思路进行转化。

  最先想到的是,将查询转化为DML,这样就可以获取到锁,避免其他用户对改对象同时进行访问。

  最简单的实现方式莫过于建立一个存储过程,在存储过程中首先LOCK TABLE,然后进行查询,将查询的结果返回。

  简单实现如下:

  SQL>CREATETABLET
  2(
  3IDNUMBERPRIMARYKEY,
  4NAMEVARCHAR2(30)
  5);

  表已创建。

  SQL> INSERT INTO T SELECT ROWNUM, TNAME FROM TAB;

  已创建23行。

  SQL> COMMIT;

  提交完成。

  下面构建函数:

  SQL>CREATEORREPLACEFUNCTIONF_QUERY_TRETURNSYS_REFCURSORAS

  2V_CURSORSYS_REFCURSOR;

  3BEGIN

  4LOCKTABLETINEXCLUSIVEMODE;

  5OPENV_CURSORFOR'SELECT*FROMT';

  6RETURNV_CURSOR;

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-12611-1.html
网站维护教程更新时间:2012-03-23 00:43:12  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer