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集合不能有重复,也不充许找不一个满足要求的表。
还在研究中。。。。。。。。。。。。。。。
当组成分区表的小表结构发生变化,必须要删除分区表,然后每个小表的约束也要删除然后重建约束,即使约束没有改变,也必须这样操作,全部小表约束重建完成,再重新建立分区表.建立分区表时,可能直接写入分区表的组成语句会失败,提示"视图定义中没有输出列或 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集合不能有重复,也不充许找不一个满足要求的表。
还在研究中。。。。。。。。。。。。。。。
相关文章推荐
- sql 2000创建分区视图,注意事项
- SQL 2005 创建分区三步骤
- SQL 2005 创建分区三步骤
- 【转】分布式分区视图创建
- MSSQL (分布式)分区视图的创建及其应用
- 创建分布式分区视图
- 创建分布式分区视图
- 分布式分区视图创建 推荐
- 分布式分区视图
- sql 2005 导入到 sql 2000的步骤
- SQL语句创建Sql Server 2000 下的作业调度
- 如何用SQL语句给表增加字段? 如何分区视图?
- SQL创建视图
- PL/SQL Developer创建Job的步骤
- php+sql创建本地项目详细步骤2——ajax插入数据
- oralce,创建分区,子分区表,分区索引,查询分区对应的数据sql
- .NET2003安裝出现一直重启问题和SQL 2000安装出现“以前进行的程序安装创建了挂起的文件操作。运行程序之前,必须重新起动计算机。”~[解决方案]
- Sql2005 基于已存在的表创建分区
- 数据库高可用:SQL Server横向扩展:设计,实现与维护(2)- 分布式分区视图(上)
- SQL Server 2005/2008/2012中应用分布式分区视图