友好连接

2008年11月24日星期一

SQL Server 用户自定义的数据库修复 new

本文讲解了用户如何自定义的数据库修复。

一、自动应用重做日志




1、 利用SET AUTORECOVERY命令自动应用重做日志,完成对数据文件的修复操作。

SQL>STARTUP MOUNT:启动实例并加载数据库。

SQL>SET AUTORECOVERY ON:启用重做日志自动应用功能。



SQL>RECOVER DATABASE:恢复指定表空间、数据文件或整个数据库。



SQL>ALTER DATABASE OPEN:完成恢复后打开数据库。



2、 利用RECOVERY AUTOMATIC命令自动应用重做日志,完成对数据文件的修复操作。

SQL>STARTUP MOUNT:启动实例并加载数据库。

SQL>RECOVER AUTOMATIC DATABASE。

SQL>ALTER DATABASE OPEN:完成恢复后打开数据库。



二、 不归档模式下的数据库介质恢复

1、 将数据库恢复到原来的位置上。



SQL>SHUTDOWN IMMEDIATE 如果数据库仍然处于打开状态,关闭数据库;将数据库文件恢复到原来的位置上,利用最近一次建立的一致性完全备份对整个数据库进行恢复,必须对所有的数据文件与控制文件进行修复。


SQL>RECOVER DATABASE UNTIL CANCEL
SQL>CANCEL
SQL>ALTER DATABASE OPEN RESETLOGS;
将当前重做日志顺序号设置为1。



2、 将数据库恢复到新的位置上。

SQL>SHUTDOWN IMMEDIATE:如果数据库仍然处于打开状态,关闭数据库;将数据库文件恢复到新的位置上,利用最近一次建立的一致性完全备份对整个数据库进行恢复,必须对所有的数据文件与控制文件进行修复;对初始化参数文件中的CONTROL_FILES参数进行编辑,使它执行保存在新位置中修复后的控制文件。


SQL>STARTUP MOUNT:如果修复后的数据库文件处于新的位置,必须利用ALTER DATABASE RENAME FILE语句对控制文件进行修改,使它指向新位置中修复后的数据文件。如:

SQL>ALTER DATABASE RENAME FILE
‘I: ora9ioradatasystem01.dbf’ TO ‘K: oracleoradatasystem01.dbf’;
SQL>RECOVER DATABASE UNTIL CANCEL
SQL>CANCEL
SQL>ALTER DATABASE OPEN RESETLOGS;
将当前重做日志顺序号设置为1。


三、 归档模式下的完全介质恢复

1、 关闭状态下的完全恢复。



SQL>SHUTDOWN ABORT(如果数据库处于打开状态,将它强行关闭):将数据文件恢复到原来的位置上,如果介质故障无法排除,需要将数据文件恢复到其它位置上;利用备份修复丢失或损坏的数据文件,也可利用ALTER DATABASE CREATE DATAFILE 语句重建一个空白的数据文件替换对视或损坏的数据文件。


SQL>STARTUP MOUNT:如果修复后的数据文件不在原来的位置上,需要使用ALTER DATABASE RENAME FILE …TO …语句在控制文件中更新它们的信息。

SQL>SELECT name,status FROM V$DATAFILE;
查询数据文件的名称和状态。
SQL>ALTER DATABASE DATAFILE … ONLINE;
将脱机数据文件改未联机。
SQL>RECOVER DATABASE
或 SQL>RECOVER TABLESPACE users
或 SQL>RECOVER DATAFILE ‘I: ora9ioradatausers0.dbf;
SQL>ALTER DATABASE OPEN;


2、 打开状态下的完全介质恢复。



SQL>SELECT d.file# f#,d.name,d.status,
h.status from v$datafile d,v$datafile_header h
WHERE d.file#=h.file#;
查询哪些数据文件被自动设置为脱机状态;
SQL>ALTER TABLESPACE users OFFLINE TEMPORARY;

将包含损坏数据文件的表空间设置为脱机状态;将数据文件恢复到原来的位置上,如果介质故障无法排除,需要将数据文件恢复到其它位置上;利用备份修复丢失或损坏的数据文件;如果修复后的数据文件不在原来的位置上,需要使用ALTER DATABASE RENAME FILE …TO …语句在控制文件中更新它们的信息。

SQL>RECOVER TABLESPACE users AUTOMATIC
对包含损坏数据文件的脱机表空间进行恢复;
SQL>ALTER TABLESPACE users ONLINE;

四、 归档模式下的不完全介质恢复


1、 不完全恢复的操作准则:


在恢复前后都对数据库进行完全备份。

完成不完全介质恢复后,检查数据库是否已经恢复到了目标时刻下的状态。



完成不完全介质恢复后,将归档重做日志文件移动到其它位置保存。



2、 基于时间的不完全恢复:

对数据库进行一次完全备份,包括控制文件和所有的联机重做日志文件。


SQL>SHUTDOWN ABORT:确定不完全介质恢复的目标时间,即你需要将数据库恢复到哪个时刻下的状态,然后确定需要使用哪些备份来对数据进行修复,数据库修复所使用的控制文件备份应当能够正确反映出目标时刻下数据库的物理结构,所使用的数据文件备份应当是在目标时刻之前创建的,而且必须修复所有的数据文件,如果没有在目标时刻之前建立的数据文件备份,需要重新创建空白的数据文件。

如果在数据库中包含在目标时刻之后建立的数据文件,不要对这个数据文件进行修复,因为在完成不完全恢复后的数据库中根本不应当存在这个数据文件;将数据文件恢复到原来的位置上,如果介质故障无法排除,则恢复到其它位置上;利用选定的备份文件修复所有的控制文件和数据文件。

SQL>STARTUP MOUNT 启动实例并加载数据库;如果修复后的数据文件不在它们原来的位置上,需使用ALTER DATABASE RENAME FILE … TO …语句在控制文件中更新它们的信息。

SQL>SELECT name,status FROM V$DATAFILE;
确定所有数据文件都处于联机
SQL>ALTER DATABASE DATAFILE … ONLINE;
将数据文件恢复为联机;
SQL>RECOVER DATABASE UNTIL TIME ‘2004-02-01:12:30:30’
如果控制文件是利用备份修复的,
必须在RECOVER名利中指定USING BACKUP CONTROLFILE子句;
SQL>ALTER DATABASE OPEN RESETLOGS;


立即对数据库进行一次完全备份。

3、 基于撤销的不完全恢复。

SQL>RECOVER DATABASE UNTIL CANCEL:其它步骤同基于时间的不完全恢复。



4、 基于SCN的不完全恢复。

在进行基于SCN的不完全恢复时,oracle会在应用了所有具有小于等于指定SCN的事务的重做记录之后终止恢复过程。


RESETLOGS选项在如下三种情况下,必须使用RESETLOGS选项打开数据库:



1、 在执行任何类型的不完全介质恢复之后;

2、 在使用备份修复控制文件后(在RECOVER命令中使用USING BACKUP CONTROLFILE子句);


在没有联机重做日志文件备份的情况下对不归档数据库进行完全恢复之后。
转自:http://www.cnblogs.com/junzhongxu/

SQL Server各种日期计算方法之一

通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期。


  在使用本文中的例子之前,你必须注意以下的问题。大部分可能不是所有例子在不同的机器上执行的结果可能不一样,这完全由哪一天是一个星期的第一天这个设置决定。第一天(DATEFIRST)设定决定了你的系统使用哪一天作为一周的第一天。所有以下的例子都是以星期天作为一周的第一天来建立,也就是第一天设置为7。假如你的第一天设置不一样,你可能需要调整这些例子,使它和不同的第一天设置相符合。你可以通过@@DATEFIRST函数来检查第一天设置。
  
  为了理解这些例子,我们先复习一下DATEDIFF和DATEADD函数。DATEDIFF函数计算两个日期之间的小时、天、周、月、年等时间间隔总数。DATEADD函数计算一个日期通过给时间间隔加减来获得一个新的日期。要了解更多的DATEDIFF和DATEADD函数以及时间间隔可以阅读微软联机帮助。
  
  使用DATEDIFF和DATEADD函数来计算日期,和本来从当前日期转换到你需要的日期的考虑方法有点不同。你必须从时间间隔这个方面来考虑。比如,从当前日期到你要得到的日期之间有多少时间间隔,或者,从今天到某一天(比如1900-1-1)之间有多少时间间隔,等等。理解怎样着眼于时间间隔有助于你轻松的理解我的不同的日期计算例子。


  
  一个月的第一天
  
  第一个例子,我将告诉你如何从当前日期去这个月的最后一天。请注意:这个例子以及这篇文章中的其他例子都将只使用DATEDIFF和DATEADD函数来计算我们想要的日期。每一个例子都将通过计算但前的时间间隔,然后进行加减来得到想要计算的日期。
  
  这是计算一个月第一天的SQL 脚本:

  SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
  
  我们把这个语句分开来看看它是如何工作的。最核心的函数是getdate(),大部分人都知道这个是返回当前的日期和时间的函数。下一个执行的函数DATEDIFF(mm,0,getdate())是计算当前日期和“1900-01-01 00:00:00.000”这个日期之间的月数。记住:时期和时间变量和毫秒一样是从“1900-01-01 00:00:00.000”开始计算的。这就是为什么你可以在DATEDIFF函数中指定第一个时间表达式为“0”。下一个函数是DATEADD,增加当前日期到“1900-01-01”的月数。通过增加预定义的日期“1900-01-01”和当前日期的月数,我们可以获得这个月的第一天。另外,计算出来的日期的时间部分将会是“00:00:00.000”。
  
  这个计算的技巧是先计算当前日期到“1900-01-01”的时间间隔数,然后把它加到“1900-01-01”上来获得特殊的日期,这个技巧可以用来计算很多不同的日期。下一个例子也是用这个技巧从当前日期来产生不同的日期。

  本周的星期一
  
  这里我是用周(wk)的时间间隔来计算哪一天是本周的星期一。
  
  SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
  
  一年的第一天
  
  现在用年(yy)的时间间隔来显示这一年的第一天。
  
  SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
  
  季度的第一天
  
  假如你要计算这个季度的第一天,这个例子告诉你该如何做。
  
  SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
  
  当天的半夜
  
  曾经需要通过getdate()函数为了返回时间值截掉时间部分,就会考虑到当前日期是不是在半夜。假如这样,这个例子使用DATEDIFF和DATEADD函数来获得半夜的时间点。
  
  SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
  
  深入DATEDIFF和DATEADD函数计算
  
  你可以明白,通过使用简单的DATEDIFF和DATEADD函数计算,你可以发现很多不同的可能有意义的日期。
  
  目前为止的所有例子只是仅仅计算当前的时间和“1900-01-01”之间的时间间隔数量,然后把它加到“1900-01-01”的时间间隔上来计算出日期。假定你修改时间间隔的数量,或者使用不同的时间间隔来调用DATEADD函数,或者减去时间间隔而不是增加,那么通过这些小的调整你可以发现和多不同的日期。
  
  这里有四个例子使用另外一个DATEADD函数来计算最后一天来分别替换DATEADD函数前后两个时间间隔。
转自:http://www.cnblogs.com/junzhongxu/

运行SQL Server的计算机之间移动数据库

本文分步介绍了如何在运行SQL Server的计算机之间移动Microsoft SQL Server用户数据库和大多数常见的SQL Server组件。本文中介绍的步骤假定您不移动master、model、tempdb或msdb这些系统数据库。这些步骤为您传输登录以及master和msdb数据库中包含的大多数常见组件提供了多个选项。

注意:支持将数据从SQL Server 2000迁移到Microsoft SQL Server 2000(64位)。您可以将一个32位数据库附加到一个64位数据库上,方法是:使用sp_attach_db系统存储过程或sp_attach_single_file_db系统存储过程,或者使用32位企业管理器中的备份和还原功能。您可以在SQL Server的32位和64位两种版本之间来回移动数据库。您还可以使用同样的方法从SQL Server 7.0迁移数据。但是,不支持将数据从SQL Server 2000(64位)降级到SQL Server 7.0。下面分别介绍这几种方法。



如果您使用的是SQL Server 2005



您可以使用相同的方法从SQL Server 7.0或SQL Server 2000迁移数据。但是,Microsoft SQL Server 2005中的管理工具与SQL Server 7.0或SQL Server 2000中的管理工具有所不同。您应该使用SQL Server Management Studio(而不是SQL Server企业管理器)以及SQL Server导入和导出向导(DTSWizard.exe)(而不是数据转换服务导入和导出数据向导)。



备份和还原

在源服务器上备份用户数据库,然后将用户数据库还原到目标服务器上。在备份过程中时可能有人使用数据库。如果用户在备份完成后对数据库执行INSERT、UPDATE或DELETE语句,则备份中不会包含这些更改。如果您必须传输所有更改,那么,假如您既执行事务日志备份又执行完整数据库备份,您可以以尽可能短的停止时间来传输这些更改。



1.在目标服务器上还原完整数据库备份,并指定WITH NORECOVERY选项。


注意:为防止对数据库做进一步的修改,请指导用户在源服务器上退出数据库活动。



2.执行事务日志备份,然后使用WITH RECOVERY选项将事务日志备份还原到目标服务器上。停止时间仅限于事务日志备份和恢复的时间。


◆目标服务器上的数据库将与源服务器上的数据库大小相同。要减小数据库的大小,您必须在执行备份前压缩源数据库的大小,或者在完成还原后压缩目标数据库的大小。



◆如果您将数据库还原到的文件位置不同于源数据库的文件位置,则必须指定WITH MOVE选项。例如,在源服务器上,数据库位于D:MssqlData文件夹中。目标服务器没有D驱动器,因而您需要将数据库还原到C:MssqlData文件夹。有关如何将数据库还原到其他位置的更多信息,请查看相关资料。

◆如果您想覆盖目标服务器上的一个现有数据库,则必须指定WITH REPLACE选项。


◆源服务器和目标服务器上的字符集、排序顺序和Unicode整序可能必须相同,具体取决于您要还原到SQL Server的哪种版本。有关更多信息,请参阅本文中的“关于排序规则的说明”一节。



Sp_detach_db和Sp_attach_db存储过程

要使用sp_detach_db和sp_attach_db这两个存储过程,请按下列步骤操作:



1.使用sp_detach_db存储过程分离源服务器上的数据库。您必须将与数据库关联的.mdf、.ndf和.ldf这三个文件复制到目标服务器上。参见下表中对文件类型的描述: 


2.使用sp_attach_db存储过程将数据库附加到目标服务器上,并指向您在上一步骤中复制到目标服务器的文件。



◆分离数据库后将无法访问该数据库,并且复制文件时也无法使用该数据库。在进行分离的那一时刻数据库中包含的所有数据都被移动。



◆在您使用附加或分离方法时,两个服务器上的字符集、排序顺序和Unicode整序都必须相同。有关更多信息,请参阅本文中的“关于排序规则的说明”一节。

关于排序规则的说明



如果您使用备份和还原或附加和分离方法在两个SQL Server 7.0服务器之间移动数据库,则两个服务器上的字符集、排序顺序和Unicode整序都必须相同。如果您将数据库从SQL Server 7.0移到SQL Server 2000,或者在不同的SQL Server 2000服务器之间移动数据库,则数据库将保留源数据库的整序。这意味着,如果运行SQL Server 2000的目标服务器的整序与源数据库的整序不同,则目标数据库的整序也将与目标服务器的master、model、tempdb和msdb数据库的整序不同。

第1步:导入和导出数据:(在SQL Server数据库之间复制对象和数据)

您可以使用数据转换服务导入和导出数据向导来复制整个数据库或有选择地将源数据库中的对象和数据复制到目标数据库。在传输过程中,可能有人在使用源数据库。如果在传输过程中有人在使用源数据库,您可能会看到传输过程中出现一些阻滞现象。

◆在您使用导入和导出数据向导时,源服务器与目标服务器的字符集、排序顺序和整序不必相同。

◆因为源数据库中未使用的空间不会移动,所以目标数据库不必与源数据库一样大。同样,如果您只移动某些对象,则目标数据库也不必与源数据库一样大。



◆SQL Server 7.0数据转换服务可能无法正确地传输大于64KB的文本和图像数据。但SQL Server 2000版本的数据转换服务不存在此问题。



第2步:如何传输登录和密码:



如果您不将源服务器中的登录传输到目标服务器,当前的SQL Server用户就无法登录到目标服务器。目标服务器上的登录的默认数据库可能与源服务器上的登录的默认数据库不同。您可以使用sp_defaultdb存储过程来更改登录的默认数据库。


第3步:如何解决孤立用户:


在您向目标服务器传输登录和密码后,用户可能还无法访问数据库。登录与用户是靠安全识别符(SID)关联在一起的;在您移动数据库后,如果SID不一致,SQL Server可能会拒绝用户访问数据库。此问题称为孤立用户。如果您使用SQL Server 2000 DTS传输登录功能来传输登录和密码,就可能会产生孤立用户。此外,被允许访问与源服务器处于不同域中的目标服务器的集成登录帐户,也会导致出现孤立用户。



1.查找孤立用户。在目标服务器上打开查询分析器,然后在您移动的用户数据库中运行以下代码:exec sp_change_users_login 'Report'

此过程将列出任何未链接到一个登录帐户的孤立用户。如果没有列出用户,请跳过第2步和第3步,直接进行第4步。

2.解决孤立用户问题。如果一个用户是孤立用户,数据库用户可以成功登录到服务器,但却无权访问数据库。如果您尝试向数据库授予登录访问权,则会因该用户已经存在而出现下列错误消息:

Microsoft SQL-DMO (ODBC SQLState:42000)



错误15023:当前数据库中已存在用户或角色'%s'。上面介绍了如何使用sp_change_users_login存储过程来逐个纠正孤立用户。sp_change_users_login存储过程仅能解决标准的SQL Server登录帐户的孤立用户问题。



3.如果数据库所有者(dbo)被当作孤立用户列出,请在用户数据库中运行下面的代码:exec sp_changedbowner 'sa'此存储过程会将数据库所有者更改为dbo并解决这个问题。要将数据库所有者更改为另一用户,请使用您想使用的用户再次运行sp_changedbowner。


4.如果您的目标服务器运行的是SQL Server 2000 Service Pack 1,则在您执行附加操作或还原操作(或两种操作都执行)后,企业管理器的用户文件夹中的列表中可能没有数据库所有者用户。


5.如果目标服务器上不存在映射到源服务器上的dbo的登录,您在尝试通过企业管理器更改系统管理员(sa)密码时,可能会收到以下错误消息:



错误21776:[SQL-DMO]名称'dbo'在Users集合中没有找到。如果该名称是合法名称,则使用[]来分隔名称的不同部分,然后重试。

警告:如果您再次还原或附加数据库,则数据库用户可能会再次被孤立,这样您就必须重复第3步操作。

第4步:如何移动作业、警报和运算符:

第4步是可选操作。您可以为源服务器上的所有作业、警报和运算符生成脚本,然后在目标服务器上运行脚本。要移动作业、警报和运算符,请按照下列步骤操作:

1.打开SQL Server企业管理器,然后展开管理文件夹。


2.展开SQL Server代理,然后右键单击警报、作业或运算符。

3.单击所有任务,然后单击生成SQL脚本。对于SQL Server 7.0,请单击为所有作业生成脚本、警报或运算符。


您可以用右键单击选择为所有警报、所有作业或所有运算符生成脚本。



◆您可以将作业、警报和运算符从SQL Server 7.0移到SQL Server 2000,也可以在运行SQL Server 7.0和运行SQL Server 2000计算机之间移动。

◆如果在源服务器上为运算符设置了SQLMail通知,则目标服务器上也必须设置SQLMail,才能具有相同的功能。

第5步:如何移动DTS包:


第5步是可选操作。如果DTS包在源服务器上存储在SQL Server中或存储库中,您可以在需要时移动这些包。要在服务器之间移动DTS包,请使用下列方法之一。

方法1


1.在源服务器上将DTS包保存到一个文件中,然后在目标服务器上打开DTS包文件。

2.将目标服务器上的包保存到SQL Server或存储库中。



注意:您必须用单独的文件逐个地移动这些包。

方法2



1.在DTS设计器中打开每个DTS包。


2.在包菜单上,单击另存为。



3.指定目标SQL Server。


注意:在新服务器上,包可能无法正常运行。您可能必须对包进行更改,更改包中任何对旧的源服务器上的连接、文件、数据源、配置文件和其他信息的引用,以便引用新的目标服务器。您必须根据每个包的设计逐个包进行这些更改。

本文中介绍的步骤不移动数据库关系图以及备份与还原历史记录。如果您必须移动这些信息,请移动msdb系统数据库。如果您移动msdb数据库,则不必执行“第4步:如何移动作业、警报和运算符”或“第5步:如何移动DTS包”。
转自:http://www.cnblogs.com/junzhongxu/

测试用例设计—等价类划分法

1.相关概念
1.1 定义
等价类划分法是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。
1.2 等价类
等价类是某个输入域的集合,在这个集合中每个输入条件都是等效的。如果其中一个的输入不能导致问题发生,那么集合中其它输入条件进行测试也不可能发现错误。
等价类分为有效等价类和无效等价类。
有效等价类就是由那些对程序的规格说明有意义的、合理的输入数据所构成的集合,利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
无效等价类就是那些对程序的规格说明不合理的或无意义的输入数据所构成的集合。

2.划分等价类的方法

划分等价类重要的是:集合的划分,划分为互不相交的一组子集,而子集的并是整个集合。
下面给出六条确定等价类的原则。
在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。例如:成年人每分钟的心跳60-100之间为正常。
有效等价类:60-100 无效等价类:<60 和 >100
2、在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类。 例如:用户连续输入错误密码的次数最多为3次。
有效等价类:<=3次 无效等价类:>3次

3、在输入条件是一个布尔量的情况下,可确定一个有效等价类。
例如:单选的选中与不选中。

4、在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
mDjr(eNl0 例如:输入数据为省份的选择。

5、在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则) 。
例如:规定必须输入非0的正整数。
这种例子应充分考虑规则是否可以拆分为具有单一的子规则,然后得到从不同角度违反规则的无效等价类。
该例子起码可拆分为非0、数字、正数、整数4个子规则,至少每个规则对应一个无效等价类,即0、字符串、负数、小数,甚至可挖掘出输入为空的隐含等价类。
6、在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。 例如:核对日期的有效性,初步有效等价类是1<=Month<=12,1<=Day<=31
可是考虑到2月以及闰年、闰月、长月、短月等,需要进一步细分,当然其中还涉及到了年月日组合的问题。

根据等价类划分原则,将等价类填入下表。
等价类表


输入条件 有效等价类 无效等价类




3.测试用例设计原则
根据等价类表,然后从划分出的等价类中按以下三个原则设计测试用例:
1)、为每一个等价类规定一个唯一的编号。
2)、设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止。
3)、设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
4.等价类划分法优缺点`
等价类划分法的优点是考虑了单个输入域的各类情况,避免了盲目或随机选取输入数据的布完整性和覆盖的不稳定性。
等价类划分法虽然简单易用,但是没有对组合情况进行充分的考虑。需要结合其他测试用例设计的方法进行补充。

5.实例
竞猜系统中:投注的金额要求是大于10的正整数。
根据分析等到以下等价类表。 输入条件
有效等价类
无效等价类

大于10的正整数 大于10正整数 空
负数
小数
小于10的数
字符串

备注:再加上全角状态下的数
转自:http://www.cnblogs.com/junzhongxu/

2008年11月23日星期日

Web性能测试案例分析

一、架构设计阶段的性能测试

案例重点关注如下三个方面:

如何根据项目需要来设计与开发测试程序。

测试工具在性能测试中的作用与地位。


针对数据库本神进行性能测试的地位。
二、项目背景

三、性能测试策略、目标、范围、环境

四、性能测试分析与设计

(1)系统架构组对数据库提测试出了如下要求:
测试数据库对复杂SQL语句的支持,尤其是一些长SQL语句的支持。
测试数据库对二进制等格式类型存储的支持。

测试系统在数据量较大时的多用户并发查询的响应时间--查询响应时间为Web服务器对数据库响应时间,不包含应用系统响应时间。

(2)根据上面的测试要求的分析,设计出如下性能测试方案:

测试体系采用B/S架构方式,对数据库的查询操作封存在Servlet中,Servlet运行于tomcat5.0上,前端采用JSP页面调用Servlet并输出执行结果(数据库执行查询的时间)和查询结果(数据库返回的查询结果)。

利用原型系统后台数据库的数据作为测试数据,保证测试结果更加真实。

测试采用的查询语句用原型系统的业务语句,保证测试兼顾实际应用。


通过测试工具LoadRunner来创建虚拟用户,实现用户并发查询。.
通过测试结果来综合分析各家数据库的性能。

五、性能测试实施

测试脚本的开发与修改

数据库系统调优前的测试
数据库系统调优后的测试
六、测试结果分析TestAge
各家国产数据库调优前的测试结果及分析


数据库调优策略TestAge
各家国产数据库调优后的测试结果及分析
稳定性测试场景分析
测试结果TestAge
七、案例点评

体现了模型剪裁与具体化原则

节约了一定的开发成本TestAge
仅仅有测试工具是不够的:很多人认为有了性能测试工具,就可以完成性能测试任务,根本不需要自己去开发脚本。实际上,性能测试最重要的是设计与规划,如何去执行测试用例,则是相对容易的事情。执行测试用例主要通过测试工具,但有时还要靠自己开发的脚本来辅助测试,案例中的测试项目就是很好的证明。
调优不能解决一切问题:性能测试的基本思路“测试--发现问题--调优--再测试”的反复过程。因此,解决性能问题应该从设计阶段着手。
转自:http://www.cnblogs.com/junzhongxu/