建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

当前位置: 建站学 > 数据库 > MSSQL Server教程 >

MSSQl分布式查询(3)

时间:2010-09-10 00:37来源: 作者: 点击:
经过测试还发现一种情况: 利用Windows7访问XP(Sp2)系统时始终提示无法解析或拒绝连接SQlServer2005.这个问题我整了好久后来才到官方链接参数中发现.:如果你的XP系统没有打上SP4的补丁包 这个问题会始终出现. 需要特

经过测试还发现一种情况:

利用Windows7访问XP(Sp2)系统时始终提示无法解析或拒绝连接SQlServer2005.这个问题我整了好久后来才到官方链接参数中发现.:如果你的XP系统没有打上SP4的补丁包 这个问题会始终出现. 需要特别注意.

<2.2>直接指定数据源分布式查询

其实相对第一种方式, 直接指定方式在SQlServer架构中 其实跳过本地与远程服务器建立映射关系的这一步. 通过链接关系建立 其实就是建立一种内部映射关系. 如果没有映射关系则 大部分设置需要手动控制.

直接指定数据源方式 需要开启分布式查询的基本权限 来进行查询:

   2:  -- 如果想使用分布式查询,必须先开通分布式查询 [外围配置 这点是所有查询操作前提]
   3:  -- sp_configure--显示或更改当前服务器的全局配置设置
   4:  -- reconfigure 指定如果配置设置不需要服务器停止并重新启动,则更新当前运行的值
   5:  -- SQL2005默认是没有开启’Ad Hoc Distributed Queries’ 组件 
   6:   
   7:  -- 启用权限
   8:  exec sp_configure 'show advanced options',1  -- 显示高级配置
   9:  reconfigure -- 更新值
  10:  exec sp_configure 'Ad Hoc Distributed Queries',1 -- 启用分布式查询
  11:  reconfigure
  12:  go
  14:   
  15:  -- 关闭分布式查询
  16:  exec sp_configure 'Ad Hoc Distributed Queries',0   
  17:  reconfigure
  18:  exec sp_configure 'show advanced options',0
  19:  reconfigure
  20:  go  
  23:  -- 开启权限后 另外一种查询方式
  24:  -- 查询格式
  25:  SELECT * FROM OPENDATASOURCE(
  26:   'SQLOLEDB',
  27:   'Data Source=远程ip;User ID=sa;Password=密码'
  28:   ).库名.dbo.表名
  29:   WHERE 条件
  31:  -- 需要开启权限 
  32:  -- 开启权限 提示[远程的SqlServer不允许远程连接]
  34:  select * from OPENDATASOURCE('SQLOLEDB','Data Source=192.168.10.67; User ID=sa; Password=chenkai').wl.dbo.Users

开启权限后. 需要里利用ReConfig命令来确认.对目前分布式查询权限的修改. 如果在使用完分布式查询后注意关闭.最后查询结果:

2010-09-09_120510


 

 

 

 

 

测试成功.

有些人说使用数据库角色SysAdmin角色下的Sa用户进行远程数据传输和验证. 不安全. 其实在使用过程中应该不难看出. 在从远程服务器拉取数据库过程中. 本地数据库需要对权限,创建连接服务器都需要最大用户权限来操作. 而服务器呢, 只需要能连接上 同时对指定数据CustomerDB具有读写的权限即可. 当然你更多远程操作可以把用户赋予CustomerDB的OWner角色.

这时我们如何用非SA用户来来连接远程用户?

我们现在远程服务器上对连接创建一个用户名为Test的用户 服务器角色设置Public即可:

 2010-09-09_131004

 

 

 

 

 

 

 

 

 

 

在用户角色设置中需要对指定访问数据CustomerDB具有读写权限: 2010-09-09_131120

 

 

 

 

 

 

 

在远程服务器创建TEst用户时使用SQlServer身份验证方式登录 这时设置密码为RemoteDB.在使用非Sa用户进行远程:

   1:  -- 执行前先删除已经存在数据
   2:  Exec sp_droplinkedsrvlogin [192.168.10.76],Null
   3:  Exec sp_dropserver 'demodb'
   4:   
   5:  -- 创建服务器连接
   6:  EXEC  sp_addlinkedserver
   7:        @server='demodb',-- 被访问的服务器别名 
   8:        @srvproduct='',
   9:        @provider='SQLOLEDB',
  10:        @datasrc='192.168.10.76'   -- 要访问的服务器
  12:   
  13:  EXEC sp_addlinkedsrvlogin 
  14:       'demodb', -- 被访问的服务器别名
  15:       'false', 
  16:       NULL, 
  17:       'Test', -- 帐号
  18:       'RemoteDB' -- 密码

如上我们首先清除已经可能创建服务器数据记录. 然后创建服务器连接.sp_addlinkedSrvlogin系统存储过程用来创建链接服务器上远程登录之间的映射 . 即我们可以详细设置本地与远程服务器详细的映射信息. 例如设置我们特定用户访问的用户名和密码.

查询数据:

   1:  -- 查询指定用户Test数据
   2:  select * from [demodb].CustomerDB.dbo.Users -- [如上测试成功]
查询结果:
2010-09-09_120510  

 

 

 

 

 

 

指定用户Test对CustomerDB访问数据方式测试成功.

 

<3>问题排查与更多查询方式

 

当我们在实际编程中进行访问远程数据时 因为不同操作环境会引发各种各样的异常,如下我会提出一种常见的异常方式解决办法和关于远程数据操作更多查询方式.

<3.1>无法建立远程连接

其实这个问题在做分布式查询时极其常见. 而引起这个问题的因素过多. 我们一时无法判断真正引发这个异常地方. 只能通过逐个排查方式来进行设置:

例如我们在建立关联关系后 进行查询时会遇到:

2010-09-09_133411

 

 

 

 

提示是: 在进行远程连接时超时, 引起这个问题原因可能是远程服务器积极拒绝访问!

首先要在Sql Server Configuation Manager中保证你服务已经运行 且是开机自动运行.

再次检查SQl2005外围配置DataBaseEngine允许远程连接:

 2010-09-09_133756

 

 

 

 

 

 

 

 

 

 

 

 

 

 

设置完成后.我们还需要设置Sql Server Analysis Services分析服务也支持远程数据查询:

 2010-09-09_134058

 

 

 

 

 

 

 

 

 

 

 

 

 

 

在远程服务器上如果启用了防火墙则可能对目前SQl Server方位实例进行拦截. 所以在服务器端启用防火墙情况下要为SQl DAtaBase创建例外.防止客户端请求被拦截.

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片