目前,我有几个不再处于活动状态的数据库(没有新条目),但是我的公司不想删除该数据库,因为他们希望保留该数据库以供参考。
但是由于数据库巨大,我很难备份和还原。 (公司政策,必须不时备份和还原以测试数据库是否可行)。
所以我在想,我想缩小事务日志以减少处理所需的时间,这样做是否明智?强调,因为没有新条目。
仅供参考,事务文件(ldf)比实际数据库大小(mdf)大得多。
无论是建议还是不建议,甚至有更好的方法,请告诉我。
答案 0 :(得分:0)
我使用此脚本
DECLARE @DBName varchar(255)
DECLARE @LogName varchar(255)
DECLARE @DATABASES_Fetch int
DECLARE DATABASES_CURSOR CURSOR FOR
select distinct
name, db_name(s_mf.database_id) dbName
from
sys.master_files s_mf
where
s_mf.state = 0 and -- ONLINE
has_dbaccess(db_name(s_mf.database_id)) = 1 -- Only look at databases to which we have access
and db_name(s_mf.database_id) not in ('master','tempdb','model','msdb','distribution')
and db_name(s_mf.database_id) not like 'MSDB%'
and db_name(s_mf.database_id) not like 'Report%'
and type=1
order by
db_name(s_mf.database_id)
OPEN DATABASES_CURSOR
FETCH NEXT FROM DATABASES_CURSOR INTO @LogName, @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
exec ('USE [' + @DBName + '] ; DBCC SHRINKFILE (N''' + @LogName + ''' , 0, TRUNCATEONLY)')
FETCH NEXT FROM DATABASES_CURSOR INTO @LogName, @DBName
END
CLOSE DATABASES_CURSOR
DEALLOCATE DATABASES_CURSOR
答案 1 :(得分:0)
是的,这是个好主意。最简单的方法是先将“恢复模型”更改为“简单”,如下所示:
然后您可以使用任务;收缩;将事务日志空间减少到零的文件。有很多资源可以向您展示如何缩小文件,但是本文对它进行了很好的解释:
How to shrink the transaction log
通常不建议收缩文件,但是如果您不希望进行更多事务,则建议这样做。这样可以节省您的备份时间,并占用更少的磁盘空间。