数据仓库之抽取数据:通过链接服务器获取SQL Server数据

 

在做数据仓库时,最重要的就是ETL的开发,而在ETL开发中的第一步,就是要从原OLTP系统中抽取数据到过渡区中,再对这个过渡区中的数据进行转换,最后把经过处理的干净的数据加载到数据仓库中。

 

目标数据库是sql server,现在要从同为sql server的数据源,抽取数据。

步骤如下:

 

1、开启即席查询

--修改高级参数
sp_configure 'show advanced options',1
go

--允许即席分布式查询
sp_configure 'Ad Hoc Distributed Queries',1
go

--如果配置的值不在合理范围(在最小值最大值范围内),那么可以强制覆盖
reconfigure with override  
go

在分布式即席查询中,select into语句不能用于把本地的表导出到远程服务器,解决办法是
要在远程服务器新建表,必须通过execute at来执行DDL语句,
而要执行execute at,必须先设置链接服务器的rpc、rpc out属性为true,最后用insert into把本地的数据导入到远程。 

 

2、创建链接服务器

--建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
EXEC master.dbo.sp_addlinkedserver @server = N'Link',
                                   @srvproduct='ms', 
                                   @provider=N'SQLNCLI',                                    
                                   @datasrc=N'192.168.1.5,1433'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Link',
                                    @useself=N'False',
                                    @locallogin=NULL,
                                    @rmtuser=N'sa',
                                    @rmtpassword='xyz'


--建立链接服务器,通过@server参数指定服务器,适合直接连接sql server
EXEC master.dbo.sp_addlinkedserver @server = N'192.168.1.5,1433', 
                                   @srvproduct=N'SQL Server'


EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'192.168.1.5,1433',
                                     @useself=N'False',
                                     @locallogin=NULL,
                                     @rmtuser=N'sa',
                                     @rmtpassword='xyz'

3、设置链接服务器的属性,从而远程调用存储过程rpc

EXEC master.dbo.sp_serveroption @server=N'192.168.1.5,1433', 
                                @optname=N'rpc out', 
                                @optvalue=N'true'

EXEC master.dbo.sp_serveroption @server=N'192.168.1.5,1433', 
                                @optname=N'rpc', 
                                @optvalue=N'true'

4、通过链接服务器来执行分布式查询

select * from link.wc.dbo.wcc

select * from [192.168.1.5,1433].wc.dbo.wcc

5、通过openquery来执行分布式查询,需要先建立链接服务器

select *
from openquery([link],'select * from wc.dbo.wcc')

6、查看链接服务器

select server_id,
       name,
       product,
       provider,
       data_source,
       
       is_linked,
       is_remote_login_enabled,
       is_remote_proc_transaction_promotion_enabled,
       lazy_schema_validation       
from sys.servers

查看链接登录名

select s.name,
       ll.remote_name,
       sp.name
from sys.linked_logins ll
inner join sys.servers s
        on s.server_id = ll.server_id        
left join sys.server_principals sp
       on sp.principal_id = ll.local_principal_id

7、删除链接服务器登录名映射、删除链接服务器

exec sp_droplinkedsrvlogin @rmtsrvname = '192.168.1.5,1433',
                           @locallogin = null

exec sp_dropserver @server = '192.168.1.5,1433'


exec sp_droplinkedsrvlogin @rmtsrvname = 'link',
                           @locallogin = null

exec sp_dropserver @server = 'link'

8、通过openrowset函数

--第一种写法
SELECT * 
FROM 
OPENROWSET('SQLOLEDB', 
           'server=192.168.1.5,1433;uid=sa;pwd=xyz', --字符串
           wc.dbo.wcc)                           --直接写表的名称
 
 --第二种写法
SELECT * 
FROM 
OPENROWSET('SQLOLEDB', 
           'server=192.168.1.5,1433;
            uid=sa;
            pwd=xyz',                     --字符串
           'select * from wc.dbo.wcc 
            where wcc_name =''abc''')          --查询语句,注意不能用字符串连接符

9、通过opendatasource函数

select *
from 
opendatasource('SQLOLEDB',
               'DATA SOURCE=192.168.1.5,1433;
                USER ID=sa;
                password=xyz').wc.dbo.wcc

 

你可能感兴趣的:(【SQL,编程&商务智能BI】)