• This script is missing some features:

    Deleting of old backups

    Excluding off line db's

    Excluding stand by db's

    Below the backup scripts for full and transaction backups I use for some years (If I remember correctly these scripts are based on scripts originally made by Tara Kizer).

    Daan Stam

    Database Administrator

    AWVN

    The Netherlands

    /****** Object: StoredProcedure [dbo].[mySP_BackupFullAllDatabases] Script Date: 05/22/2008 09:55:20 ******/

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    -- =============================================

    -- Author:Daan Stam

    -- Create date: 06-06-2007

    -- Description:Backup of databases to individual subdirs

    -- Deleting old backups

    -- =============================================

    CREATE PROCEDURE [dbo].[mySP_BackupFullAllDatabases]

    @myBackupDir varchar(255),

    @myDaystoKeepFullBackups int,

    @myDaystoKeepTransBackups int,

    @myRetMsg nvarchar(4000) =Null OUTPUT

    AS

    BEGIN

    --SET NOCOUNT ON;

    /** cursor for databases to backup **/

    Declare myCursor cursor for SELECT [name] FROM master.dbo.sysdatabases WHERE [name] NOT IN ('tempdb') AND DATABASEPROPERTYEX([name], 'IsInStandBy') = 0 AND DATABASEPROPERTYEX([name], 'Status') = 'ONLINE' and [filename] not like '%.ss' order by name

    /** variable for loop through databases **/

    declare @mydb as varchar(255)

    /**variable for backup name **/

    declare @myDirName as varchar(255)

    declare @myBackupName as varchar(400)

    /** Clean up backup directory **/

    declare @DeleteDateStr nvarchar(30)

    set @DeleteDateStr=Convert(nvarchar(30),getdate()-@myDaystoKeepFullBackups ,1)+' '+Convert(nvarchar(30),getdate()-@myDaystoKeepFullBackups ,8)

    EXECUTE master.sys.xp_delete_file 0,@myBackupDir,'bak',@DeleteDateStr,1

    set @DeleteDateStr=Convert(nvarchar(30),getdate()-@myDaystoKeepTransBackups ,1)+' '+Convert(nvarchar(30),getdate()-@myDaystoKeepTransBackups ,8)

    EXECUTE master.sys.xp_delete_file 0,@myBackupDir,'trn',@DeleteDateStr,1

    /**backup all databases**/

    set @myRetMsg='Start'

    open myCursor

    fetch next from myCursor into @mydb

    while (@@fetch_status<>-1)

    begin

    /** create backup dir **/

    if len(replace(@mydb,' ',''))>0

    begin

    begin try

    print ' '

    print '--' + @mydb

    /**create backupdir **/

    set @myRetMsg= @myRetMsg + char(13) + char(13) + convert(varchar(20),getdate(), 105)+ ' ' + convert(varchar(20),getdate(), 108) + ' Start ' + @mydb

    set @myDirName =@myBackupDir + '\'+ @mydb

    EXECUTE master.dbo.xp_create_subdir @myDirName

    /**backup database **/

    set @myBackupName= @mydb + '_backup' + convert(varchar(20),getdate(), 112) + replace(convert(varchar(20),getdate(), 108),':','') +'.bak'

    set @myDirName=@myDirName +'\'+ @myBackupName

    BACKUP DATABASE @mydb TO DISK = @myDirName WITH NOFORMAT, NOINIT, NAME = @myBackupName, SKIP, REWIND, NOUNLOAD, STATS = 10

    set @myRetMsg= @myRetMsg + char(13)+ convert(varchar(20),getdate(), 105)+ ' ' + convert(varchar(20),getdate(), 108) + ' End ' + @mydb

    end try

    begin catch

    set @myRetMsg= @myRetMsg + char(13)+ convert(varchar(20),getdate(), 105)+ ' ' + convert(varchar(20),getdate(), 108) + ' Error in backup of database ' + @mydb

    set @myRetMsg= @myRetMsg + char(13) + @mydb + ' Error Occurred'

    set @myRetMsg= @myRetMsg + char(13) + cast(ERROR_NUMBER()as varchar(60))

    set @myRetMsg= @myRetMsg + char(13) + cast( ERROR_SEVERITY() as varchar(60))

    set @myRetMsg= @myRetMsg + char(13) + cast( ERROR_STATE() as varchar(60))

    set @myRetMsg= @myRetMsg + char(13) + cast( ERROR_MESSAGE() as varchar(60))

    end catch

    /** Verify backup **/

    begin try

    print ' '

    print '--' + @mydb

    set @myRetMsg= @myRetMsg + char(13) + convert(varchar(20),getdate(), 105)+ ' ' + convert(varchar(20),getdate(), 108) + ' Start verify ' + @mydb

    RESTORE VERIFYONLY FROM DISK = @myDirName

    set @myRetMsg= @myRetMsg + char(13) + convert(varchar(20),getdate(), 105)+ ' ' + convert(varchar(20),getdate(), 108) + ' End verify ' + @mydb

    end try

    begin catch

    set @myRetMsg= @myRetMsg + char(13) + convert(varchar(20),getdate(), 105)+ ' ' + convert(varchar(20),getdate(), 108) +' Error in verify backup' + @mydb

    set @myRetMsg= @myRetMsg + char(13) + @mydb + ' Error Occurred'

    set @myRetMsg= @myRetMsg + char(13) + cast(ERROR_NUMBER()as varchar(60))

    set @myRetMsg= @myRetMsg + char(13) + cast( ERROR_SEVERITY() as varchar(60))

    set @myRetMsg= @myRetMsg + char(13) + cast( ERROR_STATE() as varchar(60))

    set @myRetMsg= @myRetMsg + char(13) + cast( ERROR_MESSAGE() as varchar(60))

    end catch

    end

    /** next database **/

    fetch next from myCursor into @mydb

    -- Let the system rest for 5 seconds before starting on the next backup

    waitfor delay '00:00:05'

    end

    deallocate myCursor

    END

    /****** Object: StoredProcedure [dbo].[mySP_BackupTransAllDatabases] Script Date: 05/22/2008 10:00:07 ******/

    SET ANSI_NULLS ON

    GO

    SET QUOTED_IDENTIFIER ON

    GO

    -- =============================================

    -- Author:Daan Stam

    -- Create date: 06-06-2007

    -- Description:Backup Transactions of databases to individual subdirs

    --

    -- =============================================

    CREATE PROCEDURE [dbo].[mySP_BackupTransAllDatabases]

    @myBackupDir varchar(255),

    @myRetMsg varchar(400) =Null OUTPUT

    AS

    BEGIN

    --SET NOCOUNT ON;

    /** cursor for databases to backup **/

    Declare myCursor cursor for select [name] from master..sysdatabases where [name]<>'' and [name]<>'model' and [name]<>'tempdb' AND DATABASEPROPERTYEX([name], 'IsInStandBy') = 0 AND DATABASEPROPERTYEX([name], 'Status') = 'ONLINE' and DATABASEPROPERTYEX([name], 'RECOVERY') = 'FULL' and [filename] not like '%.ss' order by [name]

    /** variable for loop through databases **/

    declare @mydb as varchar(255)

    /**variable for backup name **/

    declare @myDirName as varchar(255)

    declare @myBackupName as varchar(400)

    /**backup transactions all databases**/

    open myCursor

    fetch next from myCursor into @mydb

    while (@@fetch_status<>-1)

    begin

    /** create backup dir **/

    set @myDirName =@myBackupDir + '\'+ @mydb

    EXECUTE master.dbo.xp_create_subdir @myDirName

    /**backup database **/

    set @myBackupName= @mydb + '_backup' + convert(varchar(20),getdate(), 112) + replace(convert(varchar(20),getdate(), 108),':','') +'.trn'

    set @myDirName=@myDirName + '\' + @myBackupName

    BACKUP LOG @mydb TO DISK = @myDirName WITH NOFORMAT, NOINIT, NAME = @myBackupName, SKIP, REWIND, NOUNLOAD, STATS = 10

    fetch next from myCursor into @mydb

    -- Let the system rest for 5 seconds before starting on the next backup

    waitfor delay '00:00:05'

    end

    deallocate myCursor

    set @myRetMsg=@@rowcount

    return 0

    END