標籤:style blog http os 檔案 資料 2014 art
On-Premise的SQL Server提供了維護計劃來定期、定時的維護SQL Server。一般的做法是:定義SQL Server Agent Jobs,而後維護計劃協助我們定期、定時執行SQL Server Agent Jobs。遺憾的是,SQL Database並不提供維護計劃以及SQL Server Agent功能。
然而,根據MSDN的說法,我們依然可以通過SQL Server提供的維護計劃串連到SQL Database。(Microsoft Azure SQL Database does not support SQL Server Agent or jobs. You can, however, run SQL Server Agent on your on-premise SQL Server and connect to Microsoft Azure SQL Database. http://msdn.microsoft.com/library/azure/ee336245.aspx#sqlagent )。具體做法如下:
通過SQL Server Agent可以調用sqlcmd命令,然後我們可以指定執行sqlcmd命令的伺服器。這樣,我們就可以配置一個SQL Server Agent Job去調用sqlcmd來維護SQL Database。
配置SQL Server Agent Job的方式如下 (SSMS 2012):
1. 建立一個SQL Server Agent Job:
2. 配置Job Steps:
3. 建立一個Job Step,Step類型選擇Operating system (CmdExec):
4. 配置sqlcmd。在這個例子中,我試圖通過sqlcmd去刪除我的SQL Database中,HolTestDB資料庫下,名為People表中,ID大於13的資料。那麼這個命令為:
sqlcmd -U xxxxx -P xxxxxx -S xxxxx -d HolTestDB -Q "delete from People where ID > 13"
請注意,上述例子中參數的意義如下:
-U : SQL Database的使用者名稱
-P : 密碼
-d: 資料庫名稱
-Q: sql語句
-S : 伺服器DNS名稱。您可以通過管理入口網站找到,如:
5. 測試sqlcmd是否有效 (註:這個步驟並不是必須的)。測試的目的,是為了驗證我們配置的命令是否真的有效。然而,我並不想在測試的過程就把資料刪掉,所以我將sqlcmd命令改成(delete換成select):
sqlcmd -U xxxxx -P xxxxxx -S xxxxx -d HolTestDB -Q "select * from People"
在命令列視窗,輸入上面命令並得到下面的結果,說明該命令可以work:
6. 為Agent Job設定sqlcmd命令並儲存:
7. 運行Agent Job:選中剛才建立的Job,點右鍵,選擇Start Job at Step…
8. 運行成功:
9. 第5步的方式驗證以下結果,發現ID大於13的成功被刪除:
此外,我們也可以將您的SQL指令碼放到.sql檔案中,那麼sqlcmd相應調整如下(之前的例子,通過-Q參數指定sql語句;下面的例子,通過-i參數執行sql指令檔):
sqlcmd -U xxxx –P xxxx -S xxxxx -d HolTestDB -i "D:\MaintainSqlAzure.sql"
更多關於sqlcmd的使用者,請參考:
sqlcmd 工具 + 生產力
How to: Connect to Azure SQL Database Using sqlcmd