我正在使用 SQL Server Management Studio 维护计划向导创建(相当标准的)每日维护计划。
AFAIU,倒数第二个任务“备份数据库任务”只有在所有前面的任务都成功时才会执行。由于约束(包含任务的箭头)都是相同的(取自默认选项创建):
并使用“逻辑与”
现在,如果我在前面的约束中将“逻辑与”更改为“逻辑或”,如果前面的任务之一失败,备份任务仍然会失败。
正确的?
在任何情况下如何使备份任务运行?
更新
接受答案后,我仍然对术语“完成”存有疑问:
在 SQL Server 维护计划术语中,是否认为失败的任务已完成?
我们有一个多租户环境,我一直在尝试在所有服务器上部署标准化的维护计划。我一直在遇到正确导入维护计划的问题,以及设置正确的最小权限来运行作业的问题。
任何人都可以就如何在异构多租户环境(例如我们的环境)中部署此类备份维护计划提供一些指导。我在下面详细介绍了我的尝试,鉴于复杂程度正在迅速上升,我想知道我是否正朝着完全不正确的方向前进。
有没有更好的办法?
我正在寻找一种可以通过脚本/SQLCMD 轻松部署的解决方案,因此我可以通过 Puppet 推出它。我也希望坚持维护计划,因为我们团队中的 SQL 知识很少,并且未来对备份计划的编辑需要深入的 T-SQL 知识将是有问题的(尽管它看起来像一个 T-SQL 脚本或为了运行备份可能是最简单的方法)。
环境
我试过的
目前,我的主要尝试包括通过集成服务将我的维护计划导出到 DTSX 文件,以及作业子计划的相关 T-SQL。然后将这些导入到目标服务器中,以相同的用户名/密码运行。
一些粗略的步骤:
照常在服务器上创建维护计划。设置时间表。
在计划中配置本地服务器连接以作为我的标准化“备份”用户进行连接。
将 subplan1 作业配置为由“backup”用户拥有,并将 Subplan_1 Step 1 配置为通过相同的备份 SQL 用户进行连接。
本地连接到集成服务并将存储在 MSDB 中的维护计划导出到 DTSX 文件,指定自定义加密密码。还将 Job subplan_1 T-SQL 导出到新的 SQL 文件。
在所有数据库上授予backup …
我有一个备份 SSAS 数据库的程序。
这是一种魅力。
现在我的服务器被 SSAS 备份填满,我想删除超过 2 天的备份文件。
为了实现这一点,我使用了以下 POWERSHELL 脚本:
#-------------------------------------------------------------------------------
# Script to delete old SSAS backup files
#
# Marcelo Miorelli
#
# 19-novembre-2014 Wed
#-------------------------------------------------------------------------------
#-- connect to the remote server -- SQLBILON1
#
ENTER-PSSESSION sqlbilon1
#-- set the Path where the backup files (.abf) are located
#
$path = 'H:\SQLBackups'
#-- set the number of days backups should be deleted -- in this case 2
#
$NumberOfDays = 2
#-- …
Run Code Online (Sandbox Code Playgroud) 当使用 SQL Server 2012 EMaintenance Plan 进行备份时,备份数据库任务会创建一个唯一的文件名。我理解格式一直到最后一组数字。
例如,通过备份数据库任务启动的完整数据库备份将创建如下文件名:
AdventureWorks_backup_2014_12_17_080005_5862824.bak
什么是5862824
引用?是不是比LSN?还有什么?
我昨天修改了一个维护计划,今天早上(通过使用来自 sysjobs 的最后修改日期)发现与维护计划相关的所有作业都被禁用。
我无法弄清楚为什么会这样。SQL 作业所有者是sa
,我只是用维护计划更改了维护清理任务并保存了作业。
我有一个 SQL Server 2012 维护计划,它执行正常的操作(重建索引和更新统计信息、备份数据库、删除超过 X 天的 .bak 文件等)。除了一项维护清理任务外,一切正常:
这应该是删除所有意外留在每晚备份目录中的 .7z 档案(相当于 .zip 或 .rar)(尽管我们尽了最大努力,但最终还是有些人将这些文件留在服务器上......),但是E:\Backups\foo\bar.7z
在维护计划运行后,子目录(例如)中仍然存在旧的 .7z 文件。
SQL Server 日志中没有错误。
我怀疑这是因为“删除以下类型的文件:备份文件”选项限制了可以删除的文件类型。我还尝试使用 7z 扩展名将其更改为“维护计划文本报告”,但没有任何更改。
是否可以让维护计划在维护清理任务期间删除任意(非 SQL Server)文件?如果是这样,知道我做错了什么吗?
我使用维护计划向导创建了一个计划。当我执行计划时,“维护清理任务”失败并显示以下错误消息:
执行查询“EXECUTE master.dbo.xp_delete_file 0,N'',N'',N'2016...”失败并出现以下错误:“执行扩展存储过程时出错:参数无效”。可能的失败原因:查询有问题,“ResultSet”属性设置不正确,参数设置不正确,或者连接建立不正确。
生成的 T-SQL 是这样的(根据日志文件查看器):
EXECUTE master.dbo.xp_delete_file 0,N'''',N'''',N''2016-01-25T13:50:30''
GO
Run Code Online (Sandbox Code Playgroud)
请注意,所有单引号都加倍。
日志查看器或向导中是否存在错误实际上生成了无效的 T-SQL 代码?
刚刚意识到如果我删除重复引号并手动运行查询,我会收到“执行扩展存储过程时出错:无效参数”:
EXECUTE master.dbo.xp_delete_file 0,N'',N'',N'2016-01-25T13:50:30'
GO
Run Code Online (Sandbox Code Playgroud) 今天我收到一个错误 (DTSER_FAILURE),但我可以通过编辑维护计划来修复它(这个错误是由于维护计划搜索已删除的数据库,而我在设置中使用了“选定的数据库”)。
但是在互联网上,我读了一些帖子说我应该SP_CONFIGURE 'ALLOW UPDATES',0
。
这个选项有什么影响?
我在 Microsoft 页面上读到此选项无效并且已弃用。
sql-server backup maintenance-plans sql-server-2014 sp-configure
多年来,我们一直在使用 Ola Hallengren 的维护脚本对 OLTP 数据库进行索引优化。(我们在 sql server 2008 R2 上)2 周前,尽管这里的一位 DBA 创建了一个维护作业来单独更新统计信息,并且在索引优化作业之前每周运行一次。似乎在创建它之后,我们在少数存储过程中遇到了性能问题。我对统计维护不太熟悉,所以我想知道,是否真的有必要单独运行每周工作来更新所有统计数据?
这里的 DBA 似乎认为这是必要的,但我觉得在维护作业运行后的第二天早上,我们开始执行糟糕的存储过程,我经常需要每天至少重新编译相同的存储过程 1 或 2 次,以用于以下几个几天然后问题就停止了。我的理论指向之前发生的统计更新,但我找不到原因。无论如何,在进行一定量的更改或索引重建期间,统计信息是否会更新?为什么单独重新计算它们会导致问题?
有没有人能够澄清为什么每次更新统计信息时相同的存储过程都会发生这种情况?
这是用于统计作业的命令:
EXECUTE dbo.IndexOptimize
@Databases = 'DB_PRO',
@FragmentationLow = NULL,
@FragmentationMedium = NULL,
@FragmentationHigh = NULL,
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y' ,
@TimeLimit = 3600,
@LogToTable = N'Y';
Run Code Online (Sandbox Code Playgroud)
然后索引维护作业运行如下:
sqlcmd -E -S $(ESCAPE_SQUOTE(SRVR)) -d master -Q "EXECUTE [dbo].[IndexOptimize]
@Databases = 'DB_PRO', @TimeLimit = 10800, @LogToTable = 'Y'" -b
Run Code Online (Sandbox Code Playgroud) performance sql-server statistics maintenance-plans query-performance
我将如何在 SQL Express 上运行 Ola Halengren 的 sql 维护计划的各个方面?
我的理解是每个作业都应该按特定顺序运行。我确信 .bat 或 cmd 文件可以做到这一点,但不确定从哪里/如何开始。SQL Express 不显示服务器代理,因此不显示作业。
我可以以另一种方式查看它们并仍然使用调度程序,还是必须编写脚本?我是否必须从任务计划程序运行它,或者 SQL 代理计划程序可以处理这个问题?非常感谢您可以提供的任何帮助/方向。
附带说明一下,我还想知道是否可以安排作业在另一个作业完成后运行,而不是指定运行作业的时间?
sql-server scripting sql-server-express maintenance-plans ola-hallengren
sql-server ×9
backup ×4
performance ×1
powershell ×1
scripting ×1
sp-configure ×1
ssas ×1
ssis ×1
ssms ×1
statistics ×1