安全研究 >> 安全研究详情

运维日记|oracle goldengate之dblink小贴士

作者: 美创运维中心数据库服务团队发布日期: 12月31日

前言

         对于dblink,相信大家都不陌生。当用户需要跨本地数据库访问另外一个数据库的数据时,可以在本地数据库中创建远程数据库的dblink,通过dblink可以像访问本地数据库一样访问远程数据库中的数据。


        dblink为跨数据库的访问带来了很多便利,但是也存在部分缺陷。比如大量使用dblink查询,造成web项目的连接数不够,导致系统无法正常运行;比如今年6月份scn兼容性级别变化造成的大量dblink业务不可用等。


今天小编就要和大家聊一聊dblink在ogg中的表现。


OGG中的dblink并不能被自动同步,目标端若要使用dblink,需要手工添加。


对于Public dblink,只要在目标库上建好,则不影响ogg的同步。但是,对于Private dblink,即使在目标库上创建了,还是会出现如下类似报错:


报错提示ogg在执行以下的语句时,SQL<create table zmy."TEST20191108" as select * from zmy.CLASSINFO@test_pri>


报错<ORA-02019: connection description for remote database not found>


小编在目标数据库上检查dblink test_pri,确认该dblink信息和源库一致,且通过该dblink可以正常查询源库数据库的数据。


既然手工测试dblink是没有问题的,那为什么ogg不能执行该语句呢?


根据上面的信息,我们发现dblink TEST_PRI的所属用户是zmy,这是一个Private dblink


小知识●dblink


了解了私有dblink后,我们就不难发现为什么会报这个错了。OGG在同步的时候是通过管理用户来执行这些语句的,而对于私有dblink,其他用户没有权限使用,从而出现了这个报错。


那就跟着小编来进一步验证吧。


我们在目标数据库上创建一个同名public dblink TEST_PRI

确认dblink已经创建后,再次启动复制进程,问题解决,可以正常同步。


限于篇幅,我们不再对dblink详细展开,最后小结一下:


小结

1、OGG中的dblink并不能被自动同步,目标端同步用户所私有的dblink并不能够被管理用户所管理,必须将私有的dblink改为公有的OGG才能正常运行。

2、每次使用 dblink查询的时候,均会与远程数据库创建一个连接,dblink不会自动释放这个连接,如果是大量使用dblink查询,会造成连接数不够,导致系统无法正常运行。使用dnlink时要注意关闭连接。



参考文献

Oracle® Database Administrator's Guide 11g Release 2 (11.2)

How to Close a Database Link (DBLINK) Connection (文档 ID 473635.1)



服务热线:400-711-8011
Copyright ©2005-2020 杭州美创科技有限公司. All Rights Reserved. 浙ICP备12021012号-1