我在plsql中使用dblink访问远程数据库上的表,执行select后为什么plsql提示有数据需要提交或回滚?
3个回答
展开全部
这个问题背后还有很多故事,我就献丑长话短说,提供我的理解,希望对你有所帮助:
1、Oracle有一个分布式数据库和分布式事务的概念,具体情况可以参阅Oracle官方文档:
http://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_txnman.htm#i1207516
2、在通过DBLINK执行DML(含SELECT)和DDL访问远程数据的对象(表、视图、存储过程等)时,会自动开启连接和会话到远程数据库。
3、由于远端数据库和本地数据都有各自的SCN,而SCN是Oracle保证读一致性非常霸气的东西,必须做两个数据库的SCN同步(Oracle目前还没有能够实现实时同步SCN)Oracle就自动开启分布式事务,在分布式事务的开始和结束时同步SCN(在每个SQL执行完也会同步SCN)。
详细情况参阅Oracle官方文档:
http://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_txnman010.htm#ADMIN12288
4、在Commit或Rollback后,会结束事务。
简单一句话,就是为了保证读一致性。
1、Oracle有一个分布式数据库和分布式事务的概念,具体情况可以参阅Oracle官方文档:
http://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_txnman.htm#i1207516
2、在通过DBLINK执行DML(含SELECT)和DDL访问远程数据的对象(表、视图、存储过程等)时,会自动开启连接和会话到远程数据库。
3、由于远端数据库和本地数据都有各自的SCN,而SCN是Oracle保证读一致性非常霸气的东西,必须做两个数据库的SCN同步(Oracle目前还没有能够实现实时同步SCN)Oracle就自动开启分布式事务,在分布式事务的开始和结束时同步SCN(在每个SQL执行完也会同步SCN)。
详细情况参阅Oracle官方文档:
http://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_txnman010.htm#ADMIN12288
4、在Commit或Rollback后,会结束事务。
简单一句话,就是为了保证读一致性。
追问
恩,有所理解了。 那我要是一直不点提交呢,会有什么问题吗 ? 就当平时一样的查询
追答
一直不提交事务,就会一直占用远端数据库中的回滚段,导致被占用的回滚段无法回收,如果在PLSQL开发方面不做控制的话,可想而知,可能会导致远端数据库的不定时的报出回滚段相关的错误(比如回滚段用光,就报错了)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道在不在,这个要回滚还是提交
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询