Wednesday, May 29, 2013

How to SHRINKFILE and TRUNCATEFILE in SQL Server 2008.

http://www.codeproject.com/Articles/261132/Truncate-Shrink-Transaction-Log-files-on-SQL-Serve

Updated working Script


 --Step1--  
 CREATE TABLE #TransactionLogFiles (DatabaseName VARCHAR(150), LogFileName VARCHAR(150))  
 INSERT INTO #TransactionLogFiles (DatabaseName, LogFileName)  
   SELECT b.[name], a.[name]FROM sys.master_files a  
   JOIN sys.databases b  
   ON a.database_id = b.database_id  
   WHERE a.[type] = 1 AND b.[name] NOT IN ('master','tempdb','model','msdb')  
     
   --Step 2 --  
     
   DECLARE @DataBase VARCHAR(128)  
 DECLARE @SqlScript VARCHAR(MAX)   
 -- step 2. insert all the database name and corresponding log files' names into the temp table  
 DECLARE DataBaseList CURSOR FOR   
 SELECT DatabaseName, LogFileName FROM #TransactionLogFiles  
 OPEN DataBaseList FETCH  
 NEXT FROM DataBaseList INTO @DataBase  
 WHILE @@FETCH_STATUS <> -1   
 BEGIN  
   
 SET @SqlScript = 'USE [' + @DataBase + '] INSERT INTO #TransactionLogFiles(DatabaseName, LogFileName) SELECT '''  
 + @DataBase + ''', Name FROM sysfiles WHERE FileID=2'  
 --SELECT @SqlScript  
 EXEC(@SqlScript)   
 FETCH NEXT FROM DataBaseList INTO @DataBase END  
   
 DEALLOCATE DataBaseList  
 --Step 3 --  
 SET @SqlScript = ''  
 DECLARE TransactionLogList CURSOR FOR  
 SELECT DatabaseName, LogFileName FROM #TransactionLogFiles  
 DECLARE @LogFile VARCHAR(128)  
    
 OPEN TransactionLogList FETCH  
 NEXT FROM TransactionLogList INTO @DataBase, @LogFile  
 WHILE @@FETCH_STATUS <> -1  
 BEGIN  
 SELECT @SqlScript = @SqlScript + 'USE [' + @DataBase + '] '  
 + 'ALTER DATABASE [' + @DataBase + '] SET RECOVERY SIMPLE WITH NO_WAIT '  
 + 'DBCC SHRINKFILE(N''' + @LogFile + ''', 1) '  
 + 'ALTER DATABASE [' + @DataBase + '] SET RECOVERY FULL WITH NO_WAIT '  
    
 FETCH NEXT FROM TransactionLogList INTO @DataBase, @LogFile END  
 DEALLOCATE TransactionLogList  
 EXEC(@SqlScript)   
   
 -- step 4. clean up  
 DROP TABLE #TransactionLogFiles  

Tuesday, April 2, 2013

Simple Powershell Script to take backup of all site collections in all webapplications in a farm


$webapps = Get-SPWebApplication
foreach($app in $webapps)
{
    $siteCollections = $app.Sites
  
    foreach($sc in $siteCollections)
    {
        $loc="c:\Backups_sitecolls\"+$sc.Url.Substring(7).Replace(':','')+".bak";
        $loc=$loc.Replace('/','_');
        "backing up " + $sc.Url
        Backup-SPSite -Identity $sc.Url -Path $loc -Confirm -Force -NoSiteLock
      
    }
}
This script clears the http:// section of url and replaces and replaces / with _ in the file name of site collection.
This needs a folder "c:\Backups_sitecolls\".
Replace : before port number with empty character.