This is the 3rd article of the Free SharePoint Backups series. If you haven’t already, check out:
- Article 1: Back up Site Collections automatically.
- Article 2:Perform a Farm-level backup automatically.
In the 3rd article, we’ll talk about some of the other things that need to be backed up on a SharePoint server. I have scripts for these too!
There are two primary components besides the sites that need to be backed up. You may never use these but they take up little space and would come in handy in some disaster recovery scenarios. The two components are:
- The IIS metabase: The metabase is a repository for most Internet Information Services (IIS) configuration values.
- The 12 hive: The 12 hive is a folder location that contains templates, themes, features, etc for SharePoint. Its especially important to back this up if you’ve made cuztomizations.
Note: This applies to IIS6 only. IIS 7.0 uses XML to store configuration data, more on that later.
I’ll show you the batch file and then explain it. Here it is
@ECHO OFF ECHO ================================================ ECHO Backup Script For Office SharePoint Server 2007 ECHO Written By: Wahid Saleemi ECHO ================================================ cscript C:\Windows\System32\iisback.vbs /backup /b sharepoint /overwrite COPY /Y C:\Windows\System32\inetsrv\Metaback\sharepoint.* G:\Backups\IIS robocopy "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12" G:\Backups\12\ /MIR /ZB /SEC /V /LOG:D:\BackupBatch\12hive.log cscript D:\BackupBatch\reportlog.vbs
This batch file calls iisback.vbs, which should be installed already. It will name the backup “sharepoint.” For details on how it works, see this TechNet article: Backing Up IIS Configurations using iisback.vbs
Next, we use a simple COPY command to copy the backup files to an alternate location. In my example its the G:\Backups\IIS folder. I use another backup utility to archive this to a remote disk library.
Then, we’ll use robocopy to copy the 12 hive. Robocopy is a very useful app! It comes with Windows Server 2008 but if you’re still on 2003 you can download it from Microsoft. The example above assumes SharePoint is installed in its default location.
Finally, we run a vbscript similar to the last post that will send us the report to our email so we can review it. Here’s the vbscript.
'-------------------- ' Send Email '-------------------- Dim FSO, objShell Dim strVirt, strPath, strReportTo Dim strFileName, strTempFile, strLogFile Dim dtmThisMinute, dtmThisHour Dim dtmThisDay, dtmThisMonth, dtmThisYear 'dtmThisSecond = PadDigits(Second(Now), 2) 'dtmThisMinute = PadDigits(Minute(Now), 2) 'dtmThisHour = PadDigits(Hour(Now), 2) 'dtmThisDay = PadDigits(Day(Now), 2) 'dtmThisMonth = PadDigits(Month(Now), 2) 'dtmThisYear = Year(Now) ' Define consts Const cdoSendUsingMethod = "http://schemas.microsoft.com/cdo/configuration/sendusing" Const cdoSendUsingPort = 2 Const cdoSMTPServer = "http://schemas.microsoft.com/cdo/configuration/smtpserver" ' This is the sender of the report strVirt = "http://sharepoint.domain.com" strSMTPServer = "mailserver1" strReportTo = "email@example.com" strFrom = "firstname.lastname@example.org" strLogFile = "D:\BackupBatch\12hive.log" ' This is the subject strSubject = "SharePoint IIS/12 Backup Report for " & dtmThisYear & "-" & dtmThisMonth & "-" & dtmThisDay & "-" & dtmThisHour Set objMessage = CreateObject("CDO.Message") Set objConfig = CreateObject("CDO.Configuration") Set objFields = objConfig.Fields With objFields .Item(cdoSendUsingMethod) = cdoSendUsingPort .Item(cdoSMTPServer) = strSMTPServer .Update End With With objMessage Set .Configuration = objConfig .To = strReportTo .From = strFrom .Subject = strSubject .AddAttachment strLogFile .HTMLBody = "Attached is your IIS and 12 Hive backup for " & strVirt End With objMessage.Send Set objMessage = Nothing Set objConfig = Nothing Set objFields = Nothing strHTMLBody = vbNullString strFrom = vbNullString strSubject = vbNullString arrEmailAddress = vbNullString intArraySize = vbNullString
Regarding IIS 7.0 (Windows Server 2008) and the metabase: IIS 7.0 doesn’t use a metabase. It uses the applicationHost.config file. You can read Robert McCurray’s Blog for more details. So, for Windows Server 2008, instead of using the script above, use the one below. It’s Robert McCurray’s script plus some additions:
@echo offcls DEL /Y %WinDir%\System32\Inetsrv\Backups\* pushd "%WinDir%\System32\inetsrv" echo.| date | find /i "current">datetime1.tmp echo.| time | find /i "current">datetime2.tmp for /f "tokens=1,2,3,4,5,6" %%i in (datetime1.tmp) do ( echo %%n>datetime1.tmp ) for /f "tokens=1,2,3,4,5,6" %%i in (datetime2.tmp) do ( echo %%m>datetime2.tmp ) for /f "delims=/ tokens=1,2,3" %%i in (datetime1.tmp) do ( set TMPDATETIME=%%k%%i%%j ) for /f "delims=:. tokens=1,2,3,4" %%i in (datetime2.tmp) do ( set TMPDATETIME=D%TMPDATETIME%T%%i%%j%%k%%l ) appcmd add backups %TMPDATETIME% del datetime1.tmp del datetime2.tmp set TMPDATETIME= popd echo. COPY /Y %WinDir%\System32\Inetsrv\Backups\* G:\Backups\IIS robocopy "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12" G:\Backups\12\ /MIR /ZB /SEC /V /LOG:D:\BackupBatch\12hive.log cscript D:\BackupBatch\reportlog.vbs
As you can see, even with built-in tools and at no cost, you can still design a backup solution that is somewhat robust. This is a good starting point. However, for a larger production environment, you should really look at a 3rd party backup solution. We’ll look at some of these in the last post of this series.