使用SQL Server代理運行CmdExec命令
來源:程序員人生 發(fā)布時間:2014-02-26 18:57:20 閱讀次數(shù):4012次
【IT專家網(wǎng)獨家】需求:調(diào)用網(wǎng)服務(wù)器(SMS SQL Server)上的短信發(fā)送接口(是一個存儲過程)來發(fā)送(Stage SQL Server)上的數(shù)據(jù)內(nèi)容到本Team 成員的手機上。這兩臺服務(wù)器,本地在撥VPN后可以訪問。要求以本地的SQL Server做跳轉(zhuǎn),同時調(diào)用這兩臺服務(wù)器的數(shù)據(jù)接口。
實現(xiàn)方法與步驟(在本地的SQL Server環(huán)境):
1、創(chuàng)建一個SQL Server Job
2、創(chuàng)建一個調(diào)用 操作系統(tǒng)(CmdExec)命令的Job步驟,調(diào)用命令以完成自動撥VPN的功能。
代碼如:
rasdial idc_name user_name user_password
3、創(chuàng)建鏈接服務(wù)器SMS SQL Server和Stage SQL Server。
4、創(chuàng)建一個讀取Stage SQL Server上需要發(fā)送的數(shù)據(jù)內(nèi)容,并調(diào)度SMS SQL Server的短信發(fā)送接口,完成短信發(fā)送的Job步驟(T-SQL)。
5、創(chuàng)建一個CmdExec的Job步驟,調(diào)用命令完成自動斷開VPN的功能。
代碼如:
rasdial idc_name /disconnect
6、設(shè)置這三個步驟的先后順序(2,4,5)。并設(shè)置調(diào)度頻率為每天早上9點。
該過程中可能涉及到兩個問題,如下:
1、分別調(diào)用兩個服務(wù)器上的存儲過程,可能需要打開分布式事務(wù)。簡要步驟如下:
運行dcomcnfg命令,組件服務(wù),計算機,我的電腦,屬性,MSDTC,安全配置
選中“網(wǎng)絡(luò)DTC訪問”
在客戶端管理中選中“允許遠程客戶端”“允許遠程管理”
在事務(wù)管理通訊中選“允許入站”“允許出站”“不要求進行驗證”
保證DTC登陸賬戶為:NT AuthorityNetworkService
2、執(zhí)行CmdExec步驟的默認帳號是SQL Server代理的啟動帳號,一般是 NT AUTHORITYNetworkService,該帳號不是sysadmin組,
不具備執(zhí)行該命令的權(quán)限。所以可能需要修改代理的啟動帳號為有權(quán)限的帳號。
總結(jié):本文總結(jié)問題的關(guān)鍵在于把握分布式事務(wù)的正確開啟以及SQL Server代理中,通常執(zhí)行Job的帳號AUTHORITYNetworkService并不屬于系統(tǒng)管理員組,代理執(zhí)行一些任務(wù)失敗時,注意觀察所執(zhí)行操作需要的權(quán)限,例如本文的執(zhí)行CmdExec命令,就需要sysadmin或者操作系統(tǒng)管理員的權(quán)限。
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈