您的位置:首页 > 数据库

sql 2000 分布式分区视图的创建步骤

2008-04-11 18:36 357 查看
经验:

当组成分区表的小表结构发生变化,必须要删除分区表,然后每个小表的约束也要删除然后重建约束,即使约束没有改变,也必须这样操作,全部小表约束重建完成,再重新建立分区表.建立分区表时,可能直接写入分区表的组成语句会失败,提示"视图定义中没有输出列或 FROM 子句中没有项目",只有先建立一个单表的分区表,然后双击分区视图,修改分区表的语句,才能成功,采用"设计视图"功能修改语句总是会失败,原因是"CREATE VIEW 视图名"这行语句没有.

另外分区视图的更新,必须要每个字段都显示给出值,不能采用默认值.

有时候发现无法在分区表中删除行,也是因为小表的约束问题造成,必须要删除约束重建约束,重建分区视图.

------------------------------------

主要功能是为了提高大数据量性能,通过把数据放到不同表,或不能同服务器的不同数据库实例上。来提高数据性能。

下面看一个实际,转自WEB CAST,
在服务器A创建表CUSTOMERS,




//ServerA


Use pubs


go


Create table customers (


Customerid varchar(5) not null,


CompanyName varchar(50) not null,


ContactName varchar(30) null,




CONSTRAINT PK_customers PRIMARY KEY CLUSTERED (Customerid),


CONSTRAINT CK_customerid CHECK (Customerid between 'AAAAA' and 'LZZZZ')


)
在服务器B也创建另一张表,表的结果,类型完全一样,注意表的CHECK不同。(表名可以不同,但最好一样)


//Server B


use pubs


go


Create table customers (


Customerid varchar(5) not null,


CompanyName varchar(50) not null,


ContactName varchar(30) null,


CONSTRAINT PK_customers PRIMARY KEY CLUSTERED (Customerid),


CONSTRAINT CK_customerid CHECK (Customerid between 'M' and 'ZZZZZ')


)


go

在A服务器上创建B服务器的链接服务器,已使A服务器能访问B服务器,


//ServerA


exec sp_addlinkedserver


@server='DPVSERVER1', @srvproduct='',


@provider='SQLOLEDB', @datasrc='ServerB'


go


exec sp_addlinkedsrvlogin


@rmtsrvname = 'DPVSERVER1'


, @useself = 'false'


, @rmtuser = 'sa'


, @rmtpassword = 'password'


go
同样,B服务器,创建A服务器的链接服务器,


//ServerB


exec sp_addlinkedserver


@server='DPVSERVER2', @srvproduct='',


@provider='SQLOLEDB', @datasrc='ServerA'


exec sp_addlinkedsrvlogin


@rmtsrvname = 'DPVSERVER2'


, @useself = 'false'


, @rmtuser = 'sa'


, @rmtpassword = 'password'


go
在A服务器上设置,属性,


//ServerA


Exec sp_serveroption 'DPVSERVER1', 'lazy schema validation', 'true'
B服务器上,设置属性,


//Sever B


Exec sp_serveroption 'DPVSERVER2', 'lazy schema validation', 'true'
A服务器上创建分区视图:


//Server A:


Create view DPV_Customers As


Select * from Customers


Union all


Select * from DPVSERVER1.Pubs.dbo.Customers
B服务器也创建分区视图:(注意视图,UNION ALL的顺序)


Create view DPV_Customers As


Select * from DPVSERVER2.Pubs.dbo.Customers


UNION ALL


Select * from Customers
下面使用DPV_CUSTOMERS,和实际物理表一样
执行的时候打开查询分析器的执行计划,可以看到,实际,会优化,实际应该读那一张,写那一样表。


set xact_abort on


INSERT INTO DPV_CUSTOMERS VALUES('AAMAY','FUZHOU COMPANY','MARRY')


INSERT INTO DPV_CUSTOMERS VALUES('CJOHN','XIMEN COMPANY','MARRY')


INSERT INTO DPV_CUSTOMERS VALUES('SMITH','SHANGHAI COMPANY','TOM')


INSERT INTO DPV_CUSTOMERS VALUES('YOUNG','FUJIAN COMPANY','JANE')


INSERT INTO DPV_CUSTOMERS VALUES('GTOPP','BEJING COMPANY','TOM')


INSERT INTO DPV_CUSTOMERS VALUES('QUILH','BEJING COMPANY','TOM')






//SELECT * FROM DPV_Customers order by customerid




//SELECT * FROM DPV_Customers WHERE CustomerID= 'QUILH'





这个功能很不错,不过也会有一些问题,

1,表不能有DEFAULT 约束
2,INSERT 要一次性查询所有列的值,没有值的用NULL
3,各个表个CHECK集合不能有重复,也不充许找不一个满足要求的表。
还在研究中。。。。。。。。。。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: