Jump to content

DB Backup / Restore mit Datum im DB Namen


xst
Direkt zur Lösung Gelöst von xst,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Forum
Ich bin leider nicht so der Profi im Umgang mit SQL. Darum die Frage an die Profis.
Ich habe folgende Anforderung:

 

SQL DB: DB1

Immer am Monats Ende 28. Tag im Monat soll von der DB ein Backup gemacht werden und nach erfolgreichem Backup ein automatisches Restore mit dem neuen Namen: > DB1_201902 (Jahr/02 für Monat Februar) erstellt werden
Ende März wird wiederum ein Backup/Restore der DB1 nötig mit dem neuen Namen :DB1_201903
Ende April wird wiederum ein Backup/Restore der DB1 nötig mit dem neuen Namen :DB1_201904
Ende Mai wird wiederum ein Backup/Restore der DB1 nötig mit dem neuen Namen :DB1_201905 > und die DB1_201902 (also das Restore vom Februar soll dabei gelöscht werden) 
Ende Juni wird wiederum ein Backup/Restore der DB1 nötig mit dem neuen Namen :DB1_201906 > und die DB1_201903 (also das Restore vom März soll dabei gelöscht werden) 

...und immer so weiter bis in alle Ewigkeit.

 

Wie kann ich sowas am besten lösen? Gibt es da gute Vorschläge oder ev. Script Beispiele eurerseits?

Für eure Hilfe wär ich sehr dankbar.

Link zu diesem Kommentar

Moin,

 

du suchst den SQL-Befehl "RESTORE DATABASE" mit der "AS"-Klausel, die einen neuen Namen für die wiederhergestellte Datenbank vergibt.

Den Datumsstring kannst du dir mit SQL-Mitteln zusammenbauen oder, falls du das Restore von außen triggerst, mit den Mitteln der dort verwendeten Skriptsprache.

 

Um die nicht mehr benötigten Datenbankkopien zu entfernen, nutzt du "DROP DATABASE".

 

Die Logik drumrum ist nicht ganz trivial, aber durchaus zu handhaben. Du solltest dir überlegen, wie du den Task automatisieren willst - mit dem SQL Server Agent oder z.B. von außen über den Taskplaner. Im ersten Fall solltest du die Logik mit SQL-Anweisungen aufbauen, im zweiten käme PowerShell in Frage. Beides hat seine Vor- und Nachteile, am Ende entscheidet, mit welcher Technik du dich wohler fühlst.

 

Gruß, Nils

 

Link zu diesem Kommentar
  • 2 Monate später...
  • Beste Lösung

Hi

Hier mal meine Lösung dazu ;-)

 

/* SQL DB Restore DB_YearMonth-1 */



USE [master]


DECLARE @CurrentDate VARCHAR(30)
SET @CurrentDate = CONVERT(nvarchar(6), DATEADD(month, -1, GETDATE()), 112)


Declare @DBName VARCHAR(30)
SET @DBName = 'DB_'

Declare @RestoreName VARCHAR(30)
SET @RestoreName = @DBName + @CurrentDate
DECLARE @DATA NVARCHAR(MAX) = 'L:\MSSQL\' + @RestoreName + '.mdf'
DECLARE @LOG NVARCHAR(MAX) = 'H:\MSSQL\' + @RestoreName + '.ldf'



RESTORE DATABASE @RestoreName 
FROM  DISK = N'X:\Backup\DB.bak' WITH  FILE = 1,  
MOVE N'DB_' TO @DATA,
MOVE N'DB_log' TO @LOG,
NOUNLOAD,  STATS = 5

GO

 

und hier noch der drop

/* SQl DB drop DB_YearMonth-5 */

USE [master]
GO

DECLARE @DropDate VARCHAR(30)
SET @DropDate = CONVERT(nvarchar(6), DATEADD(month, -5, GETDATE()), 112)


Declare @DBName VARCHAR(30)
SET @DBName = 'DB_'

Declare @DropName VARCHAR(30)
SET @DropName = @DBName + @DropDate


SELECT 'KILL ' + CAST(session_id AS VARCHAR(10))
FROM sys.dm_exec_sessions
WHERE is_user_process = 1
       AND database_id = DB_ID('@DropName')

EXEC ('DROP DATABASE ' + @DropName)

GO

 

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...