SqlServer分布式查询

 

 

说明:本文连接两个远程数据库

类型

服务器

数据库

表名

Sql Server

SGPTIEDBDEV01

ChinaODSTest20110706

Interface_Account_DIMN

访问SqlServer的用户名:MDMTST 密码:MDMTST

 

类型

主机名

服务名

本地服务名

表名

Oracle

EMAEDCS062.pfizer.com

edmp1.sandwich.pfizer.com

EDW

RDM_POSITION_DIMN_VW

访问Oracle的用户名:WANGX23 密码:firewas#245

创建For Oracle的Linked Server,需要安装Oracle客户端,并创建本地服务。

本文测试的前提是安装了Oracle Client 9.2.0.8,并创建了本地服务EDW。

创建Oracle本地服务的步骤参见正文。

一、  创建Oracle本地服务

program files-->Oracle-OraHome92-->Configuration and Magration tools-->Net Manager-->将弹出Oracle Net Manager窗口-->选择Oracle Net配置-->选择本地-->选择服务命名-->点击左上角的加号图标-->将出现Net 服务名向导-->在Net服务名处输入"EDW"并点击下一步-->选择"TCP/IP(Internet协议)"并点击下一步-->在主机名处输入"EMAEDCS062.pfizer.com",端口为默认的"1521",点击下一步-->在(Oracle8i或更高版本)服务名处输入"edmp1.sandwich.pfizer.com",连接类型为"数据库默认",点击下一步-->点击测试按钮-->更改登录-->输入用户名:WANGX23 口令:firewas#245进行测试,测试成功会显示"连接测试成功"-->点击关闭按钮-->点击完成按钮。

二、LINKED SERVER

1.   建立Linked Server

(1)       命令方式

First: For SqlServer

EXEC master.dbo.sp_addlinkedserver @server = N'SGPTIEDBDEV01', @srvproduct=N'SQL Server'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'SGPTIEDBDEV01',@useself=N'False',@locallogin=NULL,@rmtuser=N'MDMTST',@rmtpassword=N'MDMTST'

Second: For Oracle

EXEC master.dbo.sp_addlinkedserver @server = N'EDW', @srvproduct=N'Oracle', @provider=N'MSDAORA', @datasrc=N'EDW', @provstr=N'MSDAORA'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'EDW',@useself=N'False',@locallogin=NULL,@rmtuser=N'WANGX23',@rmtpassword=N'firewas#245'

(2)       可视化方式

First: For SqlServer

Server Objects-->Linked Server-->右键-->New Linked Server-->在New Linked Server窗口左侧选择General-->

在右侧Linked Server处输入"SGPTIEDBDEV01"-->选择Server Type为SQL Server-->在New Linked Server窗口左侧选择Security

-->在右侧下方选择"Be made using this security context"-->在Remote login处输入"MDMTST"-->在With password处输入"MDMTST"-->点击OK完成

Second: For Oracle

Server Objects-->Linked Server-->右键-->New Linked Server-->在New Linked Server窗口左侧选择General-->

在右侧Linked Server处输入"EDW"-->选择Server Type为Other data source-->选择Provider为"Microsoft OLE DB Provider for Oracle"-->在Product name处输入"Oracle"-->在Data source处输入"EDW"-->在Provider string处输入"MSDAORA"

--在New Linked Server窗口左侧选择Security-->在右侧下方选择"Be made using this security context"-->在Remote login处输入"WANGX23"-->在With password处输入"firewas#245"-->点击OK完成

2.   使用Linked Server进行查询

(1)       查询SqlServer

方式1:

SELECT * FROM OPENQUERY(SGPTIEDBDEV01,

'SELECT COUNT(*) FROM ChinaODSTest20110706.DBO.Interface_Account_DIMN')

方式2:

SELECT COUNT(*) FROM SGPTIEDBDEV01.ChinaODSTest20110706.DBO.Interface_Account_DIMN

(2)       查询Oracle

示例1:

SELECT * FROM OPENQUERY(EDW,

'SELECT COUNT(*) FROM RDM_POSITION_DIMN_VW')

示例2:

                                     SELECT * FROM OPENQUERY

(EDW,'

    SELECT     ACCT_ID_SK,

              ACCT_ID_NK,

              ACCT_NM             

    FROM       rdm_account_dimn_vw 

    WHERE      ROWNUM < 100')

三、OPENDATASOURCE

1.       基本语法

SELECT * FROM OPENDATASOURCE('provider_name','init_string').databasename.dbo.tablename

2.  更多语法

参见:http://msdn.microsoft.com/zh-cn/library/ms179856.aspx

3.       示例

(1)   查询SqlServer

SELECT TOP 100 * FROM OPENDATASOURCE('SQLOLEDB','DATA SOURCE=SGPTIEDBDEV01;USER ID=MDMTST;PASSWORD=MDMTST;').ChinaODSTest20110706.DBO.Interface_Account_DIMN

(2)       查询Oracle

 

四、OPENROWSET

1.       基本语法

SELECT * FROM OPENROWSET('provider_name','datasource';'user_id';'password',databasename.dbo.tablename)

2.       更多语法

http://msdn.microsoft.com/zh-cn/library/ms190312.aspx

3.       示例

(1)       查询SqlServer

SELECT TOP 100 * FROM OPENROWSET('SQLOLEDB','SGPTIEDBDEV01';'MDMTST';'MDMTST',ChinaODSTest20110706.DBO.Interface_Account_DIMN)

(2)       查询Oracle

 

五、异常

         在使用OPENROWSET/OPENDATASOURCE时,可能会有以下异常。

    异常描述:

SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', see "Surface Area Configuration" in SQL Server Books Online.

解决办法:

EXEC sp_configure 'show advanced options', 1;

GO

RECONFIGURE;

GO

EXEC sp_configure 'Ad Hoc Distributed Queries', 0;

GO

RECONFIGURE;

GO

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值