2016-11-21 61 views
0

有什麼方法使用腳本刪除最舊的SQL Server數據庫?如何自動刪除最早的SQL Server數據庫?

要求是,使用SSIS包我必須刪除50個月大的SQL服務器數據庫。假設當前月份是2016-11-30,並且有一個50個月大的數據庫,例如Sales_Backup_2011_10_30_443240_542456。腳本應該放棄這個最老的數據庫。同樣,如果當前月份是2016-12-31,該腳本應該放棄Sales_Backup_2011_11_30_544556_753577,依此類推。

這可能嗎?

+1

你是什麼意思「最老的數據庫」?這聽起來像你試圖通過創建多個數據庫而不是多個表,多個文件組來模擬分區。假設「最老」意味着「誰的名字解析爲舊日期」,查詢「sys.databases」,使用字符串操作提取日期並僅選擇具有舊日期的數據庫名稱 –

+0

您使用的是哪個數據庫版本?在SQL Server 2014中解析字符串比在2005年更容易。 –

+0

順便說一句,SQL Server 2016允許進行分區[即使在Express版本中](https://sqlperformance.com/2016/11/sql-server- 2016 /大交易-SP1)。你可能想重新考慮你的設計 –

回答

0

sys.databasesMASTER數據庫中有一個可以使用的create_date字段。您可以查詢該數據庫並使用DATEDIFF獲取要刪除的數據庫名稱。

CREATE_DATE日期時間:數據庫創建或重命名日期。對於 tempdb,每當服務器重新啓動時,此值都會更改。

參見MSDN文檔中有關該表的詳細信息:sys.databases

+0

謝謝。我已經使用下面的腳本來自動完成。在這我需要添加日期時間? DECLARE Qry NVARCHAR(MAX)='' - 填充Qry。 SELECT TOP 1 QRY = QRY + '使用' + QUOTENAME(d.name) \t \t \t + 'DROP DATABASE' + QUOTENAME(d.name) \t \t \t FROM sys.databases中ð WHERE d。[State] = 0 AND LOWER(d.Name)<>'tempdb' \t \t ORDER BY create_date DESC ; /*啓用第一行運行。 *禁用底線,當您對腳本感到滿意時。 */ --EXECUTE sp_ExecuteSQL @Qry - @ BKUScript SELECT @Qry; – Amelia

+0

對不起,使用create_date還有其他方法嗎?因爲create_date對於數據庫的日期順序不正確。 – Amelia