SQL Server维护解决方案入门很容易。跟着这些步骤。
可以在任何数据库中创建对象:master,msdb或用于数据库管理脚本的实用程序数据库。您只需要在MaintenanceSolution.sql中更改此行代码:
使用[主人]
指向将在其中创建对象的数据库。作业将自动配置为针对此数据库运行。
SQL Server 2005,SQL Server 2008,SQL Server 2008 R2,SQL Server 2012,SQL Server 2014,SQL Server 2016,SQL Server 2017,Azure SQL数据库和Azure SQL数据库托管实例支持SQL Server维护解决方案。
所有版本的SQL Server都支持SQL Server维护解决方案。
要创建对象的数据库必须处于兼容级别90或更高级别。所有其他数据库可以处于任何兼容级别。
存储过程的标头中有一个版本时间戳。
-------------------------------------------------- --------------------------------------------------
- //来源:https://ola.hallengren.com // -
- //许可证:https://ola.hallengren.com/license.html // -
- // GitHub:https: //github.com/olahallengren/sql-server-maintenance-solution // -
- //版本:2018-06-24 15:24:40 // -
----------- -------------------------------------------------- ---------------------------------------
这是一个可用于检查所有存储过程的脚本。
SQL Server Express没有SQL Server代理。因此,必须使用cmd文件和Windows计划任务来计划存储过程的执行。跟着这些步骤。
DatabaseBackup,DatabaseIntegrityCheck和IndexOptimize正在使用存储过程CommandExecute。下载此对象并在同一数据库中创建它。
您还可以使用MaintenanceSolution.sql脚本,该脚本可创建所需的所有对象。
若要升级到最新版本的SQL Server维护解决方案,请按照下列步骤操作。
我无法找到从T-SQL存储过程中删除Azure Blob存储中的备份文件的方法。因此,在备份到URL时无法使用@CleanupTime参数。
您必须使用PowerShell脚本删除Azure Blob存储中的旧备份文件。这是你可以使用的一个。
DatabaseBackup旨在仅在备份和验证成功时删除备份文件。即使这样,DatabaseBackup也只删除同一实例,数据库和类型的备份。因此,您可以保证始终在磁盘上拥有最新的备份。如果从目录路径中删除任何此类信息,则不再具有此保证。
这是因为xp_delete_file的工作原理:xp_delete_file是DatabaseBackup(和维护计划)用来删除备份文件的扩展存储过程。xp_delete_file根据目录,文件扩展名和修改日期删除备份文件。
DatabaseBackup旨在仅在备份和验证成功时删除备份文件。它每次都备份到一个新的文件名。因此,您可以保证始终在磁盘上拥有最新的备份。如果备份到相同的文件名,则不再具有此保证。
首先,您需要确定要执行备份的位置; 在主副本或辅助副本上。SQL Server有一个名为备份首选项的选项,您可以在可用性组上设置该选项。默认情况下,它设置为Prefer Secondary,但如果您愿意,可以将其更改为Primary。
辅助副本上不支持所有备份类型。以下是支持的备份类型:
DatabaseBackup将在首选备份副本上执行这些类型的备份。它使用函数sys.fn_hadr_backup_is_preferred_replica来确定当前副本是否是首选副本。
仅在主副本上支持完全备份(仅限非副本)和差异备份。DatabaseBackup将始终在主副本上执行这些类型的备份。
您可以使用以下一些不同的备份策略:
应该以相同的方式配置作业,并在所有副本上启用和计划作业。
默认情况下,DatabaseIntegrityCheck正在对所有副本执行检查。这是最佳实践,因为主副本具有不同的I / O子系统。
Paul Randal 在这里写这篇文章。
“镜像的I / O子系统没有损坏,这与委托人的I / O子系统的健康状态无关。”
如果需要控制检查的副本,可以使用参数@AvailabilityGroupReplicas。
应该以相同的方式配置作业,并在所有副本上启用和计划作业。
只能重建或重组索引,并且仅在可用性组中的主副本上更新统计信息。IndexOptimize检查了这一点。
应该以相同的方式配置作业,并在所有副本上启用和计划作业。
问题可能是索引太小或没有足够的碎片。
默认情况下,IndexOptimize不会重新组织或重建少于1000页的索引。如果要更改此设置,可以使用@MinNumberOfPages参数。
默认情况下,IndexOptimize不会重新组织或重建碎片小于5%的索引。如果要更改此设置,可以使用@ FragmentationLevel1参数。
小指数有时甚至在重组或重建后立即显示出高度分散。这是因为页面存储在混合范围中。您可以在联机丛书中了解这种情况:
“一般来说,小型索引的碎片通常是无法控制的。小索引的页面存储在混合扩展区中。混合扩展区最多由八个对象共享,因此在重新组织或重建索引后,小索引中的碎片可能不会减少。
此外,非常小的表上的碎片不会影响性能。微软有一篇关于此的白皮书:
“通常,您不应该关注少于1,000页的索引的碎片级别。在测试中,包含超过10,000页的索引实现了性能提升,索引的增幅最大,页面数量明显增加(超过50,000页)。
默认情况下,IndexOptimize不会重新组织或重建少于1000页的索引。如果要更改此设置,可以使用@MinNumberOfPages参数。
最后,IndexOptimize仅用于索引,而不是堆(index_id = 0)。
Microsoft在联机丛书中提供了一些建议。IndexOptimize中的默认值基于这些建议。
这是一个可用于检查索引碎片的脚本。
您可以使用@LogToTable =‘Y‘选项将命令记录到表中。然后,您可以使用此脚本来分析数据。
确保事务日志备份作业正在运行。
检查事务日志是否具有所需的存储。您不应该缩小事务日志文件。这样做会花费资源来缩小并稍后重新生成文件。
SQL Server 2005,2008和R2 R2中存在一个问题,即在第一个错误之后T-SQL作业步骤停止执行。解决方法是使用带有sqlcmd和-b选项的CmdExec作业步骤。
T-SQL作业步骤在SQL Server 2012及更高版本中运行良好。
您可以使用MaintenanceSolution.sql脚本来创建作业。它将在SQL Server 2005,2008和2008 R2上使用sqlcmd创建CmdExec作业步骤,在更高版本上使用T-SQL作业步骤。
我建议您不要更改存储过程的默认参数值。这样做会使您更难以升级到新版本的存储过程。相反,我建议您将首选值作为参数传递给作业中的存储过程。
我建议您按名称将参数传递给存储过程。在将来的存储过程版本中,我将始终保持参数的名称相同。
视图历史记录仅显示存储过程的一小部分输出 - 并且它并不总是错误所在的部分。因此,您需要检查输出文件,这些文件与SQL Server错误日志位于同一目录中。
如果尚未配置输出文件,则可以使用MaintenanceSolution.sql脚本创建作业。将为您配置输出文件。
在sqlcmd命令中使用SQL Server代理令牌作为服务器名称可确保您针对本地SQL Server执行脚本。
在输出文件名中使用SQL Server代理令牌获取jobid,stepid,date和time可确保这些文件名是唯一的。
在输出文件路径中为日志目录使用SQL Server代理令牌可确保您可以在多服务器环境中使用这些作业。
您可以使用MaintenanceSolution.sql脚本来创建作业。然后将为您配置sqlcmd命令和带有令牌的输出文件。
不幸的是,这项任务并不像看起来那么容易。如果要运行所有步骤,则必须在成功和失败时配置除[最后一步]之外的所有步骤,以防步骤失败。最后一步必须配置为[退出作业报告成功]成功和[退出作业报告失败]失败。问题是,在这种情况下,即使一个或多个前面的步骤失败,只要最后一步成功,作业就会报告成功。
作为解决方法,您可以在作业结束时添加一个步骤,以确定之前的步骤是否失败。
SQL Server代理具有内置支持,可在作业失败时发送邮件。您可以在联机丛书中阅读有关SQL Server代理邮件的信息。
您可以使用任何作业计划程序安排执行存储过程。
答案取决于您的维护窗口,数据库的大小,您可以容忍的最大数据丢失以及许多其他因素。以下是一些您可以开始使用的指南,但您需要根据您的环境进行调整。
用户数据库:
系统数据库:
我建议您在索引维护后运行完整备份。以下差异备份将很小。我还建议您在完整性检查后执行完整备份。然后你知道备份的完整性是可以的。
清理:
您应始终记录输出文件,以确保在出现错误时您拥有完整的信息。
您可以使用MaintenanceSolution.sql脚本来创建作业。然后将为您配置输出文件。
SQL Server中的某些命令输出两个错误。不幸的是,您只能捕获最后一个错误。
您应始终记录输出文件,以确保在出现错误时您拥有完整的信息。
您可以使用MaintenanceSolution.sql脚本来创建作业。然后将为您配置输出文件。
要在SQL Server中捕获错误消息,您需要使用TRY CATCH和ERROR_MESSAGE()函数。遗憾的是,TRY CATCH与BACKUP DATABASE命令不兼容,后者输出两个错误(您只能捕获最后一个错误)。为了确保输出所有错误信息,我不在TRIB CATCH中使用DatabaseBackup中的BACKUP DATABASE命令。因此,错误消息不会记录到表中。
您应始终记录输出文件,以确保在出现错误时您拥有完整的信息。
您可以使用MaintenanceSolution.sql脚本来创建作业。然后将为您配置输出文件。
SQL Server维护解决方案不使用xp_cmdshell。
如果您使用的是SQL Server代理,则作业将在SQL Server代理服务帐户下运行,该帐户是sysadmin服务器角色的成员。如果您使用的是代理帐户,我建议该帐户是sysadmin服务器角色的成员。
如果您正在使用其他调度程序,我建议调度程序在作为sysadmin服务器角色成员的帐户下运行。
如果您需要让用户针对特定数据库临时执行存储过程,则需要以下权限:
在SQL Server Management Studio中,您可以并行地对多个服务器执行脚本。这是在所有服务器上部署SQL Server维护解决方案的简便方法。您还可以使用中央管理服务器创建服务器的中央列表。
要验证所有服务器上是否具有相同版本的SQL Server维护解决方案,可以检查版本时间戳和校验和。这是您可以使用的脚本。
这是一个可用于卸载SQL Server维护解决方案的脚本。
您可以在联机丛书中阅读有关sp_delete_backuphistory和sp_purge_jobhistory的信息。
SQL Server维护解决方案支持AlwaysOn可用性组。
在首选副本上执行仅复制完整备份和事务日志备份。在主副本上执行完全备份(非副本)和差异备份。
对所有副本执行完整性检查。索引和统计信息维护在主副本上执行。
您可以使用@AvailabilityGroups参数选择可用性组。
SQL Server维护解决方案支持数据库镜像。在主体数据库上执行备份,完整性检查以及索引和统计信息维护。
SQL Server维护解决方案支持日志传送。在主数据库上执行完全和差异备份,完整性检查以及索引和统计信息维护。不对日志传送中涉及的数据库执行事务日志备份。
SQL Server维护解决方案支持故障转移群集。
Azure虚拟机支持SQL Server维护解决方案。
Amazon EC2支持SQL Server维护解决方案。
Amazon RDS for SQL Server支持完整性检查以及SQL Server维护解决方案的索引和统计维护部分。备份由Amazon RDS的自动备份功能执行。
Azure SQL数据库支持完整性检查以及SQL Server维护解决方案的索引和统计信息维护部分。备份由Azure SQL数据库的自动备份功能执行。
您不能在Azure SQL数据库上使用MaintenanceSolution.sql。您需要将对象作为单独的脚本下载。
Azure SQL数据库托管实例支持SQL Server维护解决方案。
SQL Server维护解决方案支持Azure Blob存储的备份。
SQL Server维护计划在某些情况下很好,但并不总是提供您所需的。SQL Server维护解决方案可靠,易于部署,具有广泛的日志记录,并具有企业环境中经常需要的功能。
SQL Server维护解决方案是免费的。您可以在此处阅读许可证。
SQL Server维护解决方案可在GitHub上获得。
您可以注册该简报,以获得有关SQL Server维护解决方案更新的警报。
sql server维护解决方案(备份、检查完整性、索引碎片整理)
原文:https://www.cnblogs.com/gered/p/10530348.html