我有一个数据库 [My DB],它包含以下信息:
SQL Server 2008
MDF 大小:30 GB
LDF 大小:67 GB
我想尽可能地缩小日志文件,所以我开始寻求弄清楚如何做到这一点。警告:我不是 DBA(甚至不是接近 DBA),并且一直在通过这个任务取得进展。
首先,我刚刚进入 SSMS、数据库属性、文件,并将初始大小 (MB) 值编辑为 10。这将日志文件减少到 62 GB(不完全是我输入的 10 MB)。因此,我附加了 SQL Profiler,看到正在调用 DBCC SHRINKFILE。然后我将该命令输入到查询编辑器中,结果如下。
DBCC SHRINKFILE (N'My DB_Log' , 10)
输出是:
Cannot shrink log file 2 (My DB_Log) because the logical log file located at the end of the file is in use.
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
------ ----------- ----------- ----------- ----------- --------------
8 2 8044104 12800 8044104 12800
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
然后我对此进行了一些研究并发现了这一点:
http://support.microsoft.com/kb/907511
这表示我需要在收缩文件之前备份日志文件,以便释放虚拟日志文件并且收缩文件可以完成它的工作 - 我不知道这意味着什么......我只是在这里解释:)
所以,我想我会尝试备份日志文件,然后执行 DBCC SHRINKFILE(我将新的日志文件大小更改为 12800,因为这是在之前的 DBCC SHRINKFILE 命令的输出中确定的 MinimumSize)
BACKUP LOG [My DB] TO DISK = 'D:\SQLBackup\20110824-MyDB-Log.bak'
GO
DBCC SHRINKFILE (N'My DB_Log' , 12800)
GO
结果和第一次一样。我只能将日志文件缩小到 62 GB。
我不确定我做错了什么以及接下来应该尝试什么。