SQL Server 2000的新特色
继SQL 7增加了四种新的数据类型之后,SQL 2000又提供了三种新的数据类型,分别
在数据量越来越大的今天,用int(-2^31 (-2,147,483,648) 到 2^31 - 1
(2,147,483,647))来表示整数有时已经显得不太够用了,FLOAT也不是很合适,所以VB 7和
SQL 2000都有了新的整数类型,这就是bigint,它是8bytes的整数类型,范围是-2^63
(-9223372036854775808) 到2^63-1 (9223372036854775807)。
熟悉VBScript的人都知道,VBS使用的是一种叫做variant的数据类型。它可以存
放任何数据类型,数字、字符、对象等。SQL 2000里面的sql_variant还没有那么强大的功能
,它不能存放blob的数据,如text、ntext和image,还有timestamp,但是已经给编程带来了
SQL里面是没有数组类型的,但是新的表格类型允许应用软件暂时存储那些一会儿会
用到的结果。它不可以做为表的一个列出现,而只能在T-SQL程序中使用。作为自定义函数的
Example:
DECLARE @TableVar TABLE
(Cola int PRIMARY KEY,
Colb char(3))
INSERT INTO @TableVar VALUES (1, ’abc’)
INSERT INTO @TableVar VALUES (2, ’def’)
SELECT * FROM @TableVar
GO
要注意的是,以前版本的ADO对这几种数据类型的支持都不完全,要在程序中使用这
SQL Server 2000 和 XML
现在XML似乎很吃香,各种东东都开始支持XML了。善于跟风的MS自然是事事都想要
带头的。浏览器、Office、SQL、MDAC都要和XML搀和一哈。
去年MS就在MDAC2.0还是2.1里面提供了一个功能,把一个结果集保存为XML,在
SQL 2000里面,使用XML更加方便了,SQL查询可以直接返回一个XML,并且还可以通过XML来
要返回XML非常的简单,只需要在你的SQL 语句后面加一个FOR XML AUTO就可以了。
Example:
SELECT TOP 1 ID, Filename, Download_Time, Introduce FROM download FOR
如果使用FOR XML RAW的话,就会返回
如果用FOR XML AUTO, ELEMENTS,结果是
1
ayako_katagiri.exe
1998-12-21T00:00:00
片桐彩子Winamp Skin
使用FOR XML EXPLICIT特别麻烦,前面要定义一堆东西,但是功能也很强大,
我就不详细介绍了,有兴趣的可以参见Online Book:Using EXPLICIT Mode
SELECT TOP 1 1 as Tag, Null as Parent,ID as [DownloadXML!1!ID], Filename
[DownloadXML!1!Filename] FROM download FOR XML EXPLICIT
上面是如何返回XML数据,下面来看一下如何把XML当表使用
OPENXML可以把XML的数据打开成为一个表
Example:
declare @l int
declare @txtXML varchar(1000)
set @txtXML = ’
’
exec sp_xml_preparedocument @l OUTPUT, @txtXML
SELECT * FROM OPENXML (@l, ’/Root/download’,1) WITH (ID int,Filename
varchar(50))
EXEC sp_xml_removedocument @l
执行结果
ID Filename
----------- --------------------------------------------------
1 ayako_katagiri.exe
2 beauti.mid
3 bee.mp3
4 behavior.js
5 cactivex.zip
6 chatsrvr.exe
7 chatter.exe
8 china.zip
9 ciyun.gb
10 ci_shanxi1.gb
(10 row(s) affected)
这些功能意味着我们可以使用SQL 2000来生成一个XML并且通过XML的得到客户端的
返回值(不一定要通过ASP之类的工具哦,可以通过URL来访问SQL 2000返回的XML的,不过
联合SQL 2000服务器(Federated SQL Server 2000 Servers)
可能大家都听说过集群服务器Clustered Server,但是在SQL 2000里面我却惊奇的
发现,集群服务器不见了!取而代之的是一个叫联合服务器的东东。
现在就让我们来看看它们之间有什么区别吧。
SQL 2000的数据库能够被分散在一组独立的数据库服务器上以支持大规模的Web站
点的访问需求和企业级的数据处理系统。面对日益增长的需求,只需要简单的添加一个节点服
??我怎么看不出来和集群服务器有什么区别嘛?
??上课的时候,不要发出这种声音!急什么,下面自然会讲到的。再乱讲话就罚
Windows 2000的COM+组件就是被设计来用于在集群的Windows 2000服务器上实现商
业逻辑层的。每个服务器上都有一套同样的COM+组件,WIndows 2000自己来平衡各个服务器之
间的负载。使用Cluster Administrator可以很方便的配置集群服务器。
但是SQL 2000并不支持这样的集群。SQL 2000支持可更新的分布式视图(
distributed partitioned views ),用它来水平的将数据分割在一组服务器上。这使得用户
可以把一个数据库服务器添加到一组数据库服务器中,这些数据库相互合作,以提供和集群数
据库服务器相同的性能标准。虽然它们合作管理这些数据,但是它们之间是独立运作的。每个
服务器有独立的管理界面,(当然,你可以使用Enterprise Manager来管理一组服务器,但总
是作为一个Group中多个Server来管理的,并不能把它们当作是一个Server),也有各自的运
作规则,可以有其他的数据和进程,只是在联合起来处理一个工作的时候才联合在一起。
SQL 2000现在在多CPU的系统上可以有非常优异的性能(可以有8个或者更多的CPU)
,但是使用联合服务器,你几乎可以处理无限的负载。现在http://www.tpc.org 最高的tpcc
纪录就是12台8CPU的联合服务器完成的。(2月17日的测试结果,到现在仍然是最高的。)
数据库服务器和商业逻辑服务器不一样,运行商业逻辑的时候每个服务器都可以完
成相同的工作,即使一台服务器down了也不会对系统有什么影响。而数据库就不一样,你必须
把数据分散在不同的服务器上,否则对性能就没有什么提高了。而在这样的情况下,如果数据
库服务器不能用于处理独自的事务,那么就显得有些浪费。
OK,课间休息15min.下面我们讲重要的话题,如何使用联合服务器
1、建立Linked Server
SQL 7就有了的东东,打开你的Enterprise Manager,SecurityLinked Servers,
右键New Linked Server...,Server Type选SQL Server,然后填上用户名口令什么的
2、在每个服务器上建立表
-- On Server1:
CREATE TABLE Table_1_To_30000
(ID INT PRIMARY KEY
CHECK (ID BETWEEN 1 AND 29999),
... other fields
)
-- On Server2:
CREATE TABLE Table_30000_To_60000
(ID INT PRIMARY KEY
CHECK (ID BETWEEN 30000 AND 59999),
... other fields
)
-- On Server3:
CREATE TABLE Table_60000_To
(ID INT PRIMARY KEY
CHECK (ID > 60000),
... other fields
)
3、在每个服务器上建立视图
CREATE VIEW Partitioned_Views AS
SELECT * FROM MyDatabase.dbo.Table_1_To_30000
UNION ALL
SELECT * FROM Server2.MyDatabase.dbo.Table_30000_To_60000
UNION ALL
SELECT * FROM Server3.MyDatabase.dbo.Table_60000_To
4、Mission Accomplished
现在你就只要简单的使用这个视图就可以了,服务器自己知道把数据放到该放的地
方去,查询的时候也知道该从那里去取数据,是不是很easy呢?
SQL 2000的正式版和Beta2差别不大。主要的变化有两点,一是可以使用海量内存
标准的32位寻址方式是可以使用4G的内存,而且有2G的空间是保留给操作系统使用
的,所以说应用程序只有2G的空间可供使用(不过这个是可以在boot.ini里面设置的)。对于
大型的数据库应用,这些内存是不够的。所以MS使用了一个叫AWE的东东来访问海量内存。AWE
这名字不错吧,它是Address Windowing Extensions的缩写,以前我做的系统也叫这个名字,
不过是Auto Web Express。通过AWE API,SQL 2k Enterprise可以在Windows 2000 Advanced
Server上使用8GB的内存,在Data Center Server上可以使用64GB的内存。顺便说一句,
Data Center Server真是好东东,虽然我没有这么好的机器。
可更新的分布式视图实际上还是说的联合服务器。(请参见第七章)分布式视图是根据一个含有约束的列来分割到每个基表中去的。这个列中的每一个值都是能够被唯一的定位到基表中去的,而且不允许为空,必须是主键的一部分,也就是说,基表定义的范围不能有重复和遗漏。约束条件只允许这些操作符:BETWEEN, AND, OR, <, <=, >, >=, =
Log Shipping
简单的说,就是使用日志备份来完成数据同步。大家都知道,可以通过日志备份结
合其他备份来恢复数据,同样的,我们也可以通过频繁的日志备份、传递和恢复来做到数据同
请看下面的示意图。
下面介绍如何在Enterprise Manager中给一个名为BBS的数据库配置Log Shipping
1.建立一个共享目录以便访问备份的日志,如将C:MSSQL2000BackupBBS共享,
2.找到SQL Server GroupYour ServerManagementDatabase Maintenance Plans
,右键选择New Maintenance Plan...,在Select Database窗口选中BBS数据库,只能选择一
个哦,然后再选中下面那个后面写着Ship the transaction logs to other SQL Servers
(Log Shipping) 的check box,点击Next。
3.下面几项都不用管,一直到Specify the Log Shipping Destinations 窗口,写
4.点击Add按钮,在Add Destination Database 的窗口中选择目标服务器名和目标
数据库名。如果目标数据库已经存在,就选择Use Existing Database 就行了
5.后面就一路Next下去就可以了,选项都很简单,没什么好说的。最后点Finish,
服务器就开始做完全备份、初始化目标数据库、在目标服务器上建立Plan等步骤了。