Dav*_*cia 3 sql-server-2008 sql-server maintenance
我有一个每小时运行一次的事务备份作业。
首先它将数据库日志备份到另一个驱动器,然后缩小日志并删除旧.trn
文件。
中间任务使用以下代码缩小日志文件:
USE myDB
DBCC SHRINKFILE('myDB_LOG', 0, TRUNCATEONLY)
Run Code Online (Sandbox Code Playgroud)
但是,有时我会收到以下错误。
说明:执行查询“USE myDB DBCC SHRINKFILE('myDB_LOG'...”失败并出现以下错误:“备份、文件操作操作(例如 ALTER DATABASE ADD FILE)和数据库上的加密更改必须序列化。重新发出当前备份或文件操作操作完成后的语句。将数据库上下文更改为“myDB”。”。可能的失败原因:查询问题、“ResultSet”属性设置不正确、参数设置不正确或连接未正确建立。 End Error DTExec: The package execution returns DTSER_FAILURE (1). Started: 22:00:19 Finished: 22:04:17 Elapsed: 238.26 seconds. The package execution failed. The step failed.
为什么会这样?
有没有更好的方法来备份和收缩数据库日志?
进行事务日志备份后无需运行shrinkfile 命令。缩小最终会再次增长的日志文件有什么需要?考虑到您每天都在这样做,我认为这是一个错误。
每当日志文件增长时,事务都必须等待此事件完成,因此 SQL Server 在此增长发生之前变得静止,并且考虑到日志文件没有即时文件初始化的事实,这些增长事件需要时间才能完成,反过来妨碍性能。
关于错误信息
必须对数据库上的备份、文件操作操作(例如 ALTER DATABASE ADD FILE)和加密更改进行序列化。当前备份或文件操作完成后重新发出语句
这意味着您试图在数据库上运行某些备份操作时运行 dbcc shrinfile 命令。它可以是任何备份完整、差异和事务日志。所有这些消息都是说请在备份操作完成后尝试运行 shrikfile 命令。现在您必须找到当时正在运行的备份。查看 errrlog 或 msdb 作业历史记录,您可以找到更多详细信息。
如果您参考BOL
在数据库或事务日志备份期间无法运行的操作包括:
• 文件管理操作,例如带有 ADD FILE 或 REMOVE FILE 选项的 ALTER DATABASE 语句。
• 收缩数据库或收缩文件操作。这包括自动收缩操作。
归档时间: |
|
查看次数: |
12717 次 |
最近记录: |