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