Oracle中使用dblink查询时的Exclusive锁

来源:互联网 发布:数控循环程序怎么编程 编辑:程序博客网 时间:2024/06/07 13:06

一次在Oracle 10g中建立了一个dblink用于访问其它数据库,对要访问的数据表在本地数据库创建了一个同义词(Synonyms),然后开始使用select语句测试该同义词是否能正常使用。测试结果显示,select语句成功查询到数据,但无意中发现本地数据中出现了一个Exclusive锁,使用commit语句提交后,该锁就消失了。后来进一步发现,在要访问的数据库中,也会出现一个Exclusive锁,该锁同样在提交后消失。

由于数据库系统刚安装完成,本地数据库也是刚建立的,还没有用户或应用程序使用该数据库,除了刚才的查询操作外,也没有进行其它更新等操作。怀疑是刚才select查询造成的,于是反复进行了几次验证,确认是select查询造成的。

从网上查询后得知,这是Oracle的分布式事务特性引发的。Oracle在执行分布式SQL语句时,无论是查询语句还是DML语句,都被认为是一项事务,为了支持两段式(two-phase)提交处理而使用了回滚段空间。因此,在事务上加了分布式事务锁(DX),只有提交或回滚本次事务后才能解除此锁。如果不提交或回滚本次事务,该事务占用的回滚段空间就不会释放,这样可能造成回滚段空间的不断扩容,从而达到最大限制,甚至耗尽回滚段表空间内的所有可用空间。

切记,在使用分布式SQL语句时,一定要及时提交,查询操作也不例外。即使具有AUMautomatic undo management,自动撤销管理)功能,也不能忽略提交。

 

参考文章:http://www.jlcomp.demon.co.uk/faq/dblink_commit.html

 

         欢迎访问数据库吧http://www.database8.com/?fromuid=13875

原创粉丝点击