2009-02-04 163 views
3

我有這個SQL作業(在SQL Server 2005中)每六(6)小時創建一個備份,備份的文件名基於時間戳,以便它會創建一個唯一的文件名(dbname_yyyymmddhhmmss.bak),現在我的問題是,如果文件是三天,並基於我的腳本我想刪除備份(.bak)是一個三天的舊我怎麼知道使用xp_cmdshell。有人可以幫助我,在此先感謝。乾杯!通過日期從一個目錄複製文件到另一個目錄

回答

1

這是不是真的回答你的問題,但你可以直接在SqlServer的2005年與維護計劃做到這一點(對象資源管理器 - >管理 - >維護計劃)。

我通常會創建一個維護計劃,其中包括兩個任務:一個「維護清理任務」,在x天后刪除舊備份,然後是「備份數據庫任務」。

+0

這正是正確的答案。 – 2009-02-04 12:44:48

1

這不是一個真正適合xp_cmdshell的任務。在SQL Server中啓用此功能也具有安全隱患。

您期望實現的內容更適合於SQL Server Integration Services(SSIS)。有可用於管理和執行備份的組件,以及可用於移動和刪除數據的文件系統任務組件。

您可以使用文件系統任務,變量和表達式的組合來檢索備份文件名,提取日期組件並確定文件的大小。然後您可以對該文件採取適當的措施。

我希望這可以幫助,但如果您需要更多的信息,請隨時提出進一步的問題。

乾杯,約翰

0

你可以編寫一個.NET程序集並從SQL Server中調用它。編寫它會相當容易,以便表值函數返回具有文件名和文件日期戳的特定目錄中的所有文件。

4

我同意xp_cmdshell不是該作業的最佳選擇。如果你和我一樣,並且你不喜歡/信任維護計劃,那麼你可以編寫一個C#控制檯應用程序,其中文件系統支持比你在DOS中可以做得更強大(或者使用T-SQL來分析輸出xp_cmdshell'DIR ...'),然後在Windows計劃任務中進行安排,以便您不必擔心從SQL Server服務/代理帳戶升級特權。雖然把所有東西都放在一個包裝裏很好,但你並不總是希望那些改變你的油的人讓你變成乳蛋餅。

相關問題