Microsoft SQL Server - 事务日志已满是啥意思?

     2023-02-16     108

关键词:

【中文标题】Microsoft SQL Server - 事务日志已满是啥意思?【英文标题】:Microsoft SQL Server - What does it mean that a Transaction Log is Full?Microsoft SQL Server - 事务日志已满是什么意思? 【发布时间】:2010-09-23 01:43:09 【问题描述】:

事务日志已满是什么意思?我将文件设置为在需要时增长 20%。我的驱动器上还剩 4GB。如何永久解决此问题? 运行这些命令可以暂时解决问题:

DBCC SHRINKFILE('MyDatabase_log', 1) 使用 TRUNCATE_ONLY 备份日志 MyDatabase DBCC SHRINKFILE('MyDatabase_log', 1)

【问题讨论】:

表示事务日志已满。劲!忍不住了。 【参考方案1】:

另一个简单的答案是您的备份可能没有安排。在升级周期中,我们的数据库备份计划之一已从作业中删除。日志一直在增长,直到我们发现备份没有运行。

【讨论】:

【参考方案2】:

有许多不同的方法可以解决这个问题。这取决于您的备份要求。

主要问题是您的事务日志没有定期备份,导致事务日志不断增长。

SQL Server 2005 有一个简单恢复模式(数据库本身的属性/选项),我主要在不需要每小时快照的 DEV 和 TEST 环境中使用它,事务日志只会增长足以处理服务器上运行的最大事务。此恢复模式不需要计划或维护计划。

在 SQL Server 2000 中,您基本上有一个计划备份脚本,该脚本运行您使用的相同命令,大约每小时一次:

BACKUP LOG MyDatabase WITH TRUNCATE_ONLY

对于生产环境,我们通常会在数据库维护计划中安排每小时一次的事务日志备份和每天一次的完整备份。这样可以将事务日志截断到合理的大小(显然,这个大小可以保存 1 小时的事务数据)。

【讨论】:

【参考方案3】:

您必须备份事务日志而不仅仅是数据库,否则日志将继续增长,直到您用完空间。

【讨论】:

【参考方案4】:

事务日志是 SQL 服务器“记录”它所做的每一个更改的地方,因此如果出现问题(从软件崩溃到电源故障,再到小行星撞击……也许不是小行星撞击),它可以通过“撤消”自上次一致的“检查点”以来所做的所有更改来“恢复” - 回到数据库的最后一次“一致”状态......在那个检查点。每次事务完成(或“提交”)时,已存储在事务日志中的所有更改都被标记为“ok”,并且 CheckPopint 标记允许在这些更改之后向前移动,以便将来恢复之后只会“撤消”更改到某个点。发生这种情况后,不再需要从检查点之前的事务日志中的所有条目从系统崩溃中恢复……但仍然可能需要它们从硬盘崩溃中恢复,所以……

正如另一位先生所提到的,您在服务器上设置的“恢复模型”控制了在检查点之前对事务日志条目的影响。在简单模式下,它们会在检查点发生时被删除,但如果主数据磁盘崩溃,您将面临风险,因为您的事务日志不会包含自上次备份以来写入磁盘的更改。

在其他恢复模式中,在您进行备份之前不会删除事务日志条目,从而保护您免受此风险...

所以,一般来说,当这个问题发生时,这是因为服务器处于设置的“正常”(不简单)恢复模式之一(增量或完整)并且他们没有进行备份......。在这种情况下,交易日志一直在增长……而且在增长……有点像电视上的前列腺广告……

【讨论】:

您对事务日志的解释不正确。每次使用来自已提交事务的所有未写入更改更新数据文件时,都会将检查点写入事务日志。在恢复时(这意味着每次启动 SQL Server),服务器都会查找最后一个检查点。在检查点和日志结尾之间提交的每个事务都被重做。从未提交的事务将被忽略。 @Guge,为什么要重做已提交并写入磁盘的事务?并且从未提交的事务不能被忽略,它们需要回滚!【参考方案5】:

听起来您没有适当的备份策略。执行任何备份(完整备份、差异备份或事务日志)都将截断日志,另外还有一个好处是可以保存一个点,以便在发生故障时从中恢复。您可以运行数据库维护向导来帮助您设置定期运行的备份计划。

如果你真的根本不关心你的数据(在这种情况下,我想知道你为什么有一个数据库),那么你可以将数据库的恢复模式设置为“简单”,这将阻止 TLog完全增长。

最后一件事:如果您正在执行批量加载操作,您可能还会考虑在执行批量操作时更改为“Bulk-Logged”。

【讨论】:

【参考方案6】:

经常备份,每次备份数据库都会清除事务日志。

【讨论】:

不,不是。您必须备份事务日志而不是数据库。【参考方案7】:

我不会实现 20% 的增长率。当它需要增长时,这可能会产生重大影响。如果它曾经增长到,比如说,100GB,它必须在下一次增长时增长 20GB - 准备好让你的系统变慢,而不是在这种情况发生时......相反,我会将它设置为固定速率 - 比如 100MB .当然,我们不知道当前的尺寸来做出更准确的建议。

【讨论】:

【参考方案8】:

您应该查看SQL Server Recovery models。简短的回答是将恢复模式更改为“简单”,但这对备份/恢复有影响。

【讨论】:

对恢复没有影响,每次启动 SQL Server 时都会发生这种情况,但对恢复有影响。

在 Microsoft SQL Server 和 Python 的 SQLAlchemy 和 pyodbc 的上下文中,啥是“用户事务”?

】在MicrosoftSQLServer和Python的SQLAlchemy和pyodbc的上下文中,啥是“用户事务”?【英文标题】:Whatisa"UserTransaction"inthecontextofMicrosoftSQLServerandPython\'sSQLAlchemyandpyodbc?在MicrosoftSQLServer和Python的SQLAlchemy和pyodbc的上下文中,什么是... 查看详情

从 SQL Server 的事务日志中删除信息

...应用程序使用sql请求BACKUPDATABASE创建.bak文件https://technet.microsoft.com/en-us/library/ms191304(v=sql.105).aspx它运行良好,但事务 查看详情

SQL Server 2005 - 无法回滚嵌套事务

...过程时,有时我会从SQLServer2005获得以下信息:原因:com.microsoft.sqlserver.jdbc.SQLServerException:无法回滚T1。未找到该名称的事务或保存点。在com.mic 查看详情

Microsoft SQL Server 2008:写入服务器失败

】MicrosoftSQLServer2008:写入服务器失败【英文标题】:MicrosoftSQLServer2008:Writetotheserverfailed【发布时间】:2017-07-1906:23:25【问题描述】:我有一个Django应用程序,它带有一个执行数据库事务的工作进程。在后台,我有一个AzureSQL数据... 查看详情

SQL Server 复制

...型。事务复制合并复制快照复制更多信息请见http://technet.microsoft.com/en-us/library/ms152531.aspx复制也可以用于 查看详情

SQLDMO - [Microsoft][ODBC SQL Server Driver][SQL Server]'*' 附近的语法不正确

】SQLDMO-[Microsoft][ODBCSQLServerDriver][SQLServer]\\\'*\\\'附近的语法不正确【英文标题】:SQLDMO-[Microsoft][ODBCSQLServerDriver][SQLServer]Incorrectsyntaxnear\'*\'SQLDMO-[Microsoft][ODBCSQLServerDriver][SQLServer]\'*\'附近的语法不正确【发布时间】:2 查看详情

java.sql.SQLException [Microsoft] [ODBC SQL Server Driver] [SQL Server] 对象名“表名”无效

】java.sql.SQLException[Microsoft][ODBCSQLServerDriver][SQLServer]对象名“表名”无效【英文标题】:java.sql.SQLException[Microsoft][ODBCSQLServerDriver][SQLServer]Invalidobjectname\'tablename\'【发布时间】:2012-05-1611:35:19【问题描述】:当我使用JDBCODBC驱 查看详情

Microsoft 替换 SQL Server CE

】Microsoft替换SQLServerCE【英文标题】:MicrosoftreplacementofSQLServerCE【发布时间】:2016-09-1410:33:23【问题描述】:为什么不推荐使用SQLServerCE以及Microsoft替代(或将替代)可移植数据库的原因是什么?LocalDB需要本地.msi安装,而SQlite需... 查看详情

如何清除 SQL Server 事务日志?

】如何清除SQLServer事务日志?【英文标题】:HowdoyoucleartheSQLServertransactionlog?【发布时间】:2010-09-0813:40:11【问题描述】:我不是SQL专家,每次我需要做一些超出基础的事情时,我都会想起这样一个事实。我有一个规模不大的测... 查看详情

在 SQL Server 事务中创建过程

】在SQLServer事务中创建过程【英文标题】:CreateaprocedureinaSQLServertransaction【发布时间】:2014-11-1410:05:15【问题描述】:我是SQLSever的新手,我正在尝试在事务中创建一个过程,如下所示:BEGINTRYSETTRANSACTIONISOLATIONLEVELREADUNCOMMITTED;BEG... 查看详情

限制 SQL Server 事务日志

】限制SQLServer事务日志【英文标题】:LimitingSQLServerTransactionlog【发布时间】:2020-03-0816:18:10【问题描述】:我目前有一个SQL脚本,它获取具有特定名称的所有表并从中删除记录。这些表中有数百万条记录,因此即使恢复设置为SI... 查看详情

Microsoft 访问 SQL Server Express [关闭]

】Microsoft访问SQLServerExpress[关闭]【英文标题】:MicrosoftAccesstoSQLServerExpress[closed]【发布时间】:2013-11-2016:08:04【问题描述】:我正在尝试开发一种管理结构材料数据库的解决方案。所以我使用C#作为解决方案。现在,我想将它与SQ... 查看详情

SQL Server 2005 事务复制性能

】SQLServer2005事务复制性能【英文标题】:SQLServer2005transactionalreplicationperformance【发布时间】:2012-05-1906:39:30【问题描述】:有人知道事务复制如何影响发布者数据库的性能吗?我想使用订阅者作为生成在线报告和统计数据的基... 查看详情

SQL Server:查找以前历史查询的事务级别

】SQLServer:查找以前历史查询的事务级别【英文标题】:SQLServer:FindTransactionLevelofPreviousHistoricalQueries【发布时间】:2022-01-1121:34:28【问题描述】:如何找到以前在SQLServer中运行过的查询的事务级别?这仅适用于当前正在运行的查... 查看详情

如何轻松连接表 Microsoft SQL Server?

】如何轻松连接表MicrosoftSQLServer?【英文标题】:HowtojointableseasilyMicrosoftSQLServer?【发布时间】:2010-07-2908:48:00【问题描述】:我有两个用于类别的单独表格。一个是Categories(ID,Title,Description),另一个是SubCategories(ID,UpperID,Title,Descr... 查看详情

SQL Server:如何增加事务日志的大小?

】SQLServer:如何增加事务日志的大小?【英文标题】:SQLServer:HowdoIincreasethesizeofthetransactionlog?【发布时间】:2010-11-0322:08:14【问题描述】:如何增加事务日志的大小?是否也可以临时增加事务日志?假设我有以下情况。我的删除... 查看详情

SQL Server - 事务回滚错误?

】SQLServer-事务回滚错误?【英文标题】:SQLServer-transactionsrollbackonerror?【发布时间】:2010-12-1712:12:55【问题描述】:我们有在SQLServer2005上运行某些SQL的客户端应用程序,例如:BEGINTRAN;INSERTINTOmyTable(myColumns...)VALUES(myValues...);INSERTI... 查看详情

SQL Server 复制 - 没有可用的复制事务

】SQLServer复制-没有可用的复制事务【英文标题】:SQLServerReplication-Noreplicatedtransactionsareavailable【发布时间】:2013-11-2715:44:39【问题描述】:我创建了一个发布者(在sqlserver2008r2上),创建了事务复制,并在订阅者sql实例(SQLServe... 查看详情