一、在SQLServer中连接另一个SQLServer库数据

在SQL中,要想在本地库中查询另一个数据库中的数据表时,可以创建一个链接服务器:

EXEC master.dbo.sp_addlinkedserver @server = N'别名', @srvproduct=N'库名',@provider=N'SQLOLEDB', @datasrc=N'服务器地址'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'别名', @locallogin = NULL ,@useself = N'False', @rmtuser = N'用户名', @rmtpassword = N'密码'

创建完后,就可以通过“Select * from别名.库名.dbo.表名”来查询了。

或者也可以手工创建:

二、在Oracle中连接另一个Oracle库数据

在Oracle中,其实也类似,要连接到其他库时,也需要创建一个类似这样的连接:

create database link 别名 connect to 模式名(用户名) identified by "密码" using 'TNS名';

注意:这里面的TNS名就是你需要连接的另一个库的TNS名,而且是必需是在你当前连接的库的服务器端所配置的TNS名。

创建完后,我们也就可以访问了:“Select * from表名@别名”

如果使用的是PL/SQL开发工具,那么我们也可以直接在工具里创建:

三、在SQL Server中连接Oracle数据

同样,也创建一个数据库连接即可,这时我们采用Ole DB方式连接数据库:

EXEC master.dbo.sp_addlinkedserver @server = N'别名', @srvproduct=N'库名',@provider=N'MSDAORA', @datasrc=N'TNS名'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'别名', @locallogin = NULL ,@useself = N'False', @rmtuser = N'模式名', @rmtpassword = N'密码'

注意:这里面的TNS名,是在该SQL Server器端所配置的TNS名,不是在客户端本地哦。

创建好了后,使用“select * from openquery(别名,'select * from模式名.表名”来执行查询。

要连接到其他类型的数据库时,其实方式也类同,只要用相应的provider来连接即可。

四、在Oracle中连接SQL Server数据

在oracle中连接SQLServer也很类似,创建一个DBLink,但问题是,创建DBLink里,里面用的TNS名称都是连接到Oracle的,没有配置连接到SQL Server中的。

于是想到采用Oracle中的透明网关来实现,首先在Oracle的安装名中装上,Oracle Net Services和Oracle Transparent Gateways, 并在此项下选择Oracle Transparent Gateway for Microsoft SQL Server。

配置透明网关,编辑%ORACLE_HOME%/tg4msql/admin/init%ORACLE_SID%.ora, 该文件包含了TG for SQL Server的配置信息, 其中%ORACLE_SID%是给TG的"SID", 默认为tg4msql. 修改文件中的行HS_FDS_CONNECT_INFO="SERVER=SQL服务器地址;DATABASE=库名"。

然后创建监听器:编辑%ORACLE_HOME%/network/admin/listener.ora, 编辑对应listener的SID_LIST:

SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC= 
(SID_NAME=%ORACLE_SID%)
(ORACLE_HOME=oracle_home_directory)
(PROGRAM=tg4msql)
)
)

其中%ORACLE_SID%为第二布中设置的SID, 默认值为tg4msql. 修改listener.ora文件后需重启listener使修改生效.

最后就可以配置TNS名了,如果直接修改Tnsname.ora文件的话,添加的格式是:

TNS名=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=sqlserver)(PORT=1521))
(CONNECT_DATA=(SID=网关ID))
(HS=OK))

这样,TNS名后就可以创建DB Links,然后查询的方式与前面一至。

Oracle&SQLServer中实现跨库查询的更多相关文章

  1. sql中的跨库查询

    在sql查询时,需要关联2个服务器上的不同数据库,只需要在所需查询的表名前加上服务器地址即可. 例如:在 192.168.0.15,8020的db110库 和 192.168.0.150,8082的d ...

  2. SqlServer跨库查询

    由于业务的拆分,数据库拆分为两种作用: 汇总数据库(Master,头节点数据库), 子节点数据库(Compute Node,计算子节点数据库) 这样,就设计到子节点访问头节点数据库中的某张汇总表,这种 ...

  3. oracle使用dblink跨库查询的例子

    本文介绍了oracle数据库使用dblink进行跨库查询的方法,oracle dblink跨库查询教程,需要的朋友参考下.   oracle dblink跨库查询 方法一:首先,创建数据库链接: 复制 ...

  4. SQLServer跨库查询--分布式查询

    出处:http://www.cnblogs.com/doosmile/archive/2012/03/16/2400646.html --用openrowset连接远程SQL或插入数据 --如果只是临 ...

  5. SQLServer跨库查询--分布式查询(转载)

    --用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB' ,'sq ...

  6. ACCESS-如何多数据库查询(跨库查询)

    测试通过:ACCESSselect * from F:\MYk.mdb.tablename说明:1.查询语句2.来原于哪(没有密码是个路径)3.查询的表名 ====================== ...

  7. 如何使用SQL SERVER数据库跨库查询

    SQL Server中内置了数据库跨库查询功能,下面简要介绍一下SQL Server跨库查询.首先打开数据源码:OPENDATASOURCE不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分 ...

  8. SQL Server 中的跨库视图

    SQL Server 中的跨库视图 在一个SQL中,有多个数据库,A.B.C,在使用C为连接库中,现在要查询A中的表T1. 那么,在C中建创视图(A_T1). SELECT *FROM A.dbo.T ...

  9. Access数据库跨库查询及记录集区分

    医疗设备软件一般都是单机软件,如果是Windows平台,常会选择Access数据库存储结构化数据,因为他轻量,便于部署.然而随着医疗信息化的发展,医生希望对多台单机设备的数据进行管理,采用网络数据库当 ...

随机推荐

  1. node.js监听文件变化

    前言 随着前端技术的飞速发展,前端开发也从原始的刀耕火种,向着工程化效率化的方向发展.在各种开发框架之外,打包编译等技术也是层出不穷,开发体验也是越来越好.例如HMR,让我们的更新可以即时可见,告别了 ...

  2. C# 自定义等待窗口

    private SynchronizationContext syncContext = null; public WaitWindow() { InitializeComponent(); sync ...

  3. 深入理解原型链(Prototype chain) __proto__

    原型链(Prototype chain) 原型对象也是普通的对象,并且也有可能有自己的原型,如果一个原型对象的原型不为null的话,我们就称之为原型链(prototype chain). A prot ...

  4. csdn 站点使用

    大学时使用csdn下载软件资源,最终csdn成为一个it中很重要站点,csdn的运营方式值得思考.

  5. 英语口语练习系列-C34-儿童-谈论物品和人-武陵春

    词汇-儿童 child a child favorite game toy regulation breadwinner dominant selfish ancestor custom belief ...

  6. Java笔记(十六)并发容器

    并发容器 一.写时复制的List和Set CopyOnWrite即写时复制,或称写时拷贝,是解决并发问题的一种重要思路. 一)CopyOnWriteArrayList 该类实现了List接口,它的用法 ...

  7. ES6快速入门(三)类与模块

    类与模块 一.类 一)类的声明 class Person { constructor(name) { this.name = name; } sayName() { console.log(this. ...

  8. Java并发程序设计(二)Java并行程序基础

    Java并行程序基础 一.线程的生命周期 其中blocked和waiting的区别: 作者:赵老师链接:https://www.zhihu.com/question/27654579/answer/1 ...

  9. vue给methods中的方法传入当前点击行的值

    <template> <!-- 在template中,只能存在一个根组件 --> <div class="event"> <ul> ...

  10. [jzoj]1417.数学题

    Link https://jzoj.net/senior/#main/show/1417 Problem 当Alice在浏览数学书时,看到一个等式A=S,奇怪的是A和S并不相等.Alice发现可以通过 ...