SQL Server 管理与开发技术实战应用.docx
《SQL Server 管理与开发技术实战应用.docx》由会员分享,可在线阅读,更多相关《SQL Server 管理与开发技术实战应用.docx(93页珍藏版)》请在冰点文库上搜索。
SQLServer管理与开发技术实战应用
SQLServer2008数据库快照动手实验室
目录
实验介绍3
实验目标3
必备技能3
配置VirtualPC4
使用虚拟机4
实验提示6
LabExercises7
练习1:
对SalesDB数据库进行分区8
练习2:
创建并检查数据库快照9
练习3:
处理多个快照12
练习4:
为数据库镜像创建数据库快照15
Contentcreatedby
实验介绍
实验目标
此实验的目标是让用户了解SQLServer2008中的数据库快照功能
此实验旨在提供SQLServer2008的最佳方案以及实现方法。
如同其它软件开发项目一样,您的生产环境可能与该实验环境有所不同。
请确保最终架构设计完成后,充分对其进行测试,以便减少停机时间并防止数据损失
有关SQLServer2008的最新信息,请访问
在完成下列实验后,您将能够:
▪了解如何创建数据库快照
▪了解如何查看文件大小以及稀疏文件的配置(使用T-SQL查询以及Windows资源管理器这两种方法)
▪了解创建多个快照的优缺点
▪了解在有事务进行处理的时候数据库快照如何创建
▪了解如何使用数据库快照进行测试以及恢复数据
▪了解如何删除数据库快照及其相关数据库
▪了解如何在镜像数据库上创建数据库快照
必备技能
▪了解SQLServer2000或SQLServer2005中的高可用性技术
▪具备一定的SQLServer管理经验
▪了解如何使用SQLServer2005Tools或SQLServer2008Tools对完成此实验非常有帮助
▪了解Transact-SQL查询对于完成此实验将会非常有帮助
▪渴望探索SQLServer2008!
实验时间:
75-90分钟
配置VirtualPC
此VirtualPC环境中安装了Windows2003ServerSP2操作系统,并安装了SQLServer来运行5个实例。
虚拟机名称为CHICAGO
SQLServer服务名称
SQLServer版本
存放目录
MSSQL$SQLDEV01
SQLServer2008RTM,DeveloperEdition(build10.0.1600.22)
C:
\ProgramFiles\MicrosoftSQLServer\MSSQL10.SQLDEV01
MSSQL$SQLDEV02
SQLServer2008RTM,DeveloperEdition(build10.0.1600.22)
C:
\ProgramFiles\MicrosoftSQLServer\MSSQL10.SQLDEV02
MSSQL$SQLDEV03
SQLServer2008RTM,DeveloperEdition(build10.0.1600.22)
C:
\ProgramFiles\MicrosoftSQLServer\MSSQL10.SQLDEV03
MSSQL$SQLEXPRESS
SQLServer2008RTM,ExpressEdition(build10.0.1600.22)
C:
\ProgramFiles\MicrosoftSQLServer\MSSQL10.SQLEXPRESS
MSSQL$CONFIGSERVER
SQLServer2008RTM,DeveloperEdition(build10.0.1600.22)
C:
\ProgramFiles\MicrosoftSQLServer\MSSQL10.CONFIGSERVER
实验中所用到的用户帐户及其密码如下表所示:
用户名
密码
使用场景
Administrator
Pass@word1
VPC登录帐号
SQLService
Pass@word1
SQLServer服务的启动帐号
sa
Pass@word1
SQLServer系统管理员帐号
使用虚拟机
使用虚拟计算机可以把你的宿主操作系统和学习环境隔离开来。
你的宿主操作系统可以是任何支持VirtualPC或者VirtualServer的系统。
在虚拟计算机中,你可以运行任何“基础”操作系统。
在本次实验中所使用的基础操作系统是WindowsServer2003EnterpriseEditionwithServicePack2中文版。
每台虚拟计算机包括一个虚拟硬盘(*.vhd)和一个虚拟机配置文件(*.vmc)。
你可以使用VirtualPC或者VirtualServer打开vmc文件来配置你的虚拟计算机。
初始的配置文件将分配给虚拟计算机1.5GB的内存空间。
这部分内存空间是独立于你的宿主系统内存以外的。
如果你的物理内存没有达到2GB那么请根据情况更改虚拟计算机的内存配置。
环境配置完成后,请启动(打开)你的虚拟计算机。
启动后,你将看到一个登录对话框,请执行下表中的操作,以便登录你的虚拟计算机:
任务
详细步骤
登录VPC镜像
使用Right-Alt+Del组合键来访问VPC的登录对话框,输入用户名Administrator和密码Pass@word1
在VirtualPC或者VirtualServer中,很多命令都会用到Right-alt键。
Right-alt是指紧靠空格键右边的那个alt键。
命令描述
组合键
登录
Right-alt+delete
切换VPC到全屏方式/返回宿主计算机
Right-alt+enter
实验提示
重要提示
建议首先仔细阅读任务列及其相关提示,然后按照详细步骤一步一步进行验证、审核、执行等操作。
强烈建议完整阅读每一个步骤,思考该步骤所要做的事情,然后再执行。
有很多步骤不需要你立即做操作,而是要进行核实和验证,主要目的是为了演示新功能。
有些步骤后面会有一些提示,可以帮助你深入了解某项功能。
动手实验并不是为了比拼速度,因此按部就班的完成实验有助于获得更大的收获。
最后,随着实验难度的增加,更需要按照实验步骤来进行。
如果步骤错误或丢失,很有可能导致实验失败。
可以考虑使用铅笔标记已完成的步骤。
此外,每做一步都要考虑一下自己在做什么,这样不但可以减少错误,还能够让你学到更多的知识。
LabExercises
场景
数据库快照是SQLServer2008企业版中所提供的一项功能。
在下面的实验中您将练习如何使用数据库快照功能来生成报表以及从数据库误操作中进行恢复。
同时,您还将了解在创建和删除数据库快照时所要考虑的问题,以及数据库快照的一些工作原理。
数据库快照是一个源数据库在某个时间点的只读副本,它总是与相关源数据库保持事务一致性。
一个源数据库可以有多个数据库快照,每个数据库快照代表其创建时源数据库的状态。
创建多个数据库快照的时候会有一些潜在问题,我们后面将深入学习。
随着学习的进展,我们将详细研究数据库快照的相关知识。
更多详细信息,请参考SQLServer2008BooksOnline:
∙DatabaseEngine|Development
∙DesigningandImplementingStructuredStorage
∙Databases(DatabaseEngine)
∙DatabaseSnapshots
练习1-3将使用(local)\SQLDEV01实例。
该实例会随着VPC的启动而自动启动;而练习4中我们将用到3个实例,分别是:
∙Partnerinstance(PrincipalorMirror)=(local)\SQLDEV01
∙Partnerinstance(PrincipalorMirror)=(local)\SQLDEV02
∙Witnessinstance=(local)\SQLDEV03
进行练习4的时候将通过一个批处理文件来启动数据库镜像功能所需的实例的相关资源。
练习1:
对SalesDB数据库进行分区
此动手实验中有很多练习都将使用SalesDB数据库的数据库快照。
为了能够更好的看到数据库快照的操作效果,我们首先将Sales表分为4个区。
分区过程将在创建第一个数据库快照之前通过脚本完成。
如同数据库快照一样,数据表和索引分区也是SQLServer2008企业版中所提供的功能之一,它可以让数据表或索引平行划分为多个单元,从而分别存放在不同的文件组中,这样一来就可以加强对大型数据表的管理并提高性能。
更多详细信息,请参考SQLServer2008BooksOnline:
∙DatabaseEngine|Development
∙DesigningandImplementingStructuredStorage
∙PartitionedTablesandIndexes
在此实验中,我们将通过一个脚本来完成如下操作:
1.新建4个文件组,每个文件组包含一个数据文件
2.创建带有4个分区的分区函数
3.使用刚刚创建的分区函数创建分区架构,从而让每个分区存放在不同的文件组中
4.重建Sales表的聚集索引,使用刚刚创建的分区架构将该表划分为4个分区
此实验将使用SQLDEV01实例中的SalesDB数据库
任务
详细步骤
对SalesDB数据库中的Sales表重新分区
1.确保SQLServerManagementStudio处于关闭状态
2.打开MyComputer
3.进入
C:
\AlwaysOnLabs\DatabaseSnapshotsLab
4.双击DatabaseSnapshots.ssmssln.
5.在SolutionExplorer中,展开Scripts.然后在Queries节点下双击PartitionSalesTable.sql.
6.点击Execute执行该脚本,从而将Sales表分为4个区。
注意该脚本的如下部分:
--Createapartitionfunctionforfourpartitions.
CREATEPARTITIONFUNCTIONSales4Partitions_PFN(INT)
ASRANGERIGHTFORVALUES
(2000000,
4000000,
6000000);
GO
--Createapartitionschemeusingthepartitionfunction.
CREATEPARTITIONSCHEME[Sales4Partitions_PS]
ASPARTITION[Sales4Partitions_PFN]TO
(SalesDBSalesDataPartition1,
SalesDBSalesDataPartition2,
SalesDBSalesDataPartition3,
SalesDBSalesDataPartition4);
GO
∙分区函数中定义了“RANGERIGHT”,这意味着如果数值等于边界值,则将放入右侧的分区
∙分区函数中定义的3个边界值(2000000,4000000,6000000)将会创建出4个分区,分别包含如下数值范围:
∙数值<2000000
∙数值>=2000000且<4000000
∙数值>=4000000且<6000000
∙数值>=6000000
1.下面请继续完成后面的练习
练习2:
创建并检查数据库快照
场景
数据库快照使用NTFS分区所提供的稀疏文件技术,这样文件在逻辑上可以非常大,但物理上却非常小。
数据库快照功能不会生成整个源数据库的完整副本,而是会将发生改变的数据页的原始页写入到快照数据库中。
这意味着如果数据库快照创建完成之后,源数据库没有发生任何更改,则快照数据库为空。
这是数据库快照工作的基础,此练习将会向大家进行展示。
在数据库快照场景下,如果源数据库中有正在进行的事务,则这些事务必须在快照数据库中进行回滚以保证事务一致性。
SQLServer会跟踪数据库快照当中所存在的数据页。
如果基于快照数据库进行查询,则SQLServer将决定是采用快照数据库中的数据页来相应查询,还是要读取一些源数据库中的数据页。
快照数据库中的数据库文件必须要和源数据库的数据库文件一一对应,并且快照数据库必须和源数据库位于同一个实例中。
如果想深入了解数据库快照的工作原理,请参考:
SQLServer2008BooksOnline:
∙DatabaseEngine|Development
∙DesigningandImplementingStructuredStorage
∙Databases(DatabaseEngine)
∙DatabaseSnapshots
∙HowDatabaseSnapshotsWork
在此练习中,您将检查SalesDB源数据库,并根据其数据库文件的数量创建相应的快照数据库。
同时您还将通过不同方式来研究逻辑文件和物理文件的大小。
任务
详细步骤
检查SalesDB数据库文件结构
1.在SolutionExplorer中,展开Scripts.然后在Queries节点下双击CreateDatabaseSnapshot.sql
2.注意该脚本被划分为不同步骤,即Step1,Step2等。
后面的练习我们将是用此脚本,注意按照步骤来运行脚本中的代码。
3.点击Execute按钮,执行Step1部分的代码,从而获得SalesDB数据库的数据文件列表
4.此数据库共有5个数据文件,即PRIMARY文件组中的数据文件外加练习1中创建的4个文件。
这意味着我们将要创建的快照数据库也要有5个数据文件
5.另外请注意文件的大小,PRIMARY文件组中的文件为200MB,而其它文件为100MB
创建数据库快照
Step2中的代码如下所示:
--Createthedatabasesnapshot.
CREATEDATABASE[SalesDB_Snapshot]ON
(NAME=N'SalesDBData',
FILENAME=N'C:
\ProgramFiles\
MicrosoftSQLServer\MSSQL10.SQLDEV01\MSSQL\DATA\
SalesDBData.mdf_SS'),
(NAME=N'SalesDBSalesDataPartition1',
FILENAME=N'C:
\ProgramFiles\
MicrosoftSQLServer\MSSQL10.SQLDEV0.1\MSSQL\Data\
SalesDBSalesDataPartition1.ndf_SS'),
(NAME=N'SalesDBSalesDataPartition2',
FILENAME=N'C:
\ProgramFiles\
MicrosoftSQLServer\MSSQL10.SQLDEV01\MSSQL\Data\
SalesDBSalesDataPartition2.ndf_SS'),
(NAME=N'SalesDBSalesDataPartition3',
FILENAME=N'C:
\ProgramFiles\
MicrosoftSQLServer\MSSQL10.SQLDEV01\MSSQL\Data\
SalesDBSalesDataPartition3.ndf_SS'),
(NAME=N'SalesDBSalesDataPartition4',
FILENAME=N'C:
\ProgramFiles\
MicrosoftSQLServer\MSSQL10.SQLDEV01\MSSQL\Data\
SalesDBSalesDataPartition4.ndf_SS'),
ASSNAPSHOTOFSalesDB;
GO
创建数据库快照的时候使用CREATEDATABASE语句,另外需要加上ASSNAPSHOTOF选项。
在为数据库快照命名的时候,建议名称中既包含源数据库的名称,又能包含快照数据库创建的时间。
另外快照数据库中每个文件的逻辑名必须与源数据库相匹配,这样SQLServer才能够知道其对应关系
1.执行Step2中的语句,创建数据库快照
2.注意很快就会返回查询结果,这是因为目前没有正在处理的事务。
使用T-SQL语句来检查数据库快照文件的大小
检查数据库快照逻辑文件和物理文件大小的方式有很多。
这里我们使用sys.dm_io_virtual_file_stats动态视图和sys.master_files目录视图
1.在SolutionExplorer中,展开Scripts.然后在Queries节点下双击DatabaseSnapshotFileSizes.sql
2.点击Execute执行脚本
注意虽然数据库快照文件的逻辑大小和源数据库的逻辑大小相一致,但其物理大小仅为64KB到192KB之间
在Windows资源管理器中检查数据库快照文件的大小
1.打开我的电脑
2.打开:
C:
\ProgramFiles\MicrosoftSQLServer\MSSQL10.SQLDEV01\MSSQL\Data
3.右键点击SalesDBSalesDataPartition1.ndf_SS然后点击Properties.
4.在Properties窗口中,可以看到Size属性为100MB而Sizeondisk则为64KB.
5.同样方式查看SalesDBSalesDataPartition1.ndf文件,可以看到Size属性和Sizeondisk属性均为100MB.
练习3:
处理多个快照
场景
在之前的练习中,您成功的为一个非活动状态的数据库创建了一个快照。
在接下来的练习中,您将:
∙查看源数据库更改对快照数据库的影响
∙查看对正在进行事务处理的数据库创建快照的效果
∙使用恢复到快照状态的功能,快速回滚已提交的事务
任务
详细步骤
对源数据库中的Sales数据表进行更改,查看对快照数据库的影响
1.在SolutionExplorer中,展开Scripts.然后在Queries节点下双击MutipleDatabaseSnapshots.sql和CreateSecondDatabaseSnapshot.sql.
2.执行MutipleDatabaseSnapshots.sql脚本中的Step1,从而对10000条销售记录进行修改,然后对比源数据库和快照数据库中的记录
3.可以看到源数据库中被更新的行相应数值均变为42,而快照数据库中则还保留了之前的数值。
在进行更新的过程中,包含之前数值的数据页被拷贝到了快照数据库中
4.点击Execute执行DatabaseSnapshotFileSizes.sql脚本。
此时可以看到SalesDBDataSalesPartition3.ndf_SS文件的物理大小从64KB增长到了448KB.这是因为数据页在源数据库中被更改之前首先复制到了快照数据库的数据文件中
正如前面所看到的,数据库快照总是保持源数据库的静态拷贝,因此可以用于创建基于某个时间点的报表。
如果源数据库更改不是很频繁,则采用数据库快照功能来保存数据库在多个时间点的副本将是一种非常节省磁盘空间的方式
在一个事务中对Sales表进行更多的更改,并查看数据库快照在回滚更新事务时的效果
1.执行MutipleDatabaseSnapshots.sql脚本中Step2部分的代码,从而对10000条记录进行更新,但这次是在同一个事务当中进行操作
2.源数据库中所有被更新的行相应字段的数值均被更新为56,而快照数据库中对应的行则保留原数值
3.点击Execute执行DatabaseSnapshotFileSizes.sql脚本。
注意SalesDBDataSalesPartition3.ndf_SS文件的物理大小从448KB变成了704KB.这也再次证明了数据页在源数据库中被更改之前首先复制到了快照数据库的数据文件中
4.执行MutipleDatabaseSnapshots.sql脚本中Step3部分的语句,从而回滚未提交的事务
5.注意第一次更新的10000条记录仍然在源数据库中保持更新后的状态;而第二次更新的10000条记录则回滚为原始数值。
同时请注意在快照数据库中,相应记录仍保持原始数值
6.点击Execute执行DatabaseSnapshotFileSizes.sql脚本。
可以看到SalesDBDataSalesPartition3.ndf_SS文件的物理大小仍然为704KB.这也证明了一点:
当数据页被复制到快照数据库之后,会永久保留,直到快照数据库被删除
在数据库进行事务处理的时候,创建第二个数据库快照
1.执行MutipleDatabaseSnapshots.sql脚本的Step4部分,再次更新10000条记录,此次依然是在一个未提交的事务中进行
2.点击Execute执行CreateSecondDatabaseSnapshot.sql脚本,创建另一个数据库快照,即SalesDB_Snapshot2,而此时服务器仍然在对刚刚运行的事务进行处理
3.点击Execute执行DatabaseSnapshotFileSizes.sql脚本。
此时SalesDBDataSalesPartition3.ndf_SS文件的物理大小从704KB增长到了1024KB,而新创建的SalesDBDataSalesPartition3.ndf_SS2文件的物理大小则直接为512KB,而不是64KB.这也显示了在第二个数据库快照创建的过程中,有一些数据页被复制了进去
正如练习2前面所描述的那样,数据库快照在创建过程中也可能会有数据页写入进来。
如果在数据库快照创建过程中,源数据库正在进行事务处理,则快照数据库必须进行回滚以保证在其创建时间点的事务一致性。
4.执行MutipleDatabaseSnapshots.sql脚本的Step5部分,对未提交的事务进行回滚
5.点击Execute执行DatabaseSnapshotFileSizes.sql脚本。
注意SalesDBDataSalesPartition3.ndf_SS文件和SalesDBDataSalesPartition3.ndf_SS文件的物理大小仍各自保持为1024KB和512KB.这也再次证明了一旦数据页被复制到数据库快照中