Скрипт для усечения файлов логов всех баз на одном экземпляре MS SQL Server 2005

Не секрет MS  SQL Serever пишет логи своей работы. Иногда файлы разрастаются до очень больших размеров. Конечно можно ограничить их рост в настройках самой базы данных, но если на экземпляре набор баз меняется и нет выделенного человека, который бы следил за тем за всем єтими настройками, то на помощь приходит вот такой вот простой скрипт.

</p>
<p>Declare @DBName varchar(50),  @SQL varchar(2000), @Size int;<br />
Set @Size = 16<br />
Declare c Cursor for<br />
SElect name From sys.databases<br />
Open C<br />
fetch next From C into @DBName<br />
while @@fetch_status = 0<br />
  begin<br />
  print '#'<br />
  set @SQL= 'use '+@DBName+<br />
  ' Declare @DBLogFile varchar(50), @SQL varchar(500);<br />
  Declare F cursor<br />
  for SElect Name From sys.database_Files<br />
  Where type = 1<br />
  Open F<br />
  fetch next From F into @DBLogFile<br />
  While @@fetch_status = 0<br />
  begin<br />
  set @SQL='+' ''ALTER DATABASE '+@DBName+'<br />
  SET RECOVERY SIMPLE;</p>
<p>  DBCC SHRINKFILE (''+@DBLogFile+'' , '+<br />
  cast(@Size as varchar)+');</p>
<p>  ALTER DATABASE '+@DBName+'<br />
  SET RECOVERY FULL;'';'+<br />
  '  exec(@SQL);<br />
  print @SQL;'+<br />
  'fetch next From F into @DBLogFile<br />
   end '+<br />
  'Close F '+<br />
  'Deallocate F';<br />
  print @SQL;<br />
  Exec(@SQL)<br />
  fetch next From C into @DBName;<br />
end<br />
Close C<br />
Deallocate C</p>
<p>

Данный скрипт из системных таблиц курсором отбирает названия баз данных, которое есть на данный момент, формирует строку скрипта усечения файла логов и и командой Exec  выполняет его для каждой базы данных.

Данный скрипт можно выполнять MS SQL Server Agent или просто сохранить в файл и выполнять как назначенное задание в самой операционной среде. В Windows выполнить SQL  запрос из файла можно вот такой вот командой.  Например, сохранили в файл “SQLClear.sql”

</p>
<p>sqlcmd -S 192.168.0.1  -i &quot;d:\SQLClear.sql&quot; -o &quot;d:\Logs\192.168.0.1.txt&quot;</p>
<p>

где 192.168.0.1  – экземпляр SQL SERVER

Share

Tags: , ,

One Response to “Скрипт для усечения файлов логов всех баз на одном экземпляре MS SQL Server 2005”

  1. Jelena пишет:

    Finnidg this post. It’s just a big piece of luck for me.

Leave a Reply