我在plsql中使用dblink访问远程数据库上的表,执行select后为什么plsql...
发布网友
发布时间:2022-04-23 01:08
我来回答
共3个回答
热心网友
时间:2022-04-09 05:44
你应该是查询结果没展示完全,点击下面的绿色向下箭头获取全部的查询结果就不会提示要你提交或者回滚了。
热心网友
时间:2022-04-09 07:02
这个问题背后还有很多故事,我就献丑长话短说,提供我的理解,希望对你有所帮助:
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开发方面不做控制的话,可想而知,可能会导致远端数据库的不定时的报出回滚段相关的错误(比如回滚段用光,就报错了)
热心网友
时间:2022-04-09 08:37
不知道在不在,这个要回滚还是提交