相关疑难解决方法(0)

为什么事务日志在带有夜间备份的简单恢复模式下继续增长

在立即标记为重复之前,我已阅读 Mike Walsh 的《为什么事务日志不断增长或空间不足?,但我认为它没有回答我的情况。我浏览了十几个类似的问题,但相关的问题大多只是说“重复”并指向迈克的问题。

详细信息:我在 SQL Server 2008 R2 上有一堆约 500MB 的数据库,都处于简单恢复模式(不是我的选择),每晚完整备份,包含约 200MB 的数据文件和约 300MB 的日志文件。日志不会立即增长到 300MB,而是在几个月的过程中缓慢增长。至少根据 sp_who2 和活动监视器,它们中的任何一个都没有打开的事务。如果我右键单击数据库并选择属性,它会告诉我有大约 50MB 可用空间。特别是在备份之后,整个日志不应该是免费的吗?在 SIMPLE 模式下,只要没有打开的事务,日志就不应该是免费的吗?

log_reuse_wait_descfromsys.databases说“NOTHING”,根据上面引用的问题和答案说它不应该等待任何东西来重用空间。

如果我做'DBCC SHRINKFILE',日志文件缩小到1MB,所以它愿意回收空间。我可以设置一些每周缩小日志并防止事情失控的东西,但我很困惑为什么 SQL Server 会让我这样做。

我可以理解是否有一些疯狂的事务需要 300MB 来记录它,但我们没有做任何极端的事情,只是基本的 OLTP。来自迈克的问题/答案:

简单恢复模型 - 有了上面的介绍,最容易先讨论简单恢复模型。在此模型中,您是在告诉 SQL Server - 我对您使用您的事务日志文件进行崩溃和重新启动恢复感到满意(您在那里确实别无选择。查找 ACID 属性,这应该很快就有意义),但是一旦您没有不再需要它用于崩溃/重启恢复目的,继续并重用日志文件。

SQL Server 在 Simple Recovery 中侦听此请求,并且仅保留执行崩溃/重新启动恢复所需的信息。一旦 SQL Server 确定它可以恢复,因为数据已加固到数据文件(或多或少),已加固的数据在日志中不再需要并被标记为截断 - 这意味着它会被重新使用。

它一直说日志空间应该被重用,但是随着几个月的缓慢增长,它似乎不是。

我错过了什么?是否有什么原因使 SQL Server 无法将数据识别为“硬化”并释放日志?

(编辑) 行动后报告 - AKA 一点点知识是危险的

在发现这是一个“热门问题”后,我觉得我欠了一个解释 7 个月前发生的事情以及我学到的东西,希望能挽救一些其他人的悲伤。

首先,当您查看数据库的属性时,您在 SSMS 中看到的可用空间是数据文件中的可用空间。您可以通过在数据库上运行以下命令来查看这一点,您会发现 SSMS 报告的可用空间是 FileSizeMB 和 UsedSpaceMB …

sql-server sql-server-2008-r2 transaction-log

29
推荐指数
2
解决办法
5万
查看次数

SQL Server 是否会删除旧的错误日志文件?

我知道我可以通过运行 sp_cycle_errorlog 轻松循环当前错误日志,但我想知道 SQL Server 是否会删除旧的/存档的错误日志文件。似乎无法在任何地方找到答案...

sql-server error-log

14
推荐指数
3
解决办法
3万
查看次数

谁创建了程序?(SQL Server 2008 R2)

有没有办法列出谁在 SQL Server 2008 中创建了某些采购?

这个 SO 链接中有一些答案,但来自 6 年前。

我知道最好的做法是写下您的姓名和日期,然后开始创建程序,但我在我工作的地方看不到这一点。

如果没有办法做到这一点,这个任务可以用触发器来完成吗?

还有一个奖励问题。这是 dba 的工作吗?知道是谁创造的吗?

非常感谢。

stored-procedures sql-server-2008-r2

10
推荐指数
1
解决办法
8673
查看次数

数据库何时脱机

我试图找到一种方法来弄清楚我的几个 sql 数据库何时脱机。

我检查了日志,但找不到任何此类信息,而且没有启用默认跟踪。

我只是有一个信息,之前有一位 DBA 将其离线,但没有电子邮件或书面通信等。

我们能找到这方面的信息吗?

请推荐,谢谢!

sql-server-2008 sql-server offline

9
推荐指数
2
解决办法
2万
查看次数

查看旧会话的详细信息

有没有办法查看过去的会议细节(我完全希望答案是“否”)。我试图找出某个应用程序在哪个服务器上运行,该应用程序访问某个数据库。我知道该应用程序在周五晚上的某个时间运行,所以我希望 SQL Server 维护会话历史记录,以便我可以查找相关时间sp_who的详细信息。

就像我说的,我不希望这是可能的,但现在我绝对是在抓着稻草。

提前致谢。

编辑:我最终通过其他方式找到了有问题的服务器;该作业执行了一条 SQL 语句来创建一个文件,然后将该文件通过 FTPd 传输到另一个站点 - 该站点具有 FTP 日志记录,可以为我提供源服务器的名称和 IP 地址。感谢您的回答 - 我只希望我能接受他们,因为他们都提出了很好的观点并提供了很好的建议。

sql-server sql-server-2012

7
推荐指数
2
解决办法
1009
查看次数

列出所有删除的数据库

我需要确认我们的 SQL Server 中是否曾经存在过一个特定的表。是否存在可用于列出 SQL Server 实例中所有删除的数据库的现有脚本或方法?

sql-server-2008 sql-server sql-server-2012

6
推荐指数
2
解决办法
1279
查看次数

将触发器与 SQL Server Profiler 表一起使用时出错

在最近对默认跟踪输出的分析中注意到 100 个 sort_warning 错误后,我正在尝试获取导致这些警告的查询文本。

在此处输入图片说明

SQL Server Profiler 有一个名为 Sort Warnings 的事件,但它没有 TextData 列。

2008 R2 无法使用扩展事件,因为 sort_warning 事件在 2008 R2 的扩展事件中不可用。

我想在我用来存储分析器结果的表上放置一个触发器,以捕获来自 DBCC INPUTBUFFER 的输出。

-- table to store the results of dbcc inputbuffer
CREATE TABLE Trace_Results(EventType NVARCHAR(30), Parameters INT, EventInfo NVARCHAR(255))

CREATE TRIGGER [dbo].[Trace_Trigger]
  ON [dbo].Trace_Table
  AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @SQL VARCHAR(MAX)

    SELECT @SQL = 'DBCC INPUTBUFFER(' + CONVERT(VARCHAR(10), ins.SPID) + ')'
    FROM   inserted ins

    --PRINT @SQL

  INSERT INTO Trace_Results (EventType, Parameters, EventInfo)
    EXEC(@SQL) …
Run Code Online (Sandbox Code Playgroud)

trigger profiler sql-server-2008-r2

5
推荐指数
1
解决办法
1627
查看次数

在 SQL Server 日志中捕获 auto_shrink 事件?

我知道AUTO_SHRINK在 SQL Server 数据库上配置的缺点。最近,在一个新环境中,我发现了几台启用了 Auto Shrink 选项的生产服务器。

现在,在更改此配置之前,我想知道:由于 auto_shrink 事件从 25% 的未使用空间开始,我想知道这是否和/或何时在 SQL Server 上实际发生。我试图找到相关的 SQL-Event-Logfile 条目。我开始手动缩小测试数据库,但没有显示事件日志条目。

有谁知道如何找出最近几天或几周内 SQL Server 发生收缩的时间?

monitoring sql-server shrink

5
推荐指数
1
解决办法
481
查看次数

什么时候为数据库创建第二个日志文件?

是否可以查看为数据库创建第二个日志文件的时间以及由谁创建?我发现了一个额外的日志文件,它是为我们环境中的一个数据库创建的,我正在尝试查看它的创建者和创建时间。我们使用的是 SQL Server 2012 SP2 企业版。

我试图找出谁以及何时为数据库创建了第二个 ldf 文件。

sql-server logs

5
推荐指数
1
解决办法
680
查看次数

如何检测更改范围配置的内容?

我注意到我有一个不断重置范围配置的数据库,即 maxdop。

是否有任何日志显示谁或什么进程导致这些配置更改?我使用的是 Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) - 13.0.4466.4

sql-server sql-server-2016

4
推荐指数
1
解决办法
66
查看次数