Archive for July, 2006

Sichern einer SharePoint Datenbank

Friday, July 28th, 2006

Wer sich bei Microsoft die Windows SharePoint Services (WSS) herunterl„dt, erh„lt fr die Datenhaltung eine Microsoft Data Engine (MSDE) mitgeliefert, eigentlich ein vollwertiger SQL Server 2000, der aber zumindest um seine grafischen Administrationswerkzeuge beraubt wurde. In der gleichen Situation ist der Administrator eines Windows 2003 Small Business Server.

Wie mache ich jetzt am geschicktesten ein Backup von den SQL-Datenbanken? šber STSADM regelm„áig eine Sicherung einer Site zu machen, ist sicherlich eine Option (ich werde mich dazu demn„chst noch „uáern), aber sp„testens, wenn es mehrere Sites gibt, und vor allem nicht kontrolliert werden kann, wie und wann neue Sites angelegt werden, wird es mit einer Sicherung via STSADM schwierig.

Eine (aus Administrator-Sicht vernnftige) Variante ist die Sicherung der SQL-Datenbanken. Da mit der MSDE wenigstens das Administrationswerkzeug OSQL mitgeliefert wird, sind wir immerhin in der Lage, den SQL Server mit Befehlen zu fttern. Da bietet es sich doch an, eine Batchdatei anzufertigen, die regelm„áig eine Sicherung einer SQL-Datenbank anfertigt. Ein Batch zum Sichern kann so aussehen:

@ECHO OFF

REM ***********************************************************************************
REM
REM DBBACKUP
REM ========
REM
REM written by SPO/odi, 07/2006
REM
REM Backup the database or the transaction log of a SQL Server database using OSQL.
REM Runs also with MSDE and WMSDE.
REM
REM ***********************************************************************************

ECHO.
ECHO DBBACKUP
ECHO ——–
ECHO.
ECHO by SPO/odi, 07/2006
ECHO.

IF "%1"=="" GOTO SYNTAX
IF "%2"=="" GOTO SYNTAX
IF "%3"=="" GOTO SYNTAX
IF "%4"=="" GOTO SYNTAX

IF /I "%1"=="DB" GOTO BACKUP_DB
IF /I "%1"=="TRANS" GOTO BACKUP_TRANS

GOTO SYNTAX

:BACKUP_DB

SET DATABASE=%2
SET BACKUPPATH=%3
SET SERVER=%4

SET BACKUPFILE=%BACKUPPATH%\%DATABASE%.bak

SET BACKUPFILE=%BACKUPFILE:[=%
SET BACKUPFILE=%BACKUPFILE:]=%

IF "%SERVER%"=="" GOTO BACKUP_DB_NO_INSTANCE

OSQL -E -S %SERVER% -Q "Backup Database %DATABASE% to disk='%BACKUPFILE%' with init"

GOTO ENDE

:BACKUP_DB_NO_INSTANCE

OSQL -E -Q "Backup Database %DATABASE% to disk='%BACKUPFILE%' with init"

GOTO ENDE

:BACKUP_TRANS

SET DATABASE=%2
SET BACKUPPATH=%3
SET SERVER=%4

SET BACKUPFILE=%BACKUPPATH%\%DATABASE%.trn

SET BACKUPFILE=%BACKUPFILE:[=%
SET BACKUPFILE=%BACKUPFILE:]=%

IF "%SERVER%"=="" GOTO BACKUP_TRANS_NO_INSTANCE

OSQL -E -S %SERVER% -Q "Backup Transaction %DATABASE% to disk='%BACKUPFILE%' with init"

GOTO ENDE

:BACKUP_TRANS_NO_INSTANCE

OSQL -E -Q "Backup Transaction %DATABASE% to disk='%BACKUPFILE%' with init"

GOTO ENDE

:SYNTAX

ECHO Syntax:
ECHO.
ECHO DBBACKUP DB database backuppath servername : backup the database
ECHO.
ECHO DBBACKUP TRANS database backuppath servername : backup the transaction log
ECHO.
ECHO Example:
ECHO   DBBACKUP DB master c:ackup myserversharepoint
ECHO.
ECHO   Will backup the database 'master' from the SQL Server at 'myserversharepoint'
ECHO   to the directory 'c:ackup'.
ECHO.
ECHO If the databasename contains special characters like '-', use brackets around the
ECHO databasename ([my-db]).
ECHO.
:ENDE

SET DATABASE=
SET BACKUPPATH=
SET BACKUPFILE=
SET SERVER=

Die Wiederherstellung muss natrlich genauso funktionieren. Eine Batchdatei fr die Wiederherstellung so gesicherter Datenbanken, kann wie folgt aussehen:

@ECHO OFF

REM ***********************************************************************************
REM
REM DBRESTORE
REM =========
REM
REM written by SPO/odi, 07/2006
REM
REM Backup the database or the transaction log of a SQL Server database using OSQL.
REM Runs also with MSDE and WMSDE.
REM
REM ***********************************************************************************

ECHO.
ECHO DBRESTORE
ECHO ———
ECHO.
ECHO by SPO/odi, 07/2006
ECHO.

IF "%1"=="" GOTO SYNTAX
IF "%2"=="" GOTO SYNTAX
IF "%2"=="" GOTO SYNTAX

SET DATABASE=%1
SET RESTOREPATH=%2
SET SERVER=%3

IF "%SERVER%"=="" SET SERVER=COMPUTERNAME

SET RESTOREFILE_DB=%RESTOREPATH%\%DATABASE%.bak
SET RESTOREFILE_TRN=%RESTOREPATH%\%DATABASE%.trn

SET RESTOREFILE_DB=%RESTOREFILE_DB:[=%
SET RESTOREFILE_DB=%RESTOREFILE_DB:]=%

SET RESTOREFILE_TRN=%RESTOREFILE_TRN:[=%
SET RESTOREFILE_TRN=%RESTOREFILE_TRN:]=%

IF EXIST %RESTOREFILE_TRN% GOTO RESTORE_WITH_TRN

ECHO Restore database %DATABASE% …
ECHO.

OSQL -E -S %SERVER% -Q "Restore Database %DATABASE% from disk='%RESTOREFILE_DB%' with recovery"

GOTO ENDE

:RESTORE_WITH_TRN

ECHO Restore database and transaction log for %DATABASE% …
ECHO.

OSQL -E -S %SERVER% -Q "Restore Database %DATABASE% from disk='%RESTOREFILE_DB%' with norecovery"
OSQL -E -S %SERVER% -Q "Restore Log %DATABASE% from disk='%RESTOREFILE_TRN%' with recovery"

GOTO ENDE

:SYNTAX

ECHO The script will look into the backuppath. If only a file named {database}.bak
ECHO is found, just the database will be restored. If also a file named
ECHO {database}.trn is found, the database and the transaction log are restored.
ECHO.
ECHO Syntax:
ECHO.
ECHO DBRESTORE database backuppath servername : restore the database
ECHO.
ECHO.
ECHO Example:
ECHO   DBRESTORE master c:ackup myserversharepoint
ECHO.
ECHO   Will restorethe database 'master' on the SQL Server at 'myserversharepoint'
ECHO   from directory 'c:ackup'.
ECHO.
ECHO If the databasename contains special characters like '-', use brackets around the
ECHO databasename ([my-db]).
ECHO.

:ENDE

SET DATABASE=
SET RESTOREPATH=
SET RESTOREFILE_DB=
SET RESTOREFILE_TRN=

Mit Hilfe der Geplanten Tasks der Systemsteuerung kann so ein regelm„áiges Backup der Datenbank angelegt werden. Wenn z.B. auf einem Windows 2003 Small Business Server mit diesen Hilfsmitteln die SharePoint-Datenbank gesichert wird, dann kann die Sicherungsdatei mit dem normalen Datei-Backup auf ein Band geschrieben werden.