xst 12 Geschrieben 25. Februar 2019 Melden Teilen Geschrieben 25. Februar 2019 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. Zitieren Link zu diesem Kommentar
NilsK 2.940 Geschrieben 25. Februar 2019 Melden Teilen Geschrieben 25. Februar 2019 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 Zitieren Link zu diesem Kommentar
xst 12 Geschrieben 26. Februar 2019 Autor Melden Teilen Geschrieben 26. Februar 2019 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 Zitieren Link zu diesem Kommentar
Beste Lösung xst 12 Geschrieben 7. Mai 2019 Autor Beste Lösung Melden Teilen Geschrieben 7. Mai 2019 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 1 Zitieren Link zu diesem Kommentar
NilsK 2.940 Geschrieben 7. Mai 2019 Melden Teilen Geschrieben 7. Mai 2019 Moin, prima, danke für die Rückmeldung. Gruß, Nils Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.