25 sql-server
我有一个相当大的SQL Server数据库正在使用SIMPLE恢复模式.我们真的不需要第二次恢复,所以我希望我们保持这种模式.
由于某种原因,此数据库的事务日志非常庞大(410 GB),其中99%的空间未分配.
我试图使用(DBCC SHRINKFILE(MyDatabase_log,20000))缩小文件,但它似乎不起作用.
任何人都有关于为什么SIMPLE恢复模式数据库会有如此庞大的文件的任何提示?我真的很想让它缩小.
Rem*_*anu 25
这意味着你曾经有一个持续时间太长的单一事务,它迫使日志增长410GB.如果存在活动事务,则无法重用日志,因为无法删除回滚信息.这样的例子是,如果有人打开SSMS查询,启动事务,更新记录然后去度假.事务将处于活动状态并强制日志增长,直到最终提交或回滚.当事务最终结束时,最终可以回收使用的空间,留下一个巨大的空日志文件.
另一种情况是,如果您在单个事务中更新了大约200GB的数据.日志将存储更改的前后映像,因此占用了两倍的空间,并且无法重复使用,因为所有单个事务都是如此.
更新
我忽略了提到复制,它也是一个可以阻止日志截断的因素.镜像是一种分布式交易(技术上与"活动交易"相同,但DTC含义使其成为一个独特的案例).完整的列表和解释是可以延迟日志截断的因素.
你错过了一个论点dbcc shrinkfile
:
dbcc shrinkfile (MyDatabase_log, 20000, TRUNCATEONLY)
Run Code Online (Sandbox Code Playgroud)
NOTRUNCATE
是默认值,它将已分配的块移动到未分配空间的开头.TRUNCATEONLY
删除未分配的空间.因此,如果您执行a NOTRUNCATE
后跟a TRUNCATEONLY
,则会获得一个精简日志.
归档时间: |
|
查看次数: |
62788 次 |
最近记录: |