首先要提到就是数据库链,在只读数据库中,通过数据库链进行查询,必须提交或回滚才能通过另外的数据库链访问其他数据库的对象,有点绕嘴,看例子吧:
SQL> select name, open_mode from v$database; NAME OPEN_MODE ——— ———- TEST READ ONLY SQL> select db_link from user_db_links; DB_LINK ———————————————————————- CLIENT.NETDB RAC11G_S.US.ORACLE.COM TEST.NETDB TEST113.NETDB TEST11G TEST61 已选择6行。 SQL> select * from global_name@client.netdb; GLOBAL_NAME ——————————————————————— CLIENT.US.ORACLE.COM SQL> commit; 提交完成。 SQL> select * from global_name@test11g; GLOBAL_NAME —————————————————————– TEST11G.NETDB SQL> commit; 提交完成。 |
数据库链TEST11G和CLIENT都是可以访问的,不过不能在一个事务中同时访问两个数据库链:
SQL> select * from global_name@client.netdb; GLOBAL_NAME ——————————————— CLIENT.US.ORACLE.COM SQL> select * from global_name@client.netdb; GLOBAL_NAME ——————————————— CLIENT.US.ORACLE.COM SQL> select * from global_name@test11g; select * from global_name@test11g *第 1 行出现错误: ORA-16000: 打开数据库以进行只读访问 结束当前的事务,就可以访问数据库链了: SQL> rollback; 回退已完成。 SQL> select * from global_name@test11g; GLOBAL_NAME ——————————————— TEST11G.NETDB |
当前数据库是只读的,并不意味着不能执行DML操作,通过数据库链对远端数据库执行DML是没有问题的:
SQL> insert into t@test11g values (1); 已创建 1 行。 SQL> commit; 提交完成。 SQL> select * from t@test11g; ID ———- 1 |
显然通过只读数据库的数据库链对其他数据库进行DML操作是没有问题的,而试图通过数据库链对只读数据库进行DML显然是不允许的。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
Collaborate 18大会:了解甲骨文云数据库和应用的进展
在Collaborate 18大会即将举行时,我们会发现,甲骨文用户社区的技术变化会略高于平常水平。 由独立甲 […]
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。