wolf6660
Goto Top

Empfehlung Backupsoftware für MS-SQL-Datenbank

Hi,

bin auf der suche nach eine Günstigen Backupsoftware für eine Microsoft SQL-Datenbank zu sichern. Am liebsten wäre mir eine Freeware.

Habe zwar einiges gefunden das über PowerShell gemacht wird. Aber davon habe ich wenig Ahnung. Vielleicht hat jemand ein Skript mit dem ich alles sichern kann.#

Danke schon mal im Voraus

Wolf6660

Content-ID: 855352938

Url: https://administrator.de/contentid/855352938

Ausgedruckt am: 19.12.2024 um 03:12 Uhr

wiesi200
wiesi200 29.06.2021 um 17:34:46 Uhr
Goto Top
Hallo,

Um welche MS SQL Edition handelt es sich denn eigentlich. Alles außer der Express hat genug on Board um sich schön mit einer GUI das zusammen zu Kicken.
Wolf6660
Wolf6660 29.06.2021 um 18:00:13 Uhr
Goto Top
Schade es handelt sich um die Express Version
em-pie
em-pie 29.06.2021 um 18:17:49 Uhr
Goto Top
Moin,

Nimm Backup&FTP. Das habe ich Jahrelang für kleinere Dinge genutzt, und lief hervorragend. Auch das Restoren der DB

Gruß
em-pie
Inf1d3l
Inf1d3l 29.06.2021 um 18:44:36 Uhr
Goto Top
Pjordorf
Pjordorf 29.06.2021 um 19:20:24 Uhr
Goto Top
Hallo,

Zitat von @Wolf6660:
bin auf der suche nach eine Günstigen Backupsoftware für eine Microsoft SQL-Datenbank zu sichern. Am liebsten wäre mir eine Freeware.
Robocopy?

Gruß,
Peter
Dani
Dani 29.06.2021, aktualisiert am 30.06.2021 um 03:09:18 Uhr
Goto Top
Moin,
falls es etwas Powershell und OnBoard Mittel sein darf: https://www.b-blog.info/de/sichern-der-ms-sql-einschlie-lich-express-dat ...


Gruß,
Dani
GrueneSosseMitSpeck
GrueneSosseMitSpeck 29.06.2021 um 21:36:38 Uhr
Goto Top
also die älteren Express Editions hatten noch einen Agenten, über den man Backupjobs anstoßen konnte, aber die aktuellen Editions kommen ohne daher, folglich auch keine Automatisierungsmöglichkeiten mehr dort mit Bordmitteln.

Was aber ALLE Express Editions können ist eine SQL Shell mit dem Namen SQLCMD und darin das Kommando Backup Database <parameter> ausführen, das Kommando konfiguriert man dann in die Windows Aufgabenplanung rein wenn der installierte SQL Server kein Agentenkonto mehr hat. Standardmäßig geht das über einen Wartungsplan... aber das fehlt entweder im SSMS 18.4 und höher oder die Express

https://docs.microsoft.com/de-de/sql/t-sql/statements/backup-transact-sq ...

https://forums.ivanti.com/s/article/How-To-Create-a-Maintenance-Plan-for ....
it-frosch
it-frosch 30.06.2021 um 07:02:05 Uhr
Goto Top
Guten Morgen,

sollte auch auf höheren Versionen laufen: SQL Express Backup .

USE [master]
GO

/**** Object:  StoredProcedure [dbo].[sp_BackupDatabases]    Script Date: 04/02/2015 16:29:49 ****/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


-- =============================================
-- Author: Microsoft
-- Create date: 2010-02-06
-- Description: Backup Databases for SQLExpress
-- Parameter1: databaseName
-- Parameter2: backupType F=full, D=differential, L=log
-- Parameter3: backup file location
-- =============================================

CREATE PROCEDURE [dbo].[sp_BackupDatabases]
 @databaseName sysname = null,
 @backupType CHAR(1),
 @backupLocation nvarchar(200)
AS

 SET NOCOUNT ON;

 DECLARE @DBs TABLE
 (
 ID int IDENTITY PRIMARY KEY,
 DBNAME nvarchar(500)
 )

 -- Pick out only databases which are online in case ALL databases are chosen to be backed up
 -- If specific database is chosen to be backed up only pick that out from @DBs
 INSERT INTO @DBs (DBNAME)
 SELECT Name FROM master.sys.databases
 where state=0
 AND name=@DatabaseName
 OR @DatabaseName IS NULL
 ORDER BY Name

 -- Filter out databases which do not need to backed up
 IF @backupType='F'  
 BEGIN
 DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','AdventureWorks')  
 END
 ELSE IF @backupType='D'  
 BEGIN
 DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')  
 END
 ELSE IF @backupType='L'  
 BEGIN
 DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')  
 END
 ELSE
 BEGIN
 RETURN
 END

 -- Declare variables
 DECLARE @BackupName varchar(100)
 DECLARE @BackupFile varchar(100)
 DECLARE @DBNAME varchar(300)
 DECLARE @sqlCommand NVARCHAR(1000)
 DECLARE @dateTime NVARCHAR(20)
 DECLARE @Loop int

 -- Loop through the databases one by one
 SELECT @Loop = min(ID) FROM @DBs

 WHILE @Loop IS NOT NULL
 BEGIN

-- Database Names have to be in [dbname] formate since some have - or _ in their name
 SET @DBNAME = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop)+']'  

-- Set the current date and time n yyyyhhmmss format
 SET @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),101),'/',) + '_' + REPLACE(CONVERT(VARCHAR, GETDATE(),108),':',)  

-- Create backup filename in path\filename.extension format for full,diff and log backups
 IF @backupType = 'F'  
 SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',),']',)+ '_FULL_'+ @dateTime+ '.BAK'  
 ELSE IF @backupType = 'D'  
 SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',),']',)+ '_DIFF_'+ @dateTime+ '.BAK'  
 ELSE IF @backupType = 'L'  
 SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',),']',)+ '_LOG_'+ @dateTime+ '.TRN'  

-- Provide the backup a name for storing in the media
 IF @backupType = 'F'  
 SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',),']',) +' full backup for '+ @dateTime  
 IF @backupType = 'D'  
 SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',),']',) +' differential backup for '+ @dateTime  
 IF @backupType = 'L'  
 SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',),']',) +' log backup for '+ @dateTime  

-- Generate the dynamic SQL command to be executed

 IF @backupType = 'F'  
 BEGIN
 SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+ ' TO DISK = '+@BackupFile+ ' WITH INIT, NAME= ' +@BackupName+', NOSKIP, NOFORMAT'  
 END
 IF @backupType = 'D'  
 BEGIN
 SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+ ' TO DISK = '+@BackupFile+ ' WITH DIFFERENTIAL, INIT, NAME= ' +@BackupName+', NOSKIP, NOFORMAT'  
 END
 IF @backupType = 'L'  
 BEGIN
 SET @sqlCommand = 'BACKUP LOG ' +@DBNAME+ ' TO DISK = '+@BackupFile+ ' WITH INIT, NAME= ' +@BackupName+', NOSKIP, NOFORMAT'  
 END

-- Execute the generated SQL command
 EXEC(@sqlCommand)

-- Goto the next database
SELECT @Loop = min(ID) FROM @DBs where ID>@Loop

END
GO

Ich habe mir das Backup erweitert mit blat.exe (E-Mail versand) und delage32.exe um die Backups zu rotieren.

Lief zuletzt auf dem MSSQL 2012.

grüße vom it-frosch
Wolf6660
Wolf6660 30.06.2021 um 12:43:02 Uhr
Goto Top
Hi,

Zitat von @Dani:

Moin,
falls es etwas Powershell und OnBoard Mittel sein darf: https://www.b-blog.info/de/sichern-der-ms-sql-einschlie-lich-express-dat ...


Gruß,
Dani

das funktioniert nicht mit dem SQL-Server 2019


Zitat von @em-pie:

Moin,

Nimm Backup&FTP. Das habe ich Jahrelang für kleinere Dinge genutzt, und lief hervorragend. Auch das Restoren der DB

Gruß
em-pie

hast du da einen Link? unter Backup&FTP bekomme ich mehre Möglichkeiten.

Das mit den Bachtes werde ich mal testen falls es mit dem Programm Backup&FTP nicht funktioniert. Auf der grafischen Oberfläche fühle ich mich sicherer, mit den CMD Skripten bin ich nicht so fit und würde nur abschreiben ohne zu wissen was es wirklich bewirkt. Wenn es um Rücksicherungen geht ist die Grafische Oberfläche eventuell auch einfacher.

Danke
wiesi200
wiesi200 30.06.2021 um 13:07:36 Uhr
Goto Top
Wieso sollte das Script von Dani nicht funktionieren? Gibt's ne Fehlermeldung?
beidermachtvongreyscull
beidermachtvongreyscull 30.06.2021 um 15:48:22 Uhr
Goto Top
Hi,

ich habe das damals bei einem 2008er so gemacht:

SQLCMD bei Express-Version:
sqlcmd -S localhost\Instanzenname -i c:\sqldatei.sql -o d:\ausgabe.log -b

SQLCMD bei normalem SQL Server 2008 (ab Standard):
sqlcmd -S Servername\Instanz -U sa -P sa -i c:\sqldatei.sql -o d:\ausgabe.log -b

7z-Archiver, wenn man die Exporte shrinken will:
7za.exe a -r -t7z -mx9 -mmt2 d:\zielarchiv.7z d:\quellverzeichnis\*.*

Ich hatte zwei SQL-Scripts pro Durchgang gefeuert:

Script 1:
use master;
go
DECLARE UserDatabases_CTE_Cursor Cursor
FOR
-- Selecting user database names.

select name as DatabaseName from sys.sysdatabases where ([dbid] > 4) and ([name] not like '$')  
OPEN UserDatabases_CTE_Cursor

DECLARE @dbName varchar(100);
DECLARE @backupPath varchar(100);
DECLARE @backupQuery varchar(500);

-- make sure that the below path exists
set @backupPath = 'C:\DBBACKUP\'  
Fetch NEXT FROM UserDatabases_CTE_Cursor INTO @dbName

While (@@FETCH_STATUS <> -1)
BEGIN
-- Backup SQL statement
set @backupQuery =  'backup database ' + @dbName + ' to disk = ''' + @backupPath + @dbName + '_[' + REPLACE( convert(varchar, getdate(), 109), ':', '-') + '].bak'''  
-- Print SQL statement
print @backupQuery
-- Execute backup script
EXEC (@backupQuery)
-- Get next database
Fetch NEXT FROM UserDatabases_CTE_Cursor INTO @dbName
END

CLOSE UserDatabases_CTE_Cursor
DEALLOCATE UserDatabases_CTE_Cursor
GO

Script 2:
DECLARE @name VARCHAR(50) -- database name  
DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name 

SET @path = 'C:\DBBACKUP\'    

SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 
   + '_'   
   + REPLACE(CONVERT(VARCHAR(20),GETDATE(),108),':','')  

DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb')   
   AND DATABASEPROPERTYEX(name, 'Recovery') IN ('FULL','BULK_LOGGED')  

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   

WHILE @@FETCH_STATUS = 0   
BEGIN   
       SET @fileName = @path + @name + '_' + @fileDate + '.TRN'    
       --BACKUP LOG @name TO DISK = @fileName  WITH TRUNCATE_ONLY
	BACKUP LOG @name TO DISK = @fileName
	
       FETCH NEXT FROM db_cursor INTO @name   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor 

Das eine Script kümmert sich um Datenbanken, die mit Transaction-Logs arbeiten und shrinkt diese. Das andere tut das nicht.

Vielleicht hilft es Dir ja.
Wichtig: Erst anpassen und in gesicherter Testumgebung probieren.

Gruß
bdmvg
em-pie
Lösung em-pie 30.06.2021 um 16:10:15 Uhr
Goto Top
Zitat von @Wolf6660:
hast du da einen Link? unter Backup&FTP bekomme ich mehre Möglichkeiten.
https://sqlbackupandftp.com/

Das mit den Bachtes werde ich mal testen falls es mit dem Programm Backup&FTP nicht funktioniert. Auf der grafischen Oberfläche fühle ich mich sicherer, mit den CMD Skripten bin ich nicht so fit und würde nur abschreiben ohne zu wissen was es wirklich bewirkt. Wenn es um Rücksicherungen geht ist die Grafische Oberfläche eventuell auch einfacher.

Danke

Die obige Software macht IMHO nichts anderes, wie die Boardmittel des SQL-Servers zu nutzen.
Ist halt weniger getippe und mehr geklicke (im Sinne von GUI-Nutzung, nicht zu vieles geklicke).
Wolf6660
Wolf6660 02.07.2021 um 21:04:39 Uhr
Goto Top
Wenn ich ein Skript hätte das einfach den kompletten SQL Server sichert und ein Skript zum Rücksichern wäre echt super.
Habe mir mal die Software geladen und installiert. Macht ein guten Eindruck. Mal schauen was nach den 14 Tagen passiert. Habe gesehen das es 6 Datenbanken sind die auf dem SQL Server erstellt worden sind. Wir wahrscheinlich zu teuer werden für mich.
Muss mich die Tage mal mit Powershell oder der Batch Variante (im Beitrag weiter oben beschäftigen).

Danke