title: Shrinklog all user databases in SQL2008
body: <p>Hi   I am using this script in the process of weekly maintenance, suggest best approach/scripts to do shrinklog. Currently am getting an error with the below script</p>
  
  <pre><code>declare @s nvarchar(4000)
  set @s= '
          if ''?'' not in (''tempdb'',''master'',''model'',''msdb'') 
          begin
              use [?] 
              Alter database [?] SET Recovery simple
          end '
  
  exec sp_msforeachdb @s
  set @s= '
          if ''?'' not in (''tempdb'',''master'',''model'',''msdb'') 
          begin     
              use [?]  
              Declare @LogFileLogicalName sysname
              select @LogFileLogicalName=Name from sys.database_files where Type=1
              DBCC Shrinkfile(@LogFileLogicalName,1) 
          end'
  exec sp_msforeachdb @s
  </code></pre>
  
  <p>Error Description:</p>
  
  <blockquote>
    <p>ShrinkLog Execute SQL Task     Description: Executing the query "declare @s nvarchar(4000)  set @s= '        ..." failed with the following error: "Option 'RECOVERY' cannot be set in database 'tempdb'.  Cannot shrink log file 2 (DBServices_Log) because total number of logical log files cannot be fewer than 2.  DBCC execution completed. If DBCC printed error messages, contact your system administrator.  </p>
  </blockquote>
  
  <p>note: I am avoiding tempdb(all System db) in my script, but error message shows tempdb?</p>