You might use something like that (part of my logshipping-procedures):
/* ---------------------------------------------------------------------------*/
-- Vollbackup.sql
-- T-SQL-Script zum Erstellen eines Vollbackups aller Datenbanken eines
-- beliebigen Microsoft-SQL-Servers (2000)
-- Erstellt am: 3.11.2003
-- Author: Karl Klingler, karl.klingler@dr-stahl.de
/* ---------------------------------------------------------------------------*/
CREATE PROCEDURE vollbackup
@DestSrv sysname
@DestPath sysname
AS
PRINT '++++++++++ Begin der Vollsicherung vom '+convert(char(22),getdate(),113)+' +++++++++++'
-- Variablen deklarieren
declare @dumpfile varchar(200) -- Pfad der Sicherungsdatei
declare @copycmd varchar(2000) -- Kopierbefehl
declare @name varchar(80) -- Name der Sicherungsdatei
declare @i int -- Laufvariable
declare @Backupdir sysname -- Wo werden die Backupdateien gespeichert
declare @RetainDays int -- Nach wie vielen Tagen sollen die Backupdateien gelöscht werden
declare @BaseBUFileDatalength int -- Wo im Filename fängt das Datum an
declare @BUFile sysname --Backupdatei
declare @rc int --ReturnCode
-- Cursor zum Auslesen der DB-Namen
DECLARE dbnames_cursor CURSOR
FOR
SELECT name
FROM dbo.sysdatabases where name 'tempdb'
OPEN dbnames_cursor
DECLARE @dbname sysname
-- Variablen füllen
select @Backupdir = 't:\backups\'
select @name=@@SERVERNAME+'_Vollsicherung_'+DATENAME(dw,getdate())+'_'+REPLACE(STR(DATEPART(dd,getdate()),2)+'.'+STR(DATEPART(mm,getdate()),2)+'.'+STR(DATEPART(yy,getdate()),4)+'_'+STR(DATEPART(hh,getdate()),2)+'.'+STR(DATEPART(mi,getdate()),2)+'_Uhr',' ','0')+'.bak'
select @dumpfile = @Backupdir +@name
select @i = 0
select @RetainDays = 7
-- Alle DB-Namen auslesen und die Befehle jeweils für jede DB ausführen
FETCH NEXT FROM dbnames_cursor INTO @dbname
WHILE (@@FETCH_STATUS -1)
BEGIN
IF (@@FETCH_STATUS -2)
BEGIN
select @i = @i + 1
SELECT @dbname = RTRIM(@dbname)
-- dbcc checkdb (@dbname) with no_infomsgs, tablock
-- dbcc opentran (@dbname) with tableresults
-- dbcc updateusage (@dbname)
-- execute sp_dboption @dbname
IF ( @i = 1)
BEGIN
-- Bei der ersten DB das File anlegen
EXEC ('BACKUP DATABASE [' + @dbname + '] TO DISK = '''+@dumpfile+''' WITH INIT , NOUNLOAD , NAME = '''
+ @dbname + ''', SKIP , STATS = 100, NOFORMAT ' )
END
ELSE
BEGIN
-- Bei den weiteren DBs nur anhängen
EXEC ('BACKUP DATABASE [' + @dbname + '] TO DISK = '''+@dumpfile+''' WITH NOUNLOAD , NAME = '''
+ @dbname + ''', SKIP , STATS = 100, NOFORMAT ' )
PRINT @dbname
END
END
PRINT convert(char(22),getdate(),113)
FETCH NEXT FROM dbnames_cursor INTO @dbname
END
CLOSE dbnames_cursor
DEALLOCATE dbnames_cursor
PRINT '+++++ Datenbank auf Platte gesichert: '+convert(char(22),getdate(),113)+' ++++++++++++'
WAITFOR DELAY '00:00:05'
select @copycmd = 'copy ' + @dumpfile + ' \\'+@DestSrv+'\'+@DestPath
EXEC master..xp_cmdshell @copycmd
PRINT 'Befehl "' + @copycmd + '" ausgeführt: '+convert(char(22),getdate(),113)+' ++++++++++++'
WAITFOR DELAY '00:00:05'
/* --- Logshipping: Löschen der veralteten Backupdateien auf dem Produktivserver */
--Building up Table of Files to Delete
CREATE TABLE #DirOut
(
[Output] varchar(255)
)
SET @copycmd = 'dir "' + @BackupDir + '\' + '*.bak" /B'
print @copycmd
/* --- Logshipping: Ende des Löschen der veralteten Backupdateien auf dem Produktivserver */
INSERT #DirOut EXEC master..xp_cmdshell @copycmd
DECLARE BUFiles CURSOR FOR
SELECT [Output] FROM #DirOut WHERE [Output] IS NOT NULL
FOR READ ONLY
OPEN BUFiles
FETCH NEXT FROM BUFiles INTO @BUFile
WHILE @@FETCH_STATUS = 0
BEGIN
--Reconstruct DateTime From Filename
If PATINDEX ( '%Vollsicherung%' , @BUFile ) >0
SELECT @BaseBUFileDatalength = LEN( @BUFile )-24
else
If PATINDEX ( '%TL-Sicherungen%' , @BUFile ) >0
SELECT @BaseBUFileDatalength = LEN( @BUFile ) - 14
else
break
--Compare Date
--print @BUFile
select SUBSTRING(@BUFile,@BaseBUFileDatalength+1,10)
IF DATEDIFF(d,CONVERT(datetime,SUBSTRING(@BUFile,@BaseBUFileDatalength+1,10)),getdate()) > @RetainDays
BEGIN
SELECT @copycmd = 'del "' + @BackupDir + '\' + @BUFile + '"'
PRINT 'Deleting File : '+ @BUFile
PRINT 'Command to be Executed : ' + @copycmd
EXEC @rc = master..xp_cmdshell @copycmd
END
FETCH NEXT FROM BUFiles INTO @BUFile
END
CLOSE BUFiles
DEALLOCATE BUFiles
DROP TABLE #DirOut
SET NOCOUNT OFF
PRINT '+++++++++++++ Ende der Vollsicherung vom '+convert(char(22),getdate(),113)+' ++++++++++++'
/* ------------------------------------ Ende --------------------------------------*/
GO
Best regards
karl