我认为自己是一个非常有经验的SQL人员。但是我没有做这两件事:
DBCC sqlperf(日志空间)
返回:
Database Name Log Size (MB) Log Space Used (%) Status ByBox 1964.25 30.0657 0
以下不适用于SQL 2008
DUMP TRANSACTION ByBox WITH TRUNCATE_ONLY
运行以下命令也无济于事
DBCC SHRINKFILE ('ByBox_1_Log' , 1) DBCC shrinkdatabase(N'bybox')
我已经尝试过备份。我还尝试过将数据库的属性设置为-“恢复模型”同时设置为“完整”和“简单”,以及所有上述各项的组合。我还尝试设置对SQL Server 2005(我想使用我们的生产服务器进行匹配,因此使用此设置)和SQL Server 2008的兼容性。
不管我尝试什么,该日志仍为1964.25 MB,已使用了30%,并且仍在增长。
我希望日志回落到0%左右,并将日志文件的大小减小到100 MB,这已经足够了。我的数据库一定讨厌我。它只是忽略了我要求它执行的有关日志的所有操作。
进一步说明。生产数据库中有很多复制的表,当我使用以下命令在开发盒上执行还原时,这些表将关闭:
-- Clear out pending replication stuff exec sp_removedbreplication go EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1 go
试:
SELECT log_reuse_wait, log_reuse_wait_desc FROM sys.databases WHERE NAME='bybox'
退货
log_reuse_wait log_reuse_wait_desc 0 NOTHING
我该如何解决这个问题?
看着这个并将恢复模型设置为FULL,我尝试了以下操作:
USE master GO EXEC sp_addumpdevice 'disk', 'ByBoxData', N'C:\<path here>\bybox.bak' -- Create a logical backup device, ByBoxLog. EXEC sp_addumpdevice 'disk', 'ByBoxLog', N'C:\<path here>\bybox_log.bak' -- Back up the full bybox database. BACKUP DATABASE bybox TO ByBoxData -- Back up the bybox log. BACKUP LOG bybox TO ByBoxLog
Processed 151800 pages for database 'bybox', file 'ByBox_Data' on file 3. Processed 12256 pages for database 'bybox', file 'ByBox_Secondary' on file 3. Processed 1 pages for database 'bybox', file 'ByBox_1_Log' on file 3. BACKUP DATABASE successfully processed 164057 pages in 35.456 seconds (36.148 MB/sec). Processed 2 pages for database 'bybox', file 'ByBox_1_Log' on file 4. BACKUP LOG successfully processed 2 pages in 0.056 seconds (0.252 MB/sec).
完美的!但事实并非如此。
DBCC SHRINKFILE(’ByBox_1_Log’,1)现在返回
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages 7 2 251425 251425 251424 251424
并且DBCC SQLPERF(LOGSPACE)仍然报告30%的使用率。
我想我可能不得不辞职,以为SQL Server 2008中很可能存在错误,或者我的日志文件已经以某种方式损坏。但是,我的数据库处于良好的工作状态,这使我认为存在错误 ( 对此 不满意) 。
找到了解决方案!
我向数据库中添加了数据负载,因此不得不扩展日志。然后,我删除了不需要的数据,以使数据库恢复到原来的状态。
备份和瞧,完美的0%日志。
因此,解决方案是使日志扩展。