sql2005数据库日志文件40多G,数据文件2G多,如何减少日志文件?

时间:2022-01-07 20:46:21
我试过了N多方法:
把库设置成简单模式。


declare @dbname varchar(50)
declare temp_cur cursor scroll for select name from sysdatabases
open temp_cur
fetch first from temp_cur into @dbname
while @@fetch_status =0 
begin
  exec ('backup log '+@dbname+' with no_log')
  exec ('dbcc shrinkdatabase('+@dbname+')')
  exec ('dbcc checkcatalog ('+@dbname+')')
  exec ('dump transaction '+@dbname+' with no_log')
  fetch next from temp_cur into @dbname
end
close temp_cur
deallocate temp_cur


1.清空日志
  DUMP TRANSACTION 库名 WITH NO_LOG   
2.截断事务日志:
  BACKUP LOG 数据库名 WITH NO_LOG
3. DBCC SHRINKFILE(1) 其中的1、2是SQL中的mdf 和ldf文件


可是日志文件还是那么大!求助?

17 个解决方案

#1


引用楼主 zjl8008 的回复:
我试过了N多方法:
把库设置成简单模式。

SQL code


declare @dbname varchar(50)
declare temp_cur cursor scroll for select name from sysdatabases
open temp_cur
fetch first from temp_cur into @dbname
while @@fet……

1.清空日志
  DUMP TRANSACTION 库名 WITH NO_LOG   
2.截断事务日志:
  BACKUP LOG 数据库名 WITH NO_LOG
3. DBCC SHRINKFILE(1) 其中的1、2是SQL中的mdf 和ldf文件
如果1表示mdf
你就填2
因为你要清理的是日志
或者直接
DBCC SHRINKFILE('数据库名_log')

#2


该回复于2012-02-07 11:40:00被版主删除

#3


可以试着重启下SQL服务看看日志文件的大小。

#4


你的数据库下执行从下三个脚本,并返回记录贴上来

贴一下这个结果:
select log_reuse_wait_desc,* from sys.databases
where name='你的库名字'

再贴一下这个结果:
dbcc loginfo

再贴一下这个结果(只贴你log大的那个数据库的):
DBCC SQLperf(Logspace)

#5


引用 4 楼 perfectaction 的回复:
在你的数据库下执行从下三个脚本,并返回记录贴上来

贴一下这个结果:
select log_reuse_wait_desc,* from sys.databases
where name='你的库名字'

再贴一下这个结果:
dbcc loginfo

再贴一下这个结果(只贴你log大的那个数据库的):
DBCC SQLperf(Logspace)

又有学习的机会了 sql2005数据库日志文件40多G,数据文件2G多,如何减少日志文件?

#6


引用 4 楼 perfectaction 的回复:
在你的数据库下执行从下三个脚本,并返回记录贴上来

贴一下这个结果:
select log_reuse_wait_desc,* from sys.databases
where name='你的库名字'

再贴一下这个结果:
dbcc loginfo

再贴一下这个结果(只贴你log大的那个数据库的):
DBCC SQLperf(Logspace)

让perfectaction久等了,因为我不能操作和看到客户的数据库,我把命令发给他,等他把结果反馈回来再回帖

#7


分离数据库,然后重命名日志文件,然后用数据库文件附加数据库,就产生一个新的数据库日志应该是512K

#8


操作后重启下服务看看。

#9


先分离数据库,再删除日志,再挂接一个新的日志文件就可以了

--分离数据库文件
EXEC   sp_detach_db   @dbname   =   'RedacsDB'   

--删除日志文件后,重新挂接数据库
  EXEC   sp_attach_single_file_db   @dbname   =   'RedacsDB',     
        @physname   =   'D:\Data\RedacsDB.mdf'   

#10


该回复于2012-02-10 11:40:37被版主删除

#11


顶贴,我也有这个问题

#12


两步搞定
1.设置为简单模式(如果是完整模式,那么需要先备份一下BACKUP LOG 数据库名字 to disk='d:\2.bak'

2.DBCC SHRINKFILE (数据库名_log,10)
“数据库名_log” 查看对应的日志逻辑名字
10表示收缩到10M

#13


引用 4 楼 perfectaction 的回复:
在你的数据库下执行从下三个脚本,并返回记录贴上来

贴一下这个结果:
select log_reuse_wait_desc,* from sys.databases
where name='你的库名字'

再贴一下这个结果:
dbcc loginfo

再贴一下这个结果(只贴你log大的那个数据库的):
DBCC SQLperf(Logspace)

chnyo_his      是需要的库
第1个语句结果是
log_reuse_wait_de..  name  database_id  source_database_..
REPLICATION       chnyo_his      5   null

#14


第三个结果导出txt

master,0.4921875,62.69841,0
tempdb,0.4921875,43.94841,0
model,0.4921875,53.96825,0
msdb,0.4921875,57.93651,0
chnyo_his,49489.36,99.87882,0
oldhis,0.484375,59.77822,0
his_old,0.9921875,48.47441,0
his_emr,0.9921875,39.56693,0
his_old3,0.9921875,53.64173,0
his_emr1,0.9921875,38.33661,0
chnyo_his_cs,0.484375,74.89919,0
his_mh,0.484375,45.3629,0

#15


第二个结果太长了,放网上下载吧
http://www.chnyo.com/mohe.rar
第三个结果导出txt

master,0.4921875,62.69841,0
tempdb,0.4921875,43.94841,0
model,0.4921875,53.96825,0
msdb,0.4921875,57.93651,0
chnyo_his,49489.36,99.87882,0
oldhis,0.484375,59.77822,0
his_old,0.9921875,48.47441,0
his_emr,0.9921875,39.56693,0
his_old3,0.9921875,53.64173,0
his_emr1,0.9921875,38.33661,0
chnyo_his_cs,0.484375,74.89919,0
his_mh,0.484375,45.3629,0

#16


引用 13 楼 zjl8008 的回复:
chnyo_his 是需要的库
第1个语句结果是
log_reuse_wait_de.. name database_id source_database_..
REPLICATION chnyo_his 5 null


这个应该是问题所在,因为有replicaction,发布订阅传不下去,导致不能截断日志。
第二个结果也证明了这一点。

所以要解决这个问题,先看一下这个库是不是有发布订阅。
如果有,看看为什么推不下去。
如果没有,那么说明这个库曾经做过发布订阅,但未安正常步骤删除,现在需要特殊处理。

先看看有没有发布订阅吧。

#17


多谢,perfectaction,等看一下

#1


引用楼主 zjl8008 的回复:
我试过了N多方法:
把库设置成简单模式。

SQL code


declare @dbname varchar(50)
declare temp_cur cursor scroll for select name from sysdatabases
open temp_cur
fetch first from temp_cur into @dbname
while @@fet……

1.清空日志
  DUMP TRANSACTION 库名 WITH NO_LOG   
2.截断事务日志:
  BACKUP LOG 数据库名 WITH NO_LOG
3. DBCC SHRINKFILE(1) 其中的1、2是SQL中的mdf 和ldf文件
如果1表示mdf
你就填2
因为你要清理的是日志
或者直接
DBCC SHRINKFILE('数据库名_log')

#2


该回复于2012-02-07 11:40:00被版主删除

#3


可以试着重启下SQL服务看看日志文件的大小。

#4


你的数据库下执行从下三个脚本,并返回记录贴上来

贴一下这个结果:
select log_reuse_wait_desc,* from sys.databases
where name='你的库名字'

再贴一下这个结果:
dbcc loginfo

再贴一下这个结果(只贴你log大的那个数据库的):
DBCC SQLperf(Logspace)

#5


引用 4 楼 perfectaction 的回复:
在你的数据库下执行从下三个脚本,并返回记录贴上来

贴一下这个结果:
select log_reuse_wait_desc,* from sys.databases
where name='你的库名字'

再贴一下这个结果:
dbcc loginfo

再贴一下这个结果(只贴你log大的那个数据库的):
DBCC SQLperf(Logspace)

又有学习的机会了 sql2005数据库日志文件40多G,数据文件2G多,如何减少日志文件?

#6


引用 4 楼 perfectaction 的回复:
在你的数据库下执行从下三个脚本,并返回记录贴上来

贴一下这个结果:
select log_reuse_wait_desc,* from sys.databases
where name='你的库名字'

再贴一下这个结果:
dbcc loginfo

再贴一下这个结果(只贴你log大的那个数据库的):
DBCC SQLperf(Logspace)

让perfectaction久等了,因为我不能操作和看到客户的数据库,我把命令发给他,等他把结果反馈回来再回帖

#7


分离数据库,然后重命名日志文件,然后用数据库文件附加数据库,就产生一个新的数据库日志应该是512K

#8


操作后重启下服务看看。

#9


先分离数据库,再删除日志,再挂接一个新的日志文件就可以了

--分离数据库文件
EXEC   sp_detach_db   @dbname   =   'RedacsDB'   

--删除日志文件后,重新挂接数据库
  EXEC   sp_attach_single_file_db   @dbname   =   'RedacsDB',     
        @physname   =   'D:\Data\RedacsDB.mdf'   

#10


该回复于2012-02-10 11:40:37被版主删除

#11


顶贴,我也有这个问题

#12


两步搞定
1.设置为简单模式(如果是完整模式,那么需要先备份一下BACKUP LOG 数据库名字 to disk='d:\2.bak'

2.DBCC SHRINKFILE (数据库名_log,10)
“数据库名_log” 查看对应的日志逻辑名字
10表示收缩到10M

#13


引用 4 楼 perfectaction 的回复:
在你的数据库下执行从下三个脚本,并返回记录贴上来

贴一下这个结果:
select log_reuse_wait_desc,* from sys.databases
where name='你的库名字'

再贴一下这个结果:
dbcc loginfo

再贴一下这个结果(只贴你log大的那个数据库的):
DBCC SQLperf(Logspace)

chnyo_his      是需要的库
第1个语句结果是
log_reuse_wait_de..  name  database_id  source_database_..
REPLICATION       chnyo_his      5   null

#14


第三个结果导出txt

master,0.4921875,62.69841,0
tempdb,0.4921875,43.94841,0
model,0.4921875,53.96825,0
msdb,0.4921875,57.93651,0
chnyo_his,49489.36,99.87882,0
oldhis,0.484375,59.77822,0
his_old,0.9921875,48.47441,0
his_emr,0.9921875,39.56693,0
his_old3,0.9921875,53.64173,0
his_emr1,0.9921875,38.33661,0
chnyo_his_cs,0.484375,74.89919,0
his_mh,0.484375,45.3629,0

#15


第二个结果太长了,放网上下载吧
http://www.chnyo.com/mohe.rar
第三个结果导出txt

master,0.4921875,62.69841,0
tempdb,0.4921875,43.94841,0
model,0.4921875,53.96825,0
msdb,0.4921875,57.93651,0
chnyo_his,49489.36,99.87882,0
oldhis,0.484375,59.77822,0
his_old,0.9921875,48.47441,0
his_emr,0.9921875,39.56693,0
his_old3,0.9921875,53.64173,0
his_emr1,0.9921875,38.33661,0
chnyo_his_cs,0.484375,74.89919,0
his_mh,0.484375,45.3629,0

#16


引用 13 楼 zjl8008 的回复:
chnyo_his 是需要的库
第1个语句结果是
log_reuse_wait_de.. name database_id source_database_..
REPLICATION chnyo_his 5 null


这个应该是问题所在,因为有replicaction,发布订阅传不下去,导致不能截断日志。
第二个结果也证明了这一点。

所以要解决这个问题,先看一下这个库是不是有发布订阅。
如果有,看看为什么推不下去。
如果没有,那么说明这个库曾经做过发布订阅,但未安正常步骤删除,现在需要特殊处理。

先看看有没有发布订阅吧。

#17


多谢,perfectaction,等看一下