2015-02-23 62 views
0

我想讀取和刪除sql server中的任何特定文件。閱讀和刪除sql server中的文件

方案

當我試圖使用Post Deployment Script發佈我的數據庫,它會自動備份數據庫的默認Backup目錄。現在我正在逐漸獲得更大的文件夾。現在我想寫一個將執行的sql作業,並且將刪除除了最後兩個之外的所有bakcup文件。這是可能的,也是適合在SQL中做。如果沒有,那爲什麼?

+4

@downvoter,如果這是一個錯誤的問題,你必須投票,但請注意解釋它有助於人們下次改進 – Ancient 2015-02-23 07:02:04

+0

你的備份文件是如何命名的?按照哪些標準對文件進行排序並確定哪些是前兩項? – veljasije 2015-02-23 08:44:05

+0

filesnames是這樣的:databasename_datetime.bak – Ancient 2015-02-23 08:58:48

回答

0

現在我得到的文件夾一天天變大。現在我想寫一個SQL作業,將執行並將刪除除最後兩個以外的所有bakcup文件

當您進行備份時的默認選項是將當前備份文件添加到前一個。選項是(NOINIT).請參閱backup documentation您需要做的是在進行備份時添加INIT選項,這將覆蓋以前的備份。

如果你的情況是這樣的,你只是想刪除舊的備份文件,這可以通過編寫自定義腳本來完成。幸運的是,你有這個Ola Hallengren script。我強烈建議你先閱讀常見問題解答並摘錄。閱讀示例將爲您清楚說明腳本的工作原理

1

您可以創建SQL作業以從文件系統中刪除文件。

首先,您必須啓動SQL Agent服務。

下一步是創建powershell腳本來刪除所需的文件。將腳本放在例如D:\Test\文件夾上,並給腳本命名,如DeleteFile.ps1。編輯腳本,並寫下代碼:

$files = Get-ChildItem D:\Test *.txt | Select Name, CreationTime, FullName | Sort CreationTime 

for ($i=0; $i -lt ($files.Count -2); $i++) { 
    Remove-Item $files[$i].FullName 
} 

然後保存並關閉編輯器。

然後,在SQL代理樹中,右鍵單擊喬布斯文件夾並選擇新建作業。在對話框窗口中,在通用選項卡中,給出作業名稱,然後在窗口左側,選擇步驟,然後新建

在新的對話窗口,在部分類型,選擇操作系統(CmdExec)。在現場命令,只是叫你刪除所需的文件創建PowerShell腳本:

D:\Test\DeleteFile.ps1 

,並單擊OK 創造就業。

完成後,要測試刪除文件,請右鍵單擊創建的作業,然後選擇開始作業作爲步驟選項。

注意

建議測試一些測試機上所有的工作把之前投入生產。我刪除的文件是.txt文件,但您只需將代碼更改爲映射.bak文件即可。當然,你可以改變文件的位置。