-1

我必須每天通過網絡複製我的SQL Server備份文件。爲此,我正在考慮編寫批處理文件或PowerShell腳本並將其作爲計劃任務運行。
此過程中的一個問題是區分特定數據庫的最新文件,因爲同一數據庫的三天備份保存在源目錄中。命名約定是:databaseName_backup_yyyy_mm_dd_hhmmss.bak
例如,將數據庫MYDATABASE源目錄下的這三個文件:
myDatabase_backup_2015_03_19_230000.bak
myDatabase_backup_2015_03_20_230000.bak
myDatabase_backup_2015_03_21_230000.bak使用特定名稱(或最近的名稱)通過網絡複製文件

該文件將要麼是最近爲一個特定數據庫創建的一個,要麼是其名稱中包含當前日期的那個。

謝謝大家。

編輯:我可以在目標服務器上實現此功能,而不是在源上。

回答

1

我這樣做,沒有太多聰明的Powershell邏輯,借用傳統的CMDs,因爲SQL正在處理您的保留(3個完整備份的外觀),我做了以下操作。通過您的存儲這些SQL備份服務器上的任務調度運行(這樣他們拉,而不是從SQL被髮送)

$remoteserver = "servername" 
$remoteshare = "backups$" 

$toEmail = "[email protected]" 
$subject = "$remoteserver Robocopy Log" 
$fromEmail = "[email protected]" 
$smtpServer = "exchange.local" 
$Attachment = "C:\scripts\$remoteserver-copy.log" 


robocopy "$remoteshare\$remoteserver\" G:\LocalDestination\"$remoteserver"\ /s | Out-File $Attachment 
Send-MailMessage $toEmail $subject -SmtpServer $smtpServer -From $fromEmail -Attachment $Attachment 

`

+0

謝謝,但我無法通過SMTP發送大尺寸的備份。我需要複製這些文件。 – Stackoverflowuser 2015-03-19 09:46:29

+0

Robocopy正在進行復制,電子郵件只是Robocopy日誌,因此您可以查看任何問題/確認備份成功。如果需要,您可以將電子郵件部分註釋掉,但對我而言,確認是最重要的部分。 – 2015-03-19 10:07:16

+0

謝謝你。你介意修改這個腳本,以便我可以從目標服務器運行嗎? (將存儲備份備份的服務器。) – Stackoverflowuser 2015-03-19 12:06:41