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

当前运行的Sql Server版本为:Sql Server 10.5.1617
用户数据库日志文件很大(ldf 文件大约是 mdf 文件大小的 400 倍)。
恢复模式当前设置为“完整”。我明白那是什么 - 我不需要时间点恢复。
如果我只是从 Sql Server Management Studio 中将恢复模型更改为“简单”:

...并单击确定以保存更改 - 我是否会以任何方式冒险使用我当前的数据库?或者 Sql Server 可以对实时数据库进行这样的更改吗?日志文件会自动缩小吗?
谢谢你的建议,
标记
当数据库处于低活动状态时(一天结束,过夜,早上的第一件事),我会这样做。我永远不会建议在工作时间对实时数据库进行这样的更改。将数据库更改为只读或确保没有用户/应用程序访问它可能是一个好主意。
运行有问题的数据库/日志文件的完整备份,同时仍处于完整恢复模式。这将为您提供一个起点,以防万一出现任何问题,您可以将其恢复。
切换到简单恢复,我不喜欢使用 GUI,我会编写脚本。
这是 MSDN 上的一篇很棒的文章,内容涉及更改备份模型时要考虑的事项: 从完整或大容量日志恢复模型切换的注意事项。
当您切换到简单恢复时,当数据库上发生 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 事件的成本非常高。
| 归档时间: |
|
| 查看次数: |
54559 次 |
| 最近记录: |