日期:2014-05-18  浏览次数:20589 次

事务日志已满 请参阅sys.databases中的log_reuse_wait_desc列
我把一个表大量数据insert   into   到另一个数据库的表时,提示
数据库   'webdisk '   的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅   sys.databases   中的   log_reuse_wait_desc   列。  
现在   是不能改insert语句和程序结构了,有没有办法解决这个问题

------解决方案--------------------
--select * from sysfiles
--1. 假設資料庫IEERP 資料檔iedata1(邏輯名稱), log檔ielog1(邏輯名稱)

--2.執行下列指令(各步驟都設定資料庫為IEERP):
dbcc shrinkfile(IEDB3_Log,notruncate)
dbcc shrinkfile(IEDB3_Log,truncateonly)
create table t1 (char1 char(4000))
go
declare @i
int select @i = 0
while (1 = 1)
begin
while (@i < 100)
begin
insert into t1 values ( 'a ') select @i = @i +1
end
truncate table t1
backup log ERPDB with truncate_only
end
go

--此段程式為無權迴圈, 請視log大小 執行約數分鐘或數小時再stop(一般而
--言,2~10分鐘應已足夠)

dbcc shrinkfile(IEDB3_Log,truncateonly)

drop table t1

-- 3.查看log file size 應已Shrink成功



------解决方案--------------------
--先备份数据库

--截断事务日志
backup log 数据库名 with no_log
go

--收缩数据库
dbcc shrinkdatabase(数据库名)
go