2016-11-21 1 views
0

Gibt es eine Möglichkeit, Skript zu verwenden, um die älteste SQL Server-Datenbank zu löschen?Wie wird die älteste SQL Server-Datenbank automatisch gelöscht?

Die Anforderung ist, dass mit dem SSIS-Paket ich SQL Server-Datenbank löschen muss, die 50 Monate alt ist. Angenommen, der aktuelle Monat ist 2016-11-30 und es gibt eine Datenbank, die 50 Monate alt ist, z. B. Sales_Backup_2011_10_30_443240_542456. Das Skript sollte diese älteste Datenbank löschen. Wenn der aktuelle Monat 2016-12-31 lautet, sollte das Skript Sales_Backup_2011_11_30_544556_753577 usw. löschen.

Ist das möglich?

+1

Was meinst du mit „ältester Datenbank“? Es klingt, als ob Sie versucht haben, die Partitionierung zu emulieren, indem Sie mehrere Datenbanken anstelle von zB mehreren Tabellen, mehreren Dateigruppen erstellen. Angenommen, "älteste" bedeutet "wessen Name analysiert zu einem alten Datum", Abfrage "sys.databases", extrahieren Sie das Datum mit Zeichenfolgenoperationen und wählen Sie nur Datenbanknamen mit alten Daten –

+0

Welche Datenbankversion verwenden Sie? Das Analysieren einer Zeichenfolge ist in SQL Server 2014 wesentlich einfacher als in 2005. –

+0

BTW, SQL Server 2016 ermöglicht das Partitionieren [auch in der Express-Edition] (https://sqlperformance.com/2016/11/sql-server- 2016/big-deal-sp1). Vielleicht möchten Sie Ihr Design überdenken –

Antwort

0

sys.databases in der MASTER Datenbank hat ein create_date Feld, das Sie verwenden könnten. Sie können das abfragen und eine DATEDIFF verwenden, um die Datenbanknamen abzurufen, die Sie löschen möchten.

create_dateDatetime: Datum die Datenbank erstellt wurde oder umbenannt. Für Tempdb ändert sich dieser Wert jedes Mal, wenn der Server neu gestartet wird.

Siehe MSDN-Dokumentation für weitere Informationen zu dieser Tabelle: sys.databases

+0

Danke. Ich habe unten Skript verwendet, um automatisch zu tun. Wo muss ich Datetime hinzufügen? DECLARE Qry NVARCHAR (MAX) = '' - Befüllen Qry. SELECT top 1 Qry Qry = + 'Verwendung' + QUOTENAME (d.name) \t \t \t + 'DROP DATABASE' + QUOTENAME (d.name) \t \t \t FROM sys.databases d WHERE d. [Status] = 0 UND UNTERE (d.Name) <> 'Tempdb' \t \t ORDER BY create_date DESC ; /* Aktivieren Sie die erste Zeile zum Ausführen. * Deaktivieren Sie die untere Zeile, wenn Sie mit dem Skript zufrieden sind. */ --EXECUTE sp_ExecuteSQL @Qry - @ BKUScript SELECT @Qry; – Amelia

+0

Entschuldigung, dass mit create_date nicht anders ist? weil das create_date nicht in der richtigen Reihenfolge für die Datenbanken ist. – Amelia

Verwandte Themen