zoukankan      html  css  js  c++  java
  • 【转】分布式分区视图创建

    不清楚什么是分区视图的请先看http://edobnet.cnblogs.com/archive/2005/12/23/303613.aspx

    --=====================================
    --分布式分区视图创建
    --分布式分获视图的主要作用是:可以把一个数据库中的

    --一个大表按照一定的条件分布到不同的多个数据库中
    --这样可以减少单台服务器的压力。并且,如果所要查询的
    --数据只在一台服务器上,则只会查询所需要的服务器
    --但,分布式分区视图的最大缺点是受网络状况的影响
    --比较大。
    --author:boyi55,date:2006-12-14
    --环境:两台2003服务器,sql server 2000
    --引用请注明出处
    --=====================================
    昨天因为版本问题搞的很是郁闷,晚上也没睡好觉。今天起了个大早,还好把这个问题搞好了。下面一步一步的说一下我的做法吧!
    因为我只是简单的测试环境,所以一切都比较简单。我的两台服务器名称分别为:computer和boyi55,首先,分别在两个sql server上建test数据库:
    --===============================
    --create database on computer and boyi55
    --===============================
    create database test
    分布式分区视图必须要用到check约束,并且,所定义的check约束必须是主键或者主键的一部分(也就是说表中必须要有主键)约束的条件必须不能有重复。下面是我建的两个表
    --==============================
    --create table
    --==============================
    --create table on computer
    create table dpv1(dpvid int not null primary key,addr varchar(30) not null,
    constraint ck_dpv  check(dpvid between 1 and 255))


    --create table on boyi55
    create table dpv1(dpvid int not null primary key,addr varchar(30) not null,
    constraint ck_dpv  check(dpvid between 256 and 800))

    --check中只能包含 between and or >
    下面在computer和boyi55上分别建立链接服务器dpv2和dpv1,这里我用的是oldb(具体过程略)
    用sp_helpserver查看链接服务器是否成功建立,我的sql返回的结果为
    --on computer
    name  network_name status                                                   id   collation_name nnect_timeout query_timeout
    ----- ------------ --------------------------------------------             ----  ------------- ------------ --------------
    DPV2  NULL          data access,use remote collation,lazy schema validation   1   NULL                0             0
    --on boyi55

    name  network_name status                                                   id   collation_name nnect_timeout query_timeout
    ----- ------------ --------------------------------------------             ----  ------------- ------------ --------------
    DPV1  NULL          data access,use remote collation,lazy schema validation   1   NULL                0             0

    分别在两个数据库中执行下面存储过程
    --set lazy schema validation true
    --on computer
    sp_serveroption dpv2,'lazy schema validation,true
    --on boyi55
    sp_serveroption dpv1,'lazy schema validation,true
    接着,分别在两个数据库上建立分区视图
    --on computer
    create view dpv_view
    as
    select dpvid,addr from dpv1
    union all
    select dpvid,addr from dpv2.test.dbo.dpv


    -- on boyi55
    create view dpv_view
    as
    select dpvid,addr from dpv1.test.dbo.dpv1
    union all
    select dpvid,addr from dpv

    这时,select可以正常,说明视图已经成功创建,但是还不能做插入操作。
    插入数据是会提示:
    服务器: 消息 7391,级别 16,状态 1,行 1
    该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
    [OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]

    这时我们要设置msdtc,具体方法为:
    打开管理工具--->组件服务--->组件服务--->计算机--->我的电脑--->右击属性--->MSDTC--->安全配置--->选中“网络DTC访问”并选择“允许远程客户端”,“允许入站”,“允许出站”,“不要求进行验证”然后点确定。
    另外还要注意一点,如果是在局域网里,要打开NETBIOS或者在HOSTS文件里加入IP地址和对应的主机名。否则还是不能进行插入操作的。
    上面设置完成以后,进行插入和修改操作(:注意,一定要打开xact_abort 开关)
    --on boyi55
    set xact_abort on
    insert into dpv_view (dpvid,addr)values(777,'boyi55')
    set xact_abort off

    --on computer
    set xact_abort on
    update dpv_view
    set dpvid=666
    where dpvid=777

    一切正常,说明分布式分区视图已经成功创建。

  • 相关阅读:
    Yii隐藏单入口
    JS字符串的问题
    暑假第三测
    暑假第二测
    暑假第一测
    沈阳集训day4
    沈阳集训day3
    P2571 [SCOI2010]传送带
    CF626C Block Towers
    洛谷P4171 [JSOI2010]满汉全席
  • 原文地址:https://www.cnblogs.com/SALIN/p/1846764.html
Copyright © 2011-2022 走看看