Sql Server 中从完全恢复改为简单恢复可以吗

use*_*617 5 sql-server-2008 sql-server

我有一个旧数据库 - 几年前由 ASP.Net 2 应用程序自动设置的用户成员资格/角色:

SS1

当前运行的Sql Server版本为:Sql Server 10.5.1617

用户数据库日志文件很大(ldf 文件大约是 mdf 文件大小的 400 倍)。

恢复模式当前设置为“完整”。我明白那是什么 - 我不需要时间点恢复。

如果我只是从 Sql Server Management Studio 中将恢复模型更改为“简单”:

SS2

...并单击确定以保存更改 - 我是否会以任何方式冒险使用我当前的数据库?或者 Sql Server 可以对实时数据库进行这样的更改吗?日志文件会自动缩小吗?

谢谢你的建议,

标记

Kri*_*yer 6

当数据库处于低活动状态时(一天结束,过夜,早上的第一件事),我会这样做。我永远不会建议在工作时间对实时数据库进行这样的更改。将数据库更改为只读或确保没有用户/应用程序访问它可能是一个好主意。

  • 运行有问题的数据库/日志文件的完整备份,同时仍处于完整恢复模式。这将为您提供一个起点,以防万一出现任何问题,您可以将其恢复。

  • 切换到简单恢复,我不喜欢使用 GUI,我会编写脚本。

这是 MSDN 上的一篇很棒的文章,内容涉及更改备份模型时要考虑的事项从完整或大容量日志恢复模型切换的注意事项

  • 如果业务可以接受并且不需要严格的 SLA,那么在工作时间更改恢复模型是完全没问题的。你只是失去了他已经说过他没问题的可恢复性方面。我不会出于任何原因将其切换为只读,这将导致服务中断,而更改恢复模型则不会。 (2认同)

Kin*_*hah 5

当您切换到简单恢复时,当数据库上发生 CHECKPOINT(作为后台任务 - 自动或手动运行 CHECKPOINT)时,日志将被截断。

它只是意味着日志部分将被 sql server重用,而不是增长以保留所有事务的记录(就像在进行日志备份之前的完整恢复一样)。

这并不意味着您将回收磁盘空间。

为了回收磁盘空间,您必须缩小日志文件。

请在用户活动最少的较少/安静的时间进行

use master

go

--- first take a FULL backup

backup database db_name to disk = 'D:\backups\db_name_FULL.bak' with stats =10, compression, init

go

use db_name

go

---- manually issue a checkpoint
checkpoint

go
checkpoint -- run twice so the log file wraps around

go

----- now shrink the log file to reclaim disk space

dbcc shrinkfile(db_name_LOG,xxMB)  -- xxMB is the size that you want.
go
Run Code Online (Sandbox Code Playgroud)

** 确保日志文件的大小不要太小,因为它最终会增长。sql server 触发 AUTO-GROWTH 事件的成本非常高。