Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1590621
  • 博文数量: 43
  • 博客积分: 169
  • 博客等级: 入伍新兵
  • 技术积分: 1162
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-08 15:35
文章分类

全部博文(43)

文章存档

2021年(1)

2019年(4)

2016年(6)

2015年(8)

2013年(19)

2012年(5)

分类: SQLServer

2013-03-27 08:20:11

sqlserver分布式操作





    分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。(摘自:百度百科)书本总是喜欢将简单的东西讲的非常复杂,并且用一些文邹邹的、让人从字面上难以理解的术语来解释一些显而易见的事物,而且所用篇幅还特别的长,其实对于上述一段话很容易理解:就是由于有一个任务量很大的工作一个人或机器难以完成,所以派两个人或更多去完成它,最终汇总。就是这样一个过程或者说是一个架构。而今天所说的sqlserver数据库的分布式操作也完全是基于上面的思想去做的。(续:其实分布式架构还是非常有使用价值的,但是要按照您的应用环境,比如对于一个访问量很小的网站来说就没有必要使用分布式架构来设计,这样反而会增加多数据访问的时间)
    1、先看sqlserver数据分布式操作分类:
        按其数据所在物理位置大体分为:相同物理位置(同一服务器即具有相同IP)和不同物理位置。
        1、相同物理位置:
            当进行数据库访问时,只需对在原来的表名变成  数据库名.dbo.表名即可做为与当前数据库的区分。例如:select * from  db.dbo.testtable
        2、不同物理位置:
            这里面比较复杂的就是不同物理位置的数据库之间的访问。
            微软公司为了实现这种方式的分布式访问提供了两种方式来实现:一种是Add Link Server方式建立服务器之间关联.创建一个链接的服务器,使其允许对分布式的、针对 OLE DB 数据源的异类查询进行       访问. 一般适用于持久的数据操作 对于数据量偏大 服务器之间交付时间长特点;另一种Add Host Name 利用域来唯一识别数据库以及数据库表对象. 来实现跨服务器访问. 这种方式一般比较简单 主要适用       于对数据需求临时性查询是使用偏多. 不适合做大批量数据提取. 有性能瓶颈.·
            下面将针对两种方式进行详细事例讲解:
            首先第一种方式add link server通过调用如下存储过程来实现:
            ---创建数据库链接
            exec  sp_addlinkedserver '链接别名' ,'数据库类型','SQLOLEDB','远程服务器名或ip地址' ---这里要说明一下 第二个参数,此参数指明的是数据库类型,如果该参数为空那么默认指定为sqlserver数据库
            --执行完上面的存储过程后,可以通过  exec  sp_helpserver 查询数据服务链接的具体情况
            --用户登录远程数据库
           exec sp_addlinkedsrvlogin  '链接别名 ', 'false ',null, '用户名 ', '密码 '
           --这个时候我们就可以通过链接的别名操作远程数据库了,方式如下
            select * from  '链接别名'.'数据库名'.dbo.‘表名’
            --上面是如何链接并使用远程数据库,下面将讲述如何将建立的远程链接推出登录并删除
            exec sp_droplinkedsrvlogin?  '数据库名' , NULL    ---如果为null ,将会删除由sp_addlinkedserver创建的默认映射【第二个参数】
            exec sp_dropserver '数据库名'     ---删除链接服务器信息,同时删除 sys_server信息
?            ?第二种方式add host name 方式:
?            此种方式只能建立临时链接,其原因从其实现方式上也能够看得出来。能够实现add host name功能的三个重要函数  openrowset()、opendatasource()和openquery()。
?            openrowset
?            openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名) 
?            opendatasource?          
?            opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名 ??
?            openquery
?            openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a 
?            注:如果要是先这种方式的远程数据库访问,首先要开启数据的远程被访问的权限(默认不开启)
?            开启方式:
?            
exec sp_configure 'Ad Hoc Distributed Queries',1  
reconfigure  
          exec sp_configure 'show advanced options',1  
?          reconfigure  
    使用完成后,关闭Ad Hoc Distributed Queries:
      exec sp_configure 'Ad Hoc Distributed Queries',0  
?           reconfigure  
           ?exec sp_configure 'show advanced options',0  
           ?reconfigure   
?
?          

阅读(8204) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~