oralce中db_link的问题
来源:互联网 发布:健身数据软件 编辑:程序博客网 时间:2024/05/18 08:10
一次在Oracle 10g中建立了一个dblink用于访问其它数据库,对要访问的数据表在本地数据库创建了一个同义词(Synonyms),然后开始使用select语句测试该同义词是否能正常使用。测试结果显示,select语句成功查询到数据,但无意中发现本地数据中出现了一个Exclusive锁,使用commit语句提交后,该锁就消失了。后来进一步发现,在要访问的数据库中,也会出现一个Exclusive锁,该锁同样在提交后消失。
由于数据库系统刚安装完成,本地数据库也是刚建立的,还没有用户或应用程序使用该数据库,除了刚才的查询操作外,也没有进行其它更新等操作。怀疑是刚才select查询造成的,于是反复进行了几次验证,确认是select查询造成的。
从网上查询后得知,这是Oracle的分布式事务特性引发的。Oracle在执行分布式SQL语句时,无论是查询语句还是DML语句,都被认为是一项事务,为了支持两段式(two-phase)提交处理而使用了回滚段空间。因此,在事务上加了分布式事务锁(DX),只有提交或回滚本次事务后才能解除此锁。如果不提交或回滚本次事务,该事务占用的回滚段空间就不会释放,这样可能造成回滚段空间的不断扩容,从而达到最大限制,甚至耗尽回滚段表空间内的所有可用空间。
切记,在使用分布式SQL语句时,一定要及时提交,查询操作也不例外。即使具有AUM(automatic undo management,自动撤销管理)功能,也不能忽略提交。
下面是查询回滚段住处的SQL:
SELECT s.username,
s.sid,
pr.PID,
s.OSUSER,
s.MACHINE,
s.PROGRAM,
rs.segment_id,
r.usn,
rs.segment_name,
r.rssize/1024/1024,
sq.sql_text
FROM v$transaction t, v$session s, v$rollstat r, dba_rollback_segs rs ,v$sqltext sq,v$process pr
WHERE s.saddr = t.ses_addr
AND t.xidusn = r.usn
AND rs.segment_id = t.xidusn
AND s.sql_address=sq.address
AND s.sql_hash_value = sq.hash_value
AND s.PADDR=pr.ADDR
ORDER BY t.used_ublk DESC ,sq.PIECE;
- oralce中db_link的问题
- 在Oracle10g中如何建立没有域名的DB_LINK
- 利用DB_LINK在不同平台的数据库中复制数据。
- 在Oracle 10g中建立没有域名的DB_LINK
- 在Oracle 10g中建立没有域名的DB_LINK:
- 在Oracle10g中如何建立没有域名的DB_LINK
- 在Oracle 10g中建立没有域名的DB_LINK
- db_link的使用
- DB_LINK的个人理解
- oracle db_link的使用说明
- DB_LINK
- DB_link
- db_link
- Oralce 中汉字排序问题
- Oralce 中汉字长度问题
- Oralce PLSQL中“&”的处理。
- Oralce PLSQL中“&”的处理
- 存储过程建db_link权限问题
- 负载均衡环境中和如何设置Expires和Etag
- Overload和Override的区别
- 设计模式 - 在软件开发中的应用
- 工作集的问题
- Apache HTTP Server Version 2.2 文档中文版
- oralce中db_link的问题
- 复制一个库中的表数据到另一个库表中
- SQL生成不重复的随机数
- linq to xml/动态类型 从树型表构建树(linq to entity处理数据库)
- Debian下安装Subversion版本管理工具
- 浅析Android 蜂巢中左下角三个导航键的实现源码
- 自旋锁
- C++ 学习笔记1
- “线程间操作无效: 从不是创建控件的线程访问它”