SQL Server代理(8/12):使用SQL Server代理外部程式

來源:互聯網
上載者:User

標籤:

SQL Server代理是所有即時資料庫的核心。代理有很多不明顯的用法,因此系統的知識,對於開發人員還是DBA都是有用的。這系列文章會通俗介紹它的很多用法。

在這個系列的上篇文章裡,你學習如何使用SQL Server代理作業活動監視器監視作業活動和查看作業曆史。對於你的SQL Server代理作業進行即時監視和管理,作業Active Manager是個強大的工具。在這個系列的第8篇文章裡,你會回顧SQL Server代理的另一個功能——運行作業系統命令列,在SQL Server外圍環境運行程式。一些程式是命令列(傳統的cmd應用程式/指令碼或PowerShell指令碼),或者甚至ActiveX指令碼,但實際上你可以運行系統命令列,幾乎可以運行任何程式,只要程式不需要使用者的直接輸入。你會學到如何運行cmdexec和PowerShell指令碼,我們會簡單討論下什麼時候用這些子系統會更合適。你學到如何從SQL Server代理調用其它程式。

內建作業子系統

如你在以前的文章所見,有很多內建的子系統。在這篇文章裡,你會檢查可以在作業系統裡運行指令碼或程式的3個內建子系統,而不是在SQL Server環境本身的上下文。這3個包括:

  • 作業系統(CmdExec)
  • PowerShell
  • ActiveX指令碼

但一個程式或指令碼從這個3個系統啟動時,在作業系統裡會建立新的進程(例如不是SQL Server代理的一部分),指令碼或程式運行,資訊傳回啟動進程或指令碼的SQL Server代理作業。

作業系統(CmdExec)子系統

第一個我們要談的是作業系統(CmdExec)子系統。CmdExec子系統開啟一個命令列,猶如已經登入到運行SQL Server的作業系統。從那點來說,你可以運行一切,在命令列裡輸入。這包括任何的批次檔,指令碼,甚至你伺服器上存在的程式,當然你可以在輸入UNC路徑來訪問檔案,這是CmdExec子系統可以做的。

但是安全呢?

當然,所有關於這個的重要提醒是許可權——會正常工作麼,在什麼安全上下文下?預設情況下,當你在CmdExec子系統裡建立一個作業(或其他的,一會就會看到),作業會在SQL Server代理服務帳號的安全上下文運行(如插圖1所示)。你也會留意到這是個下拉的值,因此也有其它選項。在這個系列的第10篇,你會用到代理帳號。另一個要注意的重點:你必須是SQL Server的sysadmin群組成員,才可以運行SQL Server代理服務帳號啟動並執行作業。

插圖1:在CmdExec作業步驟裡的作業安全

建立一個CmdExec作業步驟

為了建立CmdExec作業步驟,建立新的作業(我們命名為Shellout),然後添加新的作業步驟。如插圖1所示,我們命名步驟為S1,修改作業步驟類型為“作業系統(CmdExec)”,保持運行身份為預設(”SQL Server Agent服務帳號“)。對於我們的第一個作業,簡單的輸入”dir c:\",如插圖1所示命令文本。點擊【確定】,然後點擊【確定】儲存作業。運行作業(右擊作業“Shellout”,選擇【作業開始步驟】),一旦作業完成運行,右擊選擇【查看記錄】。點擊作業步驟的輸出,如插圖2所示,已經對應C盤執行了dir命令。

插圖2:記錄檔查看起顯示的CmdExec作業執行結果

如你所想象的,這個是一個簡單的命令,你很容易想到運行複雜的批處理指令碼,或者如剛才描述的,甚至啟動一個程式(例如,啟動“記事本”)。 提醒一句,如果你啟動例如記事本的程式,它會運行在虛擬隱藏的案頭,等待使用者輸入。因為案頭是隱藏的,沒有使用者可以輸入,甚至退出程式的命令也不行。換句話說,你的作業步驟永遠不會結束。你需要在例如工作管理員裡找到記事本的進程,殺掉進行來讓作業步驟返回。從CmdExec子系統運行程式會有很多有趣的情境,只要程式會正常返回控制給SQL Server代理,才會結束。

PowerShell子系統

PowerShell自SQL Server 2008發布的時候加入。它支援PowerShell 1.0 或 PowerSher 2.0,取決與你伺服器上安裝的版本。當你建立了一個作業步驟,選擇了PowerShell子系統作為你的作業步驟類型,你會有和CmdExec子系統類似的選項。你可以輸入PowerShell指令碼的文本,或調用現存的PowerShell指令碼。當你從SQL Serverdialing裡啟動PowerShell會話,SQL Server的PowerShell會提前為你載入。

當使用PowerShell指令碼簽名和安全時,有很多要考慮的事情,這個話題太大,在這裡就不討論了。但你可以參閱下它的使用者手冊:https://technet.microsoft.com/en-us/library/ee176949.aspx

順便提下,PowerShell會很容易成為你的指令碼工具。對於SQL Server裡常規操作,例如運行T-SQL會更簡單。

不管怎樣,重複的工作,或者在CmdExec情況下的操作,從PowerShell子系統離開SQL Server環境的任何操作都更簡單。

為了展示一個例子,重新開啟你的ShellOut作業,增加一個作業步驟S2。選擇PowerShell作為作業類型,例如下列指令碼:

1 $server = new-object( ‘Microsoft.SqlServer.Management.Smo.Server‘ ) “(local)”2 3 foreach ($database in $server.databases) 4 {5 $dbName = $database.Name6 Write-Output "Database: $dbName" 7 }

 

插圖3:PowerShell子系統的作業步驟

這個指令碼會直接登入到你的本地SQL Server(如果要指定伺服器就修改執行個體名稱),然後在伺服器上迴圈獲得每個資料庫的名稱。你很容易會想到Database Backup,例如檢查它們的屬性等。另外要注意的是你已經登入並串連到資料庫——因此在你的組織裡你可以登入到任意的SQL Server。為了實驗這個,點擊確定,再次點擊確定。如果出現提示,修正作業步驟1這樣它會正確走向下一步。運行作業,和查看CmdExec子系統步驟的輸出一樣的方法。你會看到輸出有伺服器上的資料庫名稱列表。

PowerShell子系統真正有趣的是,你可以從作業系統、活動目錄查詢資訊,然後可以運行你想要對你伺服器操作的任何指令碼。你想查詢SQL Server監聽的連接埠號碼嗎?你用通過PowerShell查詢WMI。你想從註冊表擷取資訊?也是可以的。在網路上有很多PowerShell指令碼,你可以自己依據需要搜尋下。

ActiveX指令碼子系統

ActiveX指令碼子系統允許你運行運行ActiveX指令碼,在作業系統裡可以使用VBScript或Jscript。這裡包括這個子系統是作為補充,但你不應該從SQL Server代理使用ActiveX指令碼。這個子系統已經剝離,就是說以後的SQL Server將會移除這個功能。

我應該使用哪個子系統?

如果現存的作業使用其中一個子系統,你應該繼續使用它,除非你有足夠的理由來修改它。不管怎樣,如果你啟動一個新的作業或作業步驟,PowerShell子系統提供你足夠強大的功能。另外,微軟已經將PowerShell指令碼作為微軟所有產品的標準指令碼。花時間學習下PowerShell會讓你的SQL Server代理非常強大!

下篇預告

 SQL Server代理的CmdExec,PowerShell和ActiveX子系統允許你與SQL Server代理進行很多任務,包括運行批次檔或外部程式。另外,使用PowerShell你可以訪問和控制任何微軟產品。對於新的任務,推薦使用PowerShell子系統。

在下篇文章裡,我們會談論下SQL Server代理安全。到目前為止,這系列文章都假定你是sysadmin服務群組成員,下一步會從SQL Server代理的非sysadmin群組成員角度談論下SQL Server代理,還有深入談下作業的安全上下文。

SQL Server代理(8/12):使用SQL Server代理外部程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.