declare @db nvarchar(4000),@str varchar(4000),@tmp1 nvarchar (500)
,@tmp2 nvarchar (500) ,@tmp3 nvarchar (100)
select @str='',@tmp1='',@tmp2='@log_name nvarchar(60) output'
SELECT @db=isnull(@db+',','') + name FROM master..sysdatabases
where name not in ('master','tempdb','model','msdb','northwind','pubs')
if @db is not null
set @db=@db+','
while (charindex(',',@db)>0)
begin
declare @name varchar(50),@log_name nvarchar(60)
set @name=left(@db,charindex(',',@db)-1)
set @tmp1='select @log_name= name from '+@name+'..sysfiles where filename like ''%ldf'''
exec SP_EXECUTESQL @tmp1,@tmp2,@log_name=@tmp3 output
select @str=@str+'use '+@name+' dbcc shrinkfile('''''+@tmp3+''''') '
set @db=stuff(@db,1,charindex(',',@db),'')
end
--select @str
exec @str1、exec 执行时提示 不是有效的标识符。
可是我把字符串拿出来由可以exec ,不知道是怎么回事?
2、这是我自己想出来的只收缩日志的方法,不知道有没有其他更好的方法。
可以用这个来筛选 那些占用太多空间的日志的数据库。
这段时间一下子要我管理n台数据库服务器,白天又不能做,只有搞成作业的方式。
被逼出来想的懒办法啊,如果一个一个收缩,老火的很。