Jump to content
xst

DB Backup / Restore mit Datum im DB Namen

Recommended Posts

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.

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

 

Hallo Nils

Danke für die Antwort. Ich werde mal was versuchen. Das ganze plane ich mal mit dem SQL Server Agent. Ist mir doch sympatischer als Powershell ;-)

 

 

Share this post


Link to post
Share on other sites

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

 

  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Werbepartner:



×
×
  • Create New...