分布式分区视图

    技术2022-05-20  43

    分布式分区视图 (网转 实例)

    --===================================== --分布式分区视图创建 --分布式分区视图的主要作用是:可以把一个数据库中的 --一个大表按照一定的条件分布到不同的多个数据库中 --这样可以减少单台服务器的压力。并且,如果所要查询的 --数据只在一台服务器上,则只会查询所需要的服务器 --但,分布式分区视图的最大缺点是受网络状况的影响 --比较大。 --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 computername  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 boyi55name  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 computersp_serveroption dpv2,'lazy schema validation,true--on boyi55sp_serveroption dpv1,'lazy schema validation,true接着,分别在两个数据库上建立分区视图--on computercreate view dpv_viewasselect dpvid,addr from dpv1union allselect dpvid,addr from dpv2.test.dbo.dpv-- on boyi55create view dpv_viewasselect dpvid,addr from dpv1.test.dbo.dpv1union allselect 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 boyi55set xact_abort oninsert into dpv_view (dpvid,addr)values(777,'boyi55')set xact_abort off--on computerset xact_abort onupdate dpv_view set dpvid=666where dpvid=777一切正常,说明分布式分区视图已经成功创建。


    最新回复(0)