SQL Server 2005 数据维护实务

  1.关于SQL Server 2005数据维护计划

  为了使SQL Server数据库的性能保持在最佳的状态,数据库管理员应该对每一个数据库进行定期的常规维护。这些常规任务包括重建数据库索引、检查数据库完整性,更新索引统计信息,数据库内部一致性检查和备份等。这些常规的数据库维护任务需要经常重复,而且繁琐耗时,所以往往被管理员忽略。而且,现在的数据库管理员一天到晚都被很多其他的任务压得喘不过气来,根本没有时间去进行日常维护工作。认识到这些问题的存在,SQL Server通过制定维护计划,提供了一个可以自动或手动执行这些日常维护事务的方法。当确定并创建了维护任务后,日常维护就会根据设定的时间段启动,最终会为企业提供更优质更稳定更值得信赖的数据库。

  2.SQL Server Service Pack 2数据维护方面的新特性

  SQL Server Service Pack 2有许多改进的新功能和修复设置已经能够支持维护计划的创建功能。其中改进的特性包括:

  维护计划设计器支持在一个维护计划里设置多个子计划,而且每个子计划可以具有创建独立任务计划书的功能。多重计划书是备受期待的特性,能够为不同的日常维护事务设置独立的计划表,例如备份、更新统计信息和执行SQL Server作业等。

  在SQL Server 2005推出的初期,如果企业想要运行维护计划,需要安装SQL Server集成服务(SQL Server Integration Services,SSIS)。不过现在维护计划已经作为一项完全支持的特性整合到了数据库引擎中,所以不再需要启动集成服务了。

  支持多服务器管理环境,并把维护计划信息记录到远程服务器,以适应不断增加的管理维护计划。可以从一台中央主服务器为所有的目标服务器设置维护计划。

  最早出现在SQL Server 2000备受欢迎的“清除维护任务”(Maintenance Cleanup Task)重新回到了维护计划里。这个任务可以删除维护计划执行以后任何残留下来的文件。

  下面列举几个人们预想不到的修复设置,用以改善相关的具体任务:

  SQL Server 2005 Service Pack 2为数据库备份维护计划任务增加了新的备份过期选项。如果您想让备份设置在某个特定日期之后失效,就可以通过设置备份过期选项来实现。SQL Server 2000具有这个特性,不过在SQL Server 2005发布之初被删除了。

  您可以另外指定备份文件夹的位置,数据库备份维护计划任务不会再重新设置这个选项为默认位置。

  过去当您运行备份数据库维护计划任务时,系统可能会错认为您要利用简单恢复模式为系统数据库创建差异和事务日志备份。现在这个缺陷已经修复了。

  历史清除维护计划任务能够将删除文件的时间选项设置成以小时为单位,大大减少了人工操作时间。

  更新统计信息任务提供原先在SQL Server 2000维护计划中包含的完全扫描或根据样本大小扫描的选项。

  3. SQL Server维护计划的任务

  一个维护计划可以在设定的时间段里运行全套的SQL Server维护任务,以确保数据库引擎里的关系数据库能够优化运行、执行日常备份和检查异常数据。作为SQL Server数据库引擎的一个特性,可以自动创建数据库维护计划并为这些日常维护设置计划书。一个全面的维护计划包括一下几个主要的任务:

  检查数据库完整性

  更新数据库统计信息

  重新组织数据库索引

  进行数据库备份

  清洗数据库历史操作数据

  收缩数据库

  清除维护计划残留文件

  执行SQL Server作业

  清除维护任务

  注意,和SQL Server 2000不同,日志传送不再包括在维护计划的范畴里。可以在SQL Server Management Studio的数据库水平上或者通过TSQL脚本设置日志传送任务。

  3.1 检查数据库完整性任务

  检查数据库完整性任务(Check Database Integrity Task)检验选定的关系数据库中用户和系统表的性能和结构完整性,同时也可以选择检查所有索引页的完整性,检查对象可以是所有的系统和用户数据库,也可以是单个指定数据库。通过维护计划向导(Maintenance Plan Wizard)或使用TSQL语句能够手动创建该任务。

  下面的语法虽然简单,但提供了在AdventureWorks数据库中创建检查数据库完整性任务所需要的所有信息。

  USE [AdventureWorks]

  GO

  DBCC CHECKDB WITH NO_INFOMSGS

  GO

  3.2收缩数据库任务

  收缩数据库任务可以把数据库的物理空间和日志文件所占的空间减小到特定值,类似于SSMS中使用的自动收缩任务(Automatic Shrink Task)。收缩对象可以是所有数据库、所有系统数据库、所有用户数据库或单个任务中指定的数据库。该任务会根据您输入的百分比值消除多余的空间。此外,还可以设定各种表示大小(MB)的阈值,包括当数据库大小达到某特定值时的收缩量以及收缩后必须保留的可用空间大小等。可用空间可以保留在数据库里,也可以释放到操作系统中。

  以下的TSQL语法可以用来收缩AdventureWorks 数据库,并把所释放的空间返回操作系统,且允许在收缩后保留15%的可用空间。

  USE [AdventureWorks]

  GO

  DBCC SHRINKDATABASE(N'AdventureWorks', 15, TRUNCATEONLY)

  GO

  但是,如果您要创建维护计划,最好不要选择收缩数据库的选项。首先,数据库收缩操作总是反向进行的,即从文件末端开始释放空间,把分配页移动到文件起始端的未分配页。由于所有的转移操作都会被记录到日志中,所以这个过程会增加事务日志文件的大小。其次,如果数据库的使用频率很高就会产生插入碎片,数据库文件又会不断增加。SQL Server 2005启用即时文件初始化来解决数据库自动增长缓慢的问题,因此增长过程会比过去快。不过,有时候会出现自动增长需要的空间不足的情况,这将造成数据库性能衰退。最后,数据库收缩和增长过于频繁会产生很多文件碎片。如果您想要收缩数据库空间,最好在数据库运行非高峰时段手动进行。

  3.3 重新组织索引任务

  重新组织索引任务(Reorganize Index Task)可以整理索引碎片,并压缩与所有表和视图相关联的或者与特定表和视图关联的聚集和非聚集索引,以此来来改善索引扫描性能。受此任务影响的数据库可以是所有的数据库、所有系统数据库、所有用户数据库或单个目标数据库。任务设置了可以用来选择压缩图像或文本等大型对象(LOB)数据的额外选项。

  为了更深入了解这个任务,下面举一个用来重新组织与AdventureWorks 数据库中的[Sales]. [SalesOrderDetail]表关联的索引的TSQL语法实例,本例中还包含了压缩大型对象数据的选项:

  USE [AdventureWorks]

  GO

  ALTER INDEX [IX_SalesOrderDetail_ProductID]

  ON [Sales].[SalesOrderDetail]

  REORGANIZE WITH ( LOB_COMPACTION = ON )

  GO

  USE [AdventureWorks]

  GO

  ALTER INDEX [PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID]

  ON [Sales].[SalesOrderDetail]

  REORGANIZE WITH ( LOB_COMPACTION = ON )

  3.4 重新生成索引任务

  重新生成索引任务(Rebuild Index Task)旨在通过重新组织数据库中所有的表索引而清除碎片。此任务对于确保查询性能和应用程序响应不会退化非常有用。因此,当需要对SQL执行索引扫描和查找的时候,系统运行会非常顺畅。另外,此任务能够优化数据和可用空间的再索引页的分配,使数据库增长更加快速。

  对于可用空间,重新生成索引任务包含以下两个选项:

  采用默认可用空间大小来重新组织索引页——删除数据库里的表索引,并重新生成索引,生成索引的同时就指定填充因子(fill factor)的值。

  改变每个索引页的可用空间比例——删除数据库里的表索引,并指定一个自动计算得到的新填充因子值来重新生成索引,因此能够保留索引页上指定的有用空间大小。填充因子的有效值范围从0到100,数值越大,索引页上保留的有用空间就越多,索引就可以增长得越大。

  重新生成索引的高级选项包括:

  指定是否在tempdb中存储排序结果——这是重新生成索引的第一个高级选项,相当于索引中的SORT_IN_TEMPDB选项,如果激活这个选项,那么中间排序结果将会在重新生成索引的过程中存储到tempdb中。

  指定重新生成索引操作中是否保持索引联机——如果设置值为ON,那么这个选项允许用户在重新生成索引操作过程中对基础表、聚集索引数据和相关联的索引进行查询和数据修改操作。

  为了更深入了解这个任务,下面举一个TSQL语法实例用来重新生成与AdventureWorks 数据库中的[Sales]. [SalesOrderDetail]表关联的索引,例子中采用默认可用空间大小选项,同时将排序结果存储在tempdb中,并在操作过程中保持索引联机:

  USE [AdventureWorks]

  GO

  ALTER INDEX [AK_SalesOrderDetail_rowguid]

  ON [Sales].[SalesOrderDetail]

  REBUILD WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, SORT_IN_TEMPDB = ON, IGNORE_DUP_KEY = OFF, ONLINE = ON )

  GO

  USE [AdventureWorks]

  GO

  ALTER INDEX [IX_SalesOrderDetail_ProductID]

  ON [Sales].[SalesOrderDetail]

  REBUILD WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, SORT_IN_TEMPDB = ON, ONLINE = ON )

  GO

  USE [AdventureWorks]

  GO

  ALTER INDEX [PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID]

  ON [Sales].[SalesOrderDetail]

  REBUILD WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, SORT_IN_TEMPDB = ON, ONLINE = ON )

  3.5 更新统计信息任务

  更新统计信息任务(pdate Statistics Task)通过对用户表创建的每个索引统计信息分布进行重新抽样,以确保在一个或多个SQL Server数据库内表和索引中的数据都是最新的。

  此任务的选项有很多,下面为您一一介绍:

  数据库——首先选择受此任务影响的数据库。这个选项范围包括所有数据库、所有系统数据库、所有用户数据库或指定数据库。

  对象——选择完数据库后,就该在对象框中选择限定显示表、显示视图还是两者同时显示。

  选择——选择受此任务影响的表或索引。如果在对象框中选择了同时显示表和视图选项的话,此选项不可用。

  更新——“更新”框提供了三个选项。如果需要更新列和索引的统计信息那就选择全部现有统计信息,如果只需要更新列统计信息那就选择仅限列统计信息,如果只更新索引统计信息那就选择仅限索引统计信息。

  扫描类型——此选项使用户可以对收集已更新统计信息进行完全扫描或通过在抽样选项键入特定值进行扫描。抽样选项的值可以是要抽样的表或索引视图的百分比,也可以是指定的行数。

  下面是用来更新AdventureWorks 数据库中的[Sales]. [SalesOrderDetail]表的索引统计信息的TSQL语法,例子中选择更新全部现有信息,并执行完全扫描:

  use [AdventureWorks]

  GO

  UPDATE STATISTICS [Sales].[SalesOrderDetail]

  WITH FULLSCAN

  3.6 清除历史记录任务

  清除历史记录任务(History Cleanup Task)用几个简单的步骤就可以完全清除数据库表中旧的历史信息。任务支持删除多种类型的数据。下面介绍与此任务相关的几个选项:

 

  即将删除的历史数据——使用维护计划向导来清除备份和还原历史记录,SQL Server代理作业历史记录和维护计划历史记录。

时间: 2024-08-03 22:56:18

SQL Server 2005 数据维护实务的相关文章

sql server 2005数据存储过程学习笔记

sql server 2005 存储过程语法 CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ] [ { @parameter [ type_schema_name. ] data_type } sql server 2005 存储过程 语法 CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]     [ { @par

SQL SERVER 2005删除维护作业报错:The DELETE statement conflicted with the REFERENCE constraint "FK_subplan_job_id"

案例环境:     数据库版本: Microsoft SQL Server 2005 (Microsoft SQL Server 2005 - 9.00.5000.00 (X64) ) 案例介绍:     对一个数据库实例做清理工作时,发现有一个很久之前禁用的数据库维护作业,于是遂删除该作业,但是删除该作业时,遇到如下错误:     脚本删除操作: USE [msdb] GO EXEC msdb.dbo.sp_delete_job @job_id=N'876ab683-6d81-47c4-bba

SQL Server 2005数据同步的过程

SQL Server2005中对于增.删.改和查询是有某些冲突的,很容易造成死锁.现在有台数据库里的FileDetail表是由两套程序来操作的,一套程序负责增.删.改,另一套程序负责查询,结果当数据量大的时候,很容易造成查询的那套程序查询数据很慢,甚至造成死锁的情况.原因是SQL Server2005里的设计机制是插入的时候,死锁的记录只会是某一条,并不影响下一条和上一条,但是纠结的情况来了,你插入的时候是爽了,并不影响你,可是当我查询的时候,如果发现某一条记录被死锁,那么我这条T-SQL查询的

SQL Server 2005数据同步图文详解

 SQL Server2005中对于增.删.改和查询是有某些冲突的,很容易造成死锁.现在有台数据库里的FileDetail表是由两套程序来操作的,一套程序负责增.删.改,另一套程序负责查询,结果当数据量大的时候,很容易造成查询的那套程序查询数据很慢,甚至造成死锁的情况.原因是SQL Server2005里的设计机制是插入的时候,死锁的记录只会是某一条,并不影响下一条和上一条,但是纠结的情况来了,你插入的时候是爽了,并不影响你,可是当我查询的时候,如果发现某一条记录被死锁,那么我这条T-SQL查询

SQL Server 2005和SQL Server 2000数据的相互导入

  1) SQL Server 2000数据导入SQL Server 2005 在SQL Server 2000中,把其数据进行备份,在数据库中点击右键,选择"所有任务"下的"备份数据库",弹出一个对话框,然后点击"添加"按钮,输入对应的数据库备份名称,就可以备份数据了.然后在SQL Server 2005中,在数据库中点击右键,点击"还原数据库",在弹出的对话框中,"常规"的选项卡中,"目标数据

Microsoft SQL Server 2005 概述

SQL Server 数据平台 SQL Server 是一个全面的.集成的.端到端的数据解决方案,它为企业中的用户提供了一个安全.可靠和高效的平台用于企业数据管理和商业智能应用.SQL Server 2005 为IT专家和信息工作者带来了强大的.熟悉的工具,同时减少了在从移动设备到企业数据系统的多平台上创建.部署.管理及使用企业数据和分析应用程序的复杂度. 通过全面的功能集.和现有系统的集成性.以及对日常任务的自动化管理能力,SQL Server 2005 为不同规模的企业提供了一个完整的数据解

在 SQL Server 2005 中使用表值函数来实现空间数据库

server|函数|数据|数据库 Gyorgy Fekete 和 Alex Szalay约翰霍普金丝大学 Jim GrayMicrosoft(联系作者) 适用于Microsoft SQL Server 2005 摘要:本文说明了如何使用 C# 和表值函数将空间搜索函数("邻近点的点"和"多边形内的点")添加到 Microsoft SQL Server 2005.使用此库可以在不编写任何特殊代码的情况下向应用程序中添加空间搜索.此库实现了来自约翰霍普金丝大学的公共域

升级到SQL Server 2005的12个必备提示

SQL Server 2005在编程和管理特性方面都超过了它的前任.你已经升级或正在计划中吗?我们编辑了一份清单,其中包括工作中升级到SQL Server 2005的12个最普遍的提示,并且它们涉及了整个升级范围.包括向后兼容问题.SQL Server 2005和2000共存于同一台机器上.移植Copy Database Wizard(复制数据库向导)等等. #1- SQL Server 2005和2000共存的兼容性 所以,你已经决定了升级你的数据库到SQL Server 2005.我们的数据

SQL Server 2005 正则表达式使模式匹配和数据提取变得更容易

目录 CLR 用户定义函数模式匹配数据提取模式存储匹配在匹配项中进行数据提取总结 尽管 T-SQL 对多数数据处理而言极其强大,但它对文本分析或操作所提供的支持却很少.尝试使用内置的字符串函数执行任何复杂的文本分析会导致难于调试和维护的庞大的函数和存储过程.有更好的办法吗?   实际上,正则表达式提供了更高效且更佳的解决方案.它在比较文本以便标识记录方面的益处显而易见,但是它的用途并不仅限于此.我们将介绍如何执行各种简单或令人惊异的任务,这些任务在 SQL Server 2000 中被视为不切实