分布式分区视图创建

--=====================================
--分布式分区视图创建

--分布式分获视图的主要作用是:可以把一个数据库中的
--一个大表按照一定的条件分布到不同的多个数据库中
--这样可以减少单台服务器的压力。并且,如果所要查询的
--数据只在一台服务器上,则只会查询所需要的服务器
--但,分布式分区视图的最大缺点是受网络状况的影响
--比较大。
--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

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










本文转自 boyi55 51CTO博客,原文链接:http://blog.51cto.com/boyi55/26947,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值