??xml version="1.0" encoding="utf-8" standalone="yes"?> |上的MSSQL虚拟Lh也贵Q要想不让数据库容Q只好压~下数据库日志,或者删除数据库日志?br />
下面我给大家介绍一个方?/p>
1、打开企业理?br />
2、打开要处理的数据?br />
3、点击菜?gt;工具>SQL查询分析?br />
4、在输入H口里面输入: E序里面的方法:(x) 在虚拟主机的环境下,因ؓ(f)没有理员权限,只有数据库用权限,定时备䆾SQL数据?/p>
个比较麻?ch)的问题。解x\如下Q(仅对SQL2000有效) 导出全部数据到Excel也比较实用。下面提供的Ҏ(gu)可以导出库中的全部表Q也可以指定 几个表导出。注意:(x) package steeven; /** STATS = 10, NOFORMAT"; Exception{ tables)throws Exception{ public static void main(String[] args) throws Exception{
DUMP TRANSACTION [数据库名] WITH NO_LOG
BACKUP LOG [数据库名] WITH NO_LOG
DBCC SHRINKDATABASE([数据库名])
点击执行Q这样子数据库就操作成功了?/p>
压羃数据库日?br />
--1.清空日志
exec('DUMP TRANSACTION [' @dbname '] WITH NO_LOG')
--2.截断事务日志Q?br />
exec('BACKUP LOG [' @dbname '] WITH NO_LOG')
--3.收羃数据库文?如果不压~?数据库的文g不会(x)减小
exec('DBCC SHRINKDATABASE([' @dbname '])')
]]>
1. 利用T-SQL备䆾数据库到指定目录Q文件名Ҏ(gu)日期指定?br />
2. 利用Resin的定时功能,定时执行备䆾?br />
3. 用户定时下蝲备䆾q且删除q期备䆾?/p>
1. 因ؓ(f)是导出全部数据,在数据比较多的情况下慎用?br />
2. 理论上应该适用各种JDBC数据库,仅对SQL2000试q?br />
3. 对于B/S下蝲Q徏议不要在服务器上生成文gQ以免造成垃圾文g。直接从HTTP的Response中取得OutputStreamq行输出?br />
4. Excel操作的API请到q里下蝲Q?a >http://www.andykhan.com/jexcelapi/
import jxl.write.*;
import java.util.*;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.Types;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.DateFormat;
import java.io.*;
* <p>Title: 数据库备?lt;/p>
* <p>Description: 在Java中备份数据库</p>
* @author steeven
* @version 1.0
*/
public class DBackup{
Context ctx ;
public DBackup(Context ctx) {
this.ctx = ctx;
}
/**
* 备䆾SQL2000数据库到文gQ整个数据库备䆾
* 文g名后面将q加备䆾q月日。例如:(x)c:\dbBackup\mydb031109
* @param file 导出的文件名全\径。例如:(x)"c:\\dbBackup\\mydb"
*/
public void backup(String dbName, String file)throws SQLException{
String sql = "BACKUP DATABASE ["+dbName+"] TO DISK = N'";
sql += file + new SimpleDateFormat("yyMMdd").format(new Date());
sql += "' WITH NOINIT , NOUNLOAD , NAME = N'lvdong', NOSKIP ,
Statement stmt = ctx.getConnection().createStatement();
stmt.executeUpdate(sql);
}
/**
* 导出整个数据库到Excel
* @param conn 数据库连?br />
* @param out 输出Stream
*/
public static void db2Excel(Connection conn,OutputStream out)throws
db2Excel(conn,out,getTables(conn));
}
/**
* 导出数据库中指定的表名到Excel
* @param conn 数据库连?br />
* @param out 输出Stream
* @param tables 表名
* @throws Exception
*/
public static void db2Excel(Connection conn,OutputStream out,List
WritableWorkbook wb = jxl.Workbook.createWorkbook(out);
for (int i = 0; i < tables.size(); i++) {
WritableSheet sheet = wb.createSheet(tables.get(i).toString(),i);
writeSheet(sheet,tables.get(i).toString(),conn);
}
wb.write();
wb.close();
}
/**
* 导出表数据到Excel的sheet
*/
public static void writeSheet(
WritableSheet sheet,String table,Connection conn)
throws Exception
{
//取得所有表数据
String sql = "select * from "+DB.ESC1+table+DB.ESC2;
ResultSet rs = conn.createStatement().executeQuery(sql);
//Ҏ(gu)ResultSet的MetaData取得表头Q列敎ͼ列宽
java.sql.ResultSetMetaData meta = rs.getMetaData();
int n = meta.getColumnCount();
int row = 0;
WritableCellFormat fmt = new WritableCellFormat();
fmt.setBackground(jxl.format.Colour.YELLOW);
for (int i = 0; i < n; i++){
//导出表头
sheet.addCell(new Label(i, row, meta.getColumnLabel(i + 1),fmt));
//讑֮列宽
// sheet.setColumnView(i,meta.getColumnDisplaySize(i+1));
}
row++;
while(rs.next()){
for (int i = 0; i < n; i++){
//Ҏ(gu)列的cd军_Excel中对应的CellcdQ缺省ؓ(f)文本?br />
WritableCell cell ;
switch(meta.getColumnType(i+1)){
case Types.BIT:
case Types.BIGINT:
case Types.BOOLEAN:
case Types.DECIMAL:
case Types.FLOAT:
case Types.INTEGER:
case Types.NUMERIC:
case Types.REAL:
case Types.SMALLINT:
case Types.TINYINT:
double val = rs.getDouble(i+1);
if (rs.wasNull()) cell = new jxl.write.Blank(i,row);
cell = new jxl.write.Number(i, row, val);
break;
case Types.DATE:
case Types.TIME:
case Types.TIMESTAMP:
Date date = rs.getDate(i + 1);
if (rs.wasNull()) cell = new jxl.write.Blank(i,row);
else cell = new jxl.write.DateTime(i, row, date);
break;
default:
cell = new Label(i, row, rs.getString(i + 1));
} //end of switch
sheet.addCell(cell);
}//end of for each column
row++;
}//end of while(rs.next())
}
/**
* 从Connection的MetaData取得所有数据表的名U?br />
*/
public static List getTables(Connection conn)throws Exception{
ResultSet rs = conn.getMetaData().getTables(
null,null,null,new String[]{"Table"});
List list = new ArrayList();
while(rs.next())
list.add(rs.getString(3));
rs.close();
return list;
}
Connection conn = DB.getConn();
FileOutputStream out = new FileOutputStream("c:\\test.xls");
db2Excel(conn,out);
out.close();
conn.close();
}
}
关于虚拟L的数据库如何备䆾
]]>
]]>
GUID的唯一值是p机|卡的标识数加上一个CPU旉产生的唯一数而得到的。网卡制造商臛_在下一?00q内能保证网卡的唯一性?
UNIQUEIDENTIFIERg能像IDENTITY属性那栯动生。要想ؓ(f)你的表格对象产生UNIQUEIDENTIFIER|你必L定NEWID函数为column的缺省倹{?
例如Q如果你惌创徏一个表格列Z的跨国公司的所有子公司的尖端品的收入Qƈ且你希望指定一个GUID数据cdQ那么你可以键入Q?
CREATE TABLE NetRevenueTable
(UniqueColumn UNIQUEIDENTIFIER DEFAULT NEWID(),
Characters VARCHAR(10))
在数据库工具中,你要在数据库图表中或当你正在设计一个表格时做这件事情。ؓ(f)你想唯一定的column选择Is RowGUID。缺省情况将?newid())Q它自动产生RowGUID?
管在许多情况下你必M证表格对象的唯一性,但是如果你决定用UNIQUEIDENTIFIER数据cdQ请注意以下Ҏ(gu):(x)
1. q些值是长而且难懂的?
2. q些值是随机的,不带有对用户有意义的样式?
3. q些值在依靠q箋增加的值的应用E序中很难用?
4. q些值有16字节Q很大,因此用这些钥匙构建烦(ch)引会(x)更慢。 ?
全局唯一标识W?. NET中没有对应的数据cd。 这个列的|数据库系l会(x)自动生成。这个列Ҏ(gu)不需要你为它d数据Q只要把其他数据列添完提交他?x)自动生成数据?img src ="http://www.tkk7.com/zqli/aggbug/96653.html" width = "1" height = "1" />
]]>
标准化的数据库逻辑设计包括用多的、有怺关系的窄(jing)表来代替很多列的长数据表。下面是一些用标准化表的一些好处?
A:׃表窄(jing)Q因此可以排序和徏立烦(ch)引更?
B:׃多表Q所以多镞的索引成ؓ(f)可能
C:更窄(jing)更紧凑的索引
D:每个表中可以有少一些的索引Q因此可以提高insert update delete{的速度Q因些操作在索引多的情况下会(x)对系l性能产生很大的媄(jing)?
E:更少的空值和更少的多余|增加了数据库的紧凑性由于标准化Q所以会(x)增加了在获取数据时引用表的数目和光的连接关pȝ复杂性。太多的表和复杂的连接关pM(x)降低服务器的性能Q因此在q两者之间需要综合考虑?
定义h相关关系的主键和外来键时应该注意的事主要是Q用于连接多表的主键和参考的键要有相同的数据cd?
2 索引的设?
A:量避免表扫?
(g)查你的查询语句的where子句Q因是优化器重要x的地斏V包含在where里面的每一列(column)都是可能的侯选烦(ch)引,辑ֈ最优的性能Q考虑在下面给出的例子Q对于在where子句中给Zcolumn1q个列?
下面的两个条件可以提高烦(ch)引的优化查询性能Q?
W一Q在表中的column1列上有一个单索引
W二Q在表中有多索引Q但是column1是第一个烦(ch)引的?
避免定义多烦(ch)引而column1是第二个或后面的索引Q这L(fng)索引不能优化服务器性能
例如Q下面的例子用了pubs数据库?
SELECT au_id, au_lname, au_fname FROM authors
WHERE au_lname = ’White?
按下面几个列上徏立的索引会(x)是对优化器有用的索引
?au_lname
?au_lname, au_fname
而在下面几个列上建立的烦(ch)引将不会(x)对优化器起到好的作用
?au_address
?au_fname, au_lname
考虑使用H的索引在一个或两个列上Q窄(jing)索引比多索引和复合烦(ch)引更能有效。用H的索引Q在每一上
会(x)有更多的行和更少的烦(ch)引别(相对与多索引和复合烦(ch)引而言Q,q将推进pȝ性能?
对于多列索引QSQL Serverl持一个在所有列的烦(ch)引上的密度统计(用于联合Q和在第一个烦(ch)引上?
histogramQ柱状图Q统计。根据统计结果,如果在复合烦(ch)引上的第一个烦(ch)引很被选择使用Q那么优化器对很多查询请求将不会(x)使用索引?
有用的烦(ch)引会(x)提高select语句的性能Q包括insert,uodate,delete?
但是Q由于改变一个表的内容,会(x)影响索引。每一个insert,update,delete语句会(x)使性能下降一些。实验表明,不要在一个单表上用大量的索引Q不要在׃n的列上(指在多表中用了参考约束)使用重叠的烦(ch)引?
在某一列上(g)查唯一的数据的个数Q比较它与表中数据的行数做一个比较。这是数据的选择性,q比较结果将?x)帮助你军_是否某一列作Z选的索引列,如果需要,建哪一U烦(ch)引。你可以用下面的查询语句q回某一列的不同值的数目?
select count(distinct cloumn_name) from table_name
假设column_name是一?0000行的表,则看column_nameq回值来军_是否应该使用Q及(qing)应该使用什么烦(ch)引?
Unique values Index
5000 Nonclustered index
20 Clustered index
3 No index
镞烦(ch)引和非镞索引的选择
<1:>镞烦(ch)引是行的物理序和烦(ch)引的序是一致的。页U,低层{烦(ch)引的各个U别上都包含实际的数据页。一个表只能是有一个镞索引。由于update,delete语句要求相对多一些的L作,因此镞烦(ch)引常常能加速这L(fng)操作。在臛_有一个烦(ch)引的表中Q你应该有一个镞索引?
在下面的几个情况下,你可以考虑用镞索引Q?
例如Q? 某列包括的不同值的个数是有限的Q但是不是极的Q?
֮表的州名列有50个左右的不同州名的羃写|可以使用镞烦(ch)引?
例如Q? 对返回一定范围内值的列可以用镞索引Q比如用between,>,>=,<,<={等来对列进行操作的列上?
select * from sales where ord_date between ?/1/93? and ?/1/93?
例如Q? Ҏ(gu)询时q回大量l果的列可以使用镞烦(ch)引?
SELECT * FROM phonebook WHERE last_name = ’Smith?
当有大量的行正在被插入表中时Q要避免在本表一个自然增长(例如Qidentity列)的列上徏立镞索引。如果你建立了镞的烦(ch)引,那么insert的性能׃(x)大大降低。因为每一个插入的行必d表的最后,表的最后一个数据页?
当一个数据正在被插入Q这时这个数据页是被锁定的)Q所有的其他插入行必ȝ待直到当前的插入已经l束?
一个烦(ch)引的叶中包括实际的数据页Qƈ且在盘上的数据늚ơ序是跟镞烦(ch)引的逻辑ơ序一L(fng)?
<2:>一个非镞的索引是行的物理ơ序与烦(ch)引的ơ序是不同的。一个非镞烦(ch)引的叶包含了指向行数据늚指针?
在一个表中可以有多个非镞索引Q你可以在以下几个情况下考虑使用非镞索引?
在有很多不同值的列上可以考虑使用非镞索引
例如Q一个part_id列在一个part表中
select * from employee where emp_id = ’pcm9809f?
查询语句中用order by 子句的列上可以考虑使用镞烦(ch)?
3 查询语句的设?
SQL Server优化器通过分析查询语句Q自动对查询q行优化q决定最有效的执行方案。优化器分析查询语句来决定那个子句可以被优化Qƈ针对可以被优化查询的子句来选择有用的烦(ch)引。最后优化器比较所有可能的执行Ҏ(gu)q择最有效的一个方案出来?
在执行一个查询时Q用一个where子句来限制必d理的行数Q除非完全需要,否则应该避免在一个表中无限制地读q处理所有的行?
例如下面的例子,
select qty from sales where stor_id=7131
是很有效的比下面q个无限制的查询
select qty from sales
避免l客L(fng)最后数据选择q回大量的结果集。允许SQL Serverq行满它目的的函数限制l果集的大小是更有效的?
q能减少|络I/Oq能提高多用L(fng)相关q发时的应用E序性能。因Z化器x的焦点就是where子句的查询,以利用有用的索引。在表中的每一个烦(ch)引都可能成ؓ(f)包括在where子句中的侯选烦(ch)引。ؓ(f)了最好的性能可以늅下面的用于一个给定列column1的烦(ch)引?
W一Q在表中的column1列上有一个单索引
W二Q在表中有多索引Q但是column1是第一个烦(ch)引的列不要在where子句中用没有column1列烦(ch)引的查询语句Qƈ避免在where子句用一个多索引的非W一个烦(ch)引的索引?
q时多烦(ch)引是没有用的?
For example, given a multicolumn index on the au_lname, au_fname columns of the authors table in
the pubs database,
下面q个query语句利用了au_lname上的索引
SELECT au_id, au_lname, au_fname FROM authors
WHERE au_lname = ’White?
AND au_fname = ’Johnson?
SELECT au_id, au_lname, au_fname FROM authors
WHERE au_lname = ’White?
下面q个查询没有利用索引Q因Z使用了多索引的非W一个烦(ch)引的索引
SELECT au_id, au_lname, au_fname FROM authors
WHERE au_fname = ’Johnson’ ?
]]>
8.1.1 索引的概?/span>
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识q些值的数据늚逻辑指针清单。烦(ch)引是依赖于表建立的,它提供了数据库中~排表中数据的内部方法。一个表的存储是׃部分l成的,一部分用来存放表的数据面Q另一部分存放索引面。烦(ch)引就存放在烦(ch)引页面上Q通常Q烦(ch)引页面相对于数据面来说得多。当q行数据(g)索时Q系l先搜烦(ch)索引面Q从中找到所需数据的指针,再直接通过指针从数据页面中d数据。从某种E度上,可以把数据库看作一本书Q把索引看作书的目录Q通过目录查找书中的信息,昄较没有目录的书方ѝ快捗?
索引和关键字?qing)约束有较大的联pR关键字可以分ؓ(f)两类Q一U是逻辑关键字,卛_ “数据库基础章”节中介l的Q另一U是物理关键字,它用来定义烦(ch)引的列,也即索引?br />
8.1.2 索引的结?/span>
Q?Q?索引的B-?wi)结?br />SQL Server 中的索引是以B-?wi)结构来l护的,如图8-1 所C。B-?wi)是一个多层次、自l护的结构。一个B-?wi)包括一个顶层,UCؓ(f)根节点(Root NodeQ;0 到多个中间层QIntermediateQ;一个底层(Level 0Q,底层中包括若q叶子节点(Leaf NodeQ。在?8-1 中,每个Ҏ(gu)代表一个烦(ch)引页Q烦(ch)引列的宽度越大,B-?wi)的深度深Q即层次多Q?br />
d记录所要访问的索引就多。也是_(d)数据查询的性能随索引列层ơ数目的增加而降低??-1 索引的B-?wi)结?br />在SQL Server 的数据库中按存储l构的不同将索引分ؓ(f)两类Q簇索引QClustered IndexQ和非簇索引QNonclustered IndexQ?
Q?Q?烦(ch)引簇索引对表的物理数据页中的数据按列q行排序Q然后再重新存储到磁盘上Q即烦(ch)引与数据是Z体,的它的叶节点中存储的是实际的数据。由于簇索引对表中的数据一一q行了排序,因此用簇索引查找数据很快。但׃烦(ch)引将表的所有数据完全重新排列了Q它所需要的I间也就特别大,大概相当于表中数据所占空间的120% 。表的数据行只能以一U排序方式存储在盘上,所以一个表只能有一个簇索引?
Q?Q?非簇索引非簇索引h与表的数据完全分ȝl构Q用非烦(ch)引不用将物理数据中的数据按列排序。非烦(ch)引的叶节点中存储了组成非烦(ch)引的关键字的值和行定位器。行定位器的l构和存储内容取决于数据的存储方式。如果数据是以簇索引方式存储的,则行定位器中存储的是烦(ch)引的索引键;如果数据不是以簇索引方式存储的,q种方式又称为堆存储方式QHeap StructureQ,则行定位器存储的是指向数据行的指针。非烦(ch)引将行定位器按关键字的值用一定的方式排序Q这个顺序与表的行在数据中的排序是不匹配的。由于非烦(ch)引用烦(ch)引页存储因此它比烦(ch)引需要更多的存储I间且检索效率较低但一个表只能Z个簇索引Q当用户需要徏立多个烦(ch)引时需要用非烦(ch)引了。从理论上讲Q一个表最多可以徏249 个非烦(ch)引?br />
]]>
Sql 中日期函数的比较
作?corin 日期:2006-06-15
字体大小: ??大?
下午公司的项目完成了?x)员pȝQ会(x)员可以后台设|到期时_(d)
大概字段有PostDate,EndDate标志注册旉和到期时_(d)
上午把到期时_(d)剩余天数?4时d和和注册的用户多完成了,用了一个函数DateDitt
(g)?4时d和注册用L(fng)Sql语句Q?/p>
Case "Login":strSql=strSql+HZ.iif(Instr(strSql,"Where")>0," AND DateDiff(hh,LastDate,getdate())<25"," Where DateDiff(hh,LastDate,getdate())<25")
Case "Reg":strSql=strSql+HZ.iif(Instr(strSql,"Where")>0," AND DateDiff(hh,PostDate,getdate())<25"," Where DateDiff(hh,PostDate,getdate())<25")
其时已经实现了会(x)员到期自动红子提C,后来要完成搜索就是可以把d期还剩余15天的?x)员多列丑և来,用DateDiff函数调试了半天多不正,刚开始以为是?”的问题Q?后来(g)查了发现没有问题基本认是DateDiff函数问题Q可是上面检时间的时候正,而且Sql中也可是使用q个函数Q郁闷大概调试了2个小旉题依然没有解冻I
偶然惛_了DateAdd函数改SQL语句如下Q?/p>
Case "EndDate":strSql=strSql+HZ.iif(Instr(strSql,"Where")>0," AND EndDate < DateAdd(d,15,getdate())"," Where EndDate < DateAdd(d,15,getdate())")
调试通过Q呼呼奇怪的问题后台ȝ上搜索下也没有满意的{案Q只是找到这样一D?/p>
Select member_number, first_name, last_name FROM members
Where DATEDIFF(yy,datofbirth,GETDATE()) > 21
应改?
Select member_number, first_name, last_name FROM members
Where dateofbirth < DATEADD(yy,-21,GETDATE())
卻I(x)M对列的操作都导致表扫描Q它包括数据库函数、计表辑ּ{等Q查询时要尽可能操作移至等号右辏V?/p>
另外应该指出Q一个存储过E的最大尺ؓ(f)128MQ?用户定义的存储过E必d建在当前数据库中?br /> 下面给出几个例子,用来详细介绍如何创徏包含有各U保留字的存储过E?br />
关于索引Q推荐{载的q篇文章
http://blog.csdn.net/dutguoyi/archive/2006/01/10/575617.aspx
改善SQL语句的效?br />http://community.csdn.net/Expert/topic/5087/5087396.xml?temp=.345669
数据量很大怎样加快索检速度
http://community.csdn.net/Expert/topic/5058/5058320.xml?temp=.1229517
索引建立Ҏ(gu)的区?br />http://community.csdn.net/Expert/topic/5068/5068154.xml?temp=.3010218
频繁插入删除数据需要更新烦(ch)?br />http://community.csdn.net/Expert/topic/4937/4937910.xml?temp=.8428614
试了一下sql server 2005 全文(g)?br />http://community.csdn.net/Expert/topic/4878/4878430.xml?temp=.6049311
其他关于效率的高频问?/p>
判断一个表的数据不在另一个表中最优秀Ҏ(gu)Q?br />http://community.csdn.net/Expert/topic/5038/5038742.xml?temp=.4704553
删除千万U表中重复记录的办法
http://community.csdn.net/Expert/topic/5089/5089261.xml?temp=.7907068
数据库数据查询变得不正常cd问题
大数据量Q稳定运行一D|候以后无法得到查询结果?br />http://community.csdn.net/Expert/topic/4810/4810464.xml?temp=9.014529E-02
信息时代是一个数据ؓ(f)王的时代。信息在企业的决{、经营和理中发挥的重要作用Q不但改变了企业评估信息的方式,使各企业把信息作ZU超其竞争Ҏ(gu)的战略资产,而且也正在迅速改变企业的商业q作模式Q从发展q猛的中型公司到拥有广泛资源的全球跨国企业。但是信息时代的来(f)也给企业带来了新问题--产生量数据、存储v量数据、访问v量数据。这是因为在互联|商业化后,企业希望通过互联|ؓ(f)客户提供全年无休的服务,同时企业也希望借由互联|汇集、分析一切与客户相关的信息,借此为客h供更好的服务。此外,数据信息存储讑֤的容量不断增加,h却不断下滑,造成了基于Internet和Intranet的电(sh)子商务、企业资源计划(ERPQ、数据仓库、联Z务处理(OLTPQ等数据密集型应用炙手可热,|页数据信息Q视频图像信息和静态数据等成ؓ(f)了企业的关键性业务。数据的爆炸性增长不仅要求企业信息系l能存储日益增涨的数据,合理地管理数据,更重要的是,企业信息pȝ能保证需要数据的q速得到相x据。这l企业信息数据的存储、共享和安全提出了更高的要求Q企业信息数据的存储成ؓ(f)了企业的核心d?
在传l的企业数据信息存储架构上,信息存储装置大都是个别依附在服务器后面的信息孤岛Q彼此间无法作有效的联结。若要存取某台服务器后面信息存储讑֤上的信息Q必通过区域|络?qing)该台服务器Q这h占据区域|络的带宽,又浪Ҏ(gu)务器CPU的资源。如果要在不同应用程序之间共享数据,q必M独立的信息存储设备中Q将数据复制到另外的信息存储讑֤。这造成了数据用上的时间差。从商业角度来看Q时间差使得做决{的人,必须依照不正和不即时的信息作决{。当?dng)理分散在各地的数据储存pȝQ也是一个非常耗费人力的过E。特别不同信息存储品彼此间的整合性不高,使用者界面亦不尽相同Q企业需要聘误多熟(zhn)不同品和q_Ҏ(gu)的员工Q对个别的信息存储系l进行监控及(qing)理工作。此外,传统的数据信息存储架构,是与所支持的应用程序密切结合的Q因此当应用E序有所更动Ӟ数据信息存储架构必须随之调整?
因此建立一个具有大规模可~性的?4×7q箋可用性的、跨q_的、能够提供多U信息处理系l的q接、信息保护、信息管理、信息分享的企业信息存储pȝQƈ使之成ؓ(f)|络上的一U公用设施,可在整个|络中ؓ(f)企业的所有应用提供无限的性能和容量,成ؓ(f)了企业整体战略的重要l成部分。显?dng)传统的数据信息存储架构面对这L(fng)要求已显得力不从心了Q这时新的技?-|络附加信息存储QNetwork Attached StorageQNASQ及(qing)信息存储区域|络QStorage Area NetworkQSANQ便应运而生了?
通俗地讲QNAS是一个具有很大信息存储容量的讑֤Q它通过集线器(HUBQ或交换机(SWITCHQ直接连在网l上Qɼ盘I间的扩展如同在|络上添加打印机一L(fng)单方ѝNAS讑֤的物理位|很灉|Q既可以可放|在数据中心的工作组内,也可以放在其它地点,通过物理链\与网l连接v来。NAS讑֤集成了信息存储器Ӟ例如盘驱动器阵列、CD或DVD驱动器、磁带驱动器或可Ud的信息存储介质)和简易服务器Q具有RAID功能和完全的文g服务器功能。集成在NAS讑֤中的易服务器可以有关信息存储的功能与应用服务器执行的其他功能分隔开Q允许用h需应用服务器的q预Q就可以在网l上存取数据。这h可减CPU的开销Q也能显著改善性能。一般认为,NASh安装理方便、h(hun)格^民化{优点,是中企业信息存储的优选方案。而SANQ在最Ua(b)的意义上Q是一个独立于服务器网l系l之外的Q几乎拥有无限信息存储能力的高速信息存储网l。特Ҏ(gu)Z光纤通道技术(F(tun)iber ChannelQ的늼Q交换机和集U器Q将很多的信息存储设备连接v来,再与有很多不同服务器l成的网l相q接Q以多点对多点的方式q行理。SAN不但h高传输速度Q?00MbpsQ、远传输距离Q?0KmQ和支持数量众多的设备等优点Q更为重要的是,SAN使服务器和存储器之间的连接方式发生了Ҏ(gu)性的变革。与传统服务器与盘阵列之间的主/从关pM同,光纤通道SAN上的所有设备均处于q等的地位。多台服务器以及(qing)多个存储器可以配|在同一个SAN上,其中M一台服务器均可存取|络中的M一个信息存储设备,真正实现了在不同的硬件和操作q_之间异构信息存储讑֤和数据的整合Q是C代企业信息存储架构的L?
NAS和SAN的出玎ͼ再次体现了把信息存储作ؓ(f)专门讑֤的趋ѝ而在未来的几q内Q无论NASq是SANQ都呈现快速成长的局面。IDC预测QNAS的市模将?8q的9亿美元,成长?002q的105亿美元。Datamation则预伎ͼSAN的市模将?8q的30亿美元,成长?002q的114亿美元。但是,SAN的主要功能是高速信息存储,而NAS则偏重于文g׃n。这好比SAN是交通工具里的飞机,而NAS则是火RQ二者各有特点,互不替代?br />