度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1932|回复: 5
打印 上一主题 下一主题

[分享] oracle database link

[复制链接]

235

主题

2547

帖子

5834

积分

论坛元老

Rank: 8Rank: 8

积分
5834
跳转到指定楼层
楼主
发表于 2020-6-4 17:54:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[size=13.3333px]database link ,我们习惯称为db link。
作用:用于从a数据库到b数据库之间访问的一种手段。类似于 ogg 中的表同步(用户同步)。如上所述,db link 的主要作用是跨库查询。有很多业务都需要进行跨库查询。在我们公司有时就不得不去去创建一些db link。
优点:创建方式简单、易懂、可以拥有创建用户的所有权限。
缺点:自然,方便的手段就会有更多的不利。
1 大量消耗数据库资源;本地系统每通过DBLINK链接远端系统一次,都会生成一个本地session,如本地session不退出或者手动释放,只有通过session超时才能自动释放,会浪费大量的系统资源
2 容易出现数据库BUG:大量使用DBLINK,本地系统极易出现ORA-02068、ORA-03113、ORA-02080、ORA-02054、ORA-02050等Oracle错误,这种错误大部分会影响当前session正在处理的业务
3 性能较差:由于使用DBLINK,本地系统在获取数据时,每次链接都会对远端数据库进行一次全表扫描,且所有数据都会传输回本地数据库内,导致性能降低并且严重浪费当前系统资源。尤其出现一条sql语句从两个DBLINK中取数,更被称之为“性能杀手”,尤其是OLTP型数据库
4 数据传输不稳定,占用带宽严重,容易产生丢包风险:DBLINK本身没有数据存储、监控等功能,是通过网络中的数据库进行传输时,如果在传输过程中出现数据丢包现象,DBLINK本身不会发现,只用当业务进行完毕才能发现丢包现象,这样会影响当前正在处理的业务;另外,通过DBLINK查询的数据会像数据全部传至本地数据库进行操作,数据传输量很大,占用带宽严重,可能会导致网络堵塞
5 Oracle数据功能受限:DBLINK本身不支持对oracle LOB大对象的操作,在使用PROCDURE时,使用COMMIT等操作时可能会出现错误
6 可扩展性较差:如果多系统之间 使用DBLINK进行传输,每增加一个系统,都会增加一个或多个DBLINK链接或者修改对应的接口程序,如果修改其中一个接口,需要修改所有关联系统内的接口程序
7 维护性差、安全性较低:通过DBLINK进行链接需要将远端数据库用户名、密码、IP地址存在本地数据库,如远端进行密码修改、IP地址变更,本地数据库也需要修改,如果系统较多,每个系统都需要同时修改。切本地数据库管理员能够看到远端数据的密码、IP地址,对系统安全产生影响
可是,即使是在缺点这么这么多的情况下,还是会有人用,归根到底,个人感觉还是oracle对两个库之间的交互做的并不是特别好,ogg 好用是好用,但是在表多的情况下,我们可是深受其害。
[size=13.3333px]用法:创建dblink的先决条件便是两个库要能交互(local database to remote database)网络要能连接正常,其次。要在源端数据库tnsname 文件中配置上访问目标的参数。并且能 tnsping 通。
database link 分为两种:一种为 public(公有) 一种为 private(个人)。顾名思义,公有dblink即源库所有的用户都可以使用,个人dblink则只有创建者用户可以使用。
创建dblink是要有相应的权限的。
select * from user_sys_privs where privilege like upper('%LINK%');
USERNAME PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
SYS CREATE DATABASE LINK NO
SYS DROP PUBLIC DATABASE LINK NO
SYS CREATE PUBLIC DATABASE LINK NO
CREATE DATABASE LINK 为创建个人dblink权限。
CREATE PUBLIC DATABASE LINK 为创建公有dblink 权限。
[size=13.3333px]创建dblink
当tnsnames中有了参数。且有了相应的权限之后,就可以创建dblink。创建方式有以下几种。
[size=13.3333px]创建个人dblink语句为 CREATE database link 开头:
使用当前用户的用户名和密码去连接远程数据库。如果密码不对会报错
create database link test1 using 'test';
[size=13.3333px]创建公有dblink语句CREATE PUBLIC database link
使用指定的用户和密码创建公有 dblink
create public database link test3 connect to scott identified by tiger using 'test';
[size=13.3333px]建一个shared 的数据库连接
create shared public database link test4 connect to scott identified by "tiger" authenticated by username identified by "passwd" using 'test';
使用shared方式的 database link是数据库会限制到远程数据库的连接的数量,这样以避免过多的连接对远程数据库造成太大的压力。
[size=13.3333px]还有一种创建方式是不使用tnsname的情况
CREATE database link link_name
CONNECT TO user IDENTIFIED BY screct
USING '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ip)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = sales)
)
)';
[size=13.3333px]删除dblink
首先需要查询出来有哪些dblink
select owner,object_name from dba_objects where object_type='DATABASE LINK';
然后如果为pubilc 则删除方式为 drop public database link
如果为个人则删除方式为:drop database link
[size=13.3333px]其实本质上来说,dblink 并不是一个很复杂的东西。但是鉴于对数据库的影响。本着能少用就少用的原则。如果能用一些导入导出去替换dblink(我们也正在这么做)。是最好的。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

235

主题

2547

帖子

5834

积分

论坛元老

Rank: 8Rank: 8

积分
5834
沙发
 楼主| 发表于 2020-6-4 17:55:20 | 只看该作者
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
板凳
发表于 2020-6-5 14:45:07 | 只看该作者
回复 支持 反对

使用道具 举报

235

主题

2547

帖子

5834

积分

论坛元老

Rank: 8Rank: 8

积分
5834
地板
 楼主| 发表于 2020-6-5 17:45:00 | 只看该作者
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
5#
发表于 2020-6-8 15:41:44 | 只看该作者
回复 支持 反对

使用道具 举报

235

主题

2547

帖子

5834

积分

论坛元老

Rank: 8Rank: 8

积分
5834
6#
 楼主| 发表于 2020-6-8 17:38:49 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|玉祥公司客服-玉祥集团客服  本站关键词:快速开发平台

GMT+8, 2024-5-4 00:54 , Processed in 0.123867 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表