sql-server - 事务日志已满(由于没有)...但此数据库处于简单恢复模式

标签 sql-server transaction-log aspnetdb

我正在支持一个仍然使用“aspnetdb”作为其身份验证系统的远古网络应用程序(即将退役)。当我发现我的测试服务器提示以下错误时,我正在为它在我的测试环境中的退休做一些准备工作:

The transaction log for database 'aspnetdb' is full due to 'NOTHING'.



现在,通常我会假设问题来自数据库事务日志......但这个数据库最近切换到简单恢复模式(这是一台测试机器)。

我尝试了一些没有运气的实验,并做了一些谷歌搜索。有人见过这个错误吗?简单恢复模式下数据库上的完整事务日志?

它在 SQL Server 2016 上运行,在 2008 兼容模式下运行,因为 aspnetdb 太旧了。

最佳答案

明白了,从stackexchange 收到了帮助。

https://dba.stackexchange.com/questions/241172/transaction-log-is-full-due-to-nothing-but-this-database-is-in-simple-recov?noredirect=1#comment475763_241172

Autogrowth 设置为 0。不幸的是,在 SSMS 中无法看到这一点,因为它隐藏了有关恢复模式简单数据库的此类设置。

查询以查看 Autogrowth 的真正值(value),感谢@HandyD:

SELECT 
    db.name AS [Database],
    mf.name AS [File],
    CASE mf.[type_desc]
        WHEN 'ROWS' THEN 'Data File'
        WHEN 'LOG' THEN 'Log File'
    END AS [FileType],
    CAST(mf.[size] AS BIGINT)*8/1024 AS [SizeMB],
    CASE
        WHEN mf.[max_size] = -1 THEN 'Unlimited'
        WHEN mf.[max_size] = 268435456 THEN 'Unlimited'
        ELSE CAST(mf.[max_size]*8/1024 AS NVARCHAR(25)) + ' MB'
    END AS [MaxSize],
    CASE [is_percent_growth]
        WHEN 0 THEN CONVERT(VARCHAR(6), CAST(mf.growth*8/1024 AS BIGINT)) + ' MB'
        WHEN 1 THEN CONVERT(VARCHAR(6), CAST(mf.growth AS BIGINT)) + '%'
    END AS [GrowthIncrement]
FROM sys.databases db
LEFT JOIN sys.master_files mf ON mf.database_id = db.database_id
where mf.name like 'aspnetdb%'

另一个问题是,在这种状态下,您无法更改自动增长。但是你可以改变大小。因此,通过增加大小然后引入自动增长,您可以解决问题。

ALTER DATABASE aspnetdb MODIFY FILE (
    NAME = aspnetdb_log
    , SIZE = 1GB
) --this fixes the problem
GO
ALTER DATABASE aspnetdb MODIFY FILE (
    NAME = aspnetdb_log
    , SIZE = 1025MB
    , MAXSIZE = UNLIMITED
    , FILEGROWTH = 10MB
) -- now we have autogrowth
GO
USE aspnetdb
DBCC SHRINKFILE(aspnetdb_log,1) --now we can shrink the DB back to a sane minimum since autogrowth is in place
GO

关于sql-server - 事务日志已满(由于没有)...但此数据库处于简单恢复模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56712568/

相关文章:

sql - SSRS 日历每个月的 6 周 7 天范围

sql - 在没有日志的情况下进行 SQL SERVER 数据库备份

asp.net - 为 Web 应用程序(角色、用户)初始化 `aspnetdb` 数据库的推荐方法?

SQL 替换所有 NULL

sql - 哪个 RDBMS 具有最丰富的 ANSI-SQL 超集?

sql - 根据其他几列的条件对不同的一列进行计数

sql-server - 如何在 SQL Server 2008 中查看事务日志

sql-server - 从损坏的 SQL Server 数据库中恢复事务日志

database - 将aspnetdb.mdf与我自己的数据库合并(自动生成)