前言

最近在工作到遇到客户提出要做数据库数据归档的功能,我们产品主要对接的数据库包含ORACLE和SQL SERVER,了解到,这两种数据库可以用DBLINK方式来访问同一局域网的不同IP地址的数据库,因此很有必要对DBLINK整理一篇文章,方便自己get到这个知识点。


DBLINK

DBLINK,即数据库链接(Database Link),是 Oracle 数据库中用于连接不同数据库实例的一种机制。通过 DBLINK,用户可以在一个数据库实例中直接查询或操作另一个数据库实例中的表、视图或存储过程。

  • DBLINK的作用
    •  跨库查询:通过 DBLINK,用户可以在一个数据库实例中执行 SQL 查询,并访问另一个数据库实例中的数据。
      
    •  数据交换:使用 DBLINK,可以轻松地在两个数据库实例之间传输数据,实现数据的同步或迁移。
      
    •   分布式事务处理:在分布式数据库环境中,DBLINK 可以帮助管理跨多个数据库实例的事务。
      

ORACLE中使用DBLINK

介绍如何创建DBLINK和使用它。

  1. 创建 DBLINK:使用 CREATE DATABASE LINK 语句来创建 DBLINK。在创建过程中,需要指定目标数据库实例的连接信息,如用户名、密码、数据库名等。
CREATE DATABASE LINK dblink_name  
CONNECT TO username IDENTIFIED BY password  
USING 'tns_name';

其中,tns_name 是目标数据库实例在 tnsnames.ora 文件中配置的别名。

  1. 使用 DBLINK:一旦 DBLINK 创建成功,就可以通过它来访问目标数据库实例中的对象了。在 SQL 查询中,可以使用 @dblink_name 的语法来指定要查询的数据库实例。
SELECT * FROM table_name@dblink_name;
  1. 项目中的实际例子,如图:
    在这里插入图片描述
--创建dblink连接
 
--create database link TestDblink
--connect to dbName identified by dbPassword
--using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = x.x.x.x)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';

--TestDblink : 表示dblink名字  默认kisc

--dbName :表示 远程数据库的用户  生产kisc用户

--dbPassword:表示 远程数据库的密码  生产kisc密码  如有特殊字符,举例如下用双引号   "abc123!@#"  

--HOST : 表示远程数据库IP   

--PORT : 表示远程数据库端口

--SERVICE_NAME : 远程数据库的实例名

DECLARE
      NUM NUMBER;
BEGIN
	SELECT COUNT(1) INTO NUM FROM USER_OBJECTS T WHERE T.OBJECT_TYPE='DATABASE LINK' AND T.OBJECT_NAME = UPPER('KISC');
    IF NUM > 0 THEN
        EXECUTE IMMEDIATE 'DROP DATABASE LINK KISC';
    END IF;
END;
/

CREATE DATABASE LINK KISC
CONNECT TO KISC IDENTIFIED BY KISC
USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = x.x.x.x)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';

EXIT;

  1. 注意事项
  • 权限:创建和使用 DBLINK 需要相应的权限。通常,只有数据库管理员或具有相应权限的用户才能执行这些操作。
  • 安全性:使用 DBLINK 时需要注意安全性问题,特别是当涉及到敏感数据或跨信任域的数据库连接时。
  • 性能:跨库查询可能会受到网络延迟、数据库性能等多种因素的影响,因此在使用 DBLINK 时需要考虑到这些因素对性能的影响。

总之,DBLINK 是 Oracle 数据库中实现跨库查询和数据交换的重要机制,对于需要在多个数据库实例之间进行交互的应用场景非常有用。


SQL SERVER中使用DBLINK

在SQL Server中,sp_addlinkedserver是一个存储过程,用于添加链接服务器的信息,实现类似于Oracle中的DBLINK的功能。它允许你在SQL Server实例之间建立连接,从而可以执行分布式查询或操作远程数据。

  1. 用法,使用sp_addlinkedserver的基本语法如下:
	EXEC sp_addlinkedserver   
    @server='server_name',   
    @srvproduct='',  
    @provider='provider_name',   
    @datasrc='data_source';
	
	其中:
	@server:要创建的链接服务器的名称。
	@srvproduct:OLE DB 数据源的产品名称,通常可以留空。
	@provider:OLE DB 提供程序的名称,用于连接到数据源。
	@datasrc:数据源的名称或位置,比如另一个SQL Server实例的名称或IP地址。
	此外,还有其他可选参数,如@location@provstr@catalog,它们提供了更详细的连接信息。
  1. 实现原理
    在这里插入图片描述
  2. 项目中的应用,如图:
    在这里插入图片描述
--创建DBLINK
use master
go
IF EXISTS(SELECT 1 FROM master.sys.sysservers WHERE srvname='kisc')
begin
EXEC sp_dropserver 'kisc','droplogins'                                      
end
IF not EXISTS(SELECT 1 FROM master.sys.sysservers WHERE srvname='kisc')
begin
  EXEC sp_addlinkedserver
   @server = 'kisc',                   --被访问的服务器别名
   @srvproduct = 'MS SQL',             --要添加为链接服务器的 OLE DB 数据源的产品名称
   @datasrc = 'ip,port',               -- 格式为"ip, port",请按实际生产环境布署情况进行修改
   @provider = 'SQLNCLI'           
 EXEC sp_addlinkedsrvlogin
   @rmtsrvname = 'kisc' ,                    --远程服务器别名
   @useself = 'false' ,
   @locallogin = NULL ,
   @rmtuser = 'sa' ,                         -- user 
   @rmtpassword = 'xxxxxx'                   -- password,需按实际配置进行修改
end

小结

对DBLINK做了一个小总结,也总算没有浪费周六加班一天去研究数据归档的功能,希望能够对有所需要的小伙伴能提供一些帮助。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐